From 4fe7fce97aedbd516109ef81afc33e00112b7b68 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Fri, 28 Aug 2020 18:58:37 +0200 Subject: Must unit propagation --- .../modes3/run/.Modes3ModelGenerator.xtendbin | Bin 14631 -> 15038 bytes .../modes3/run/.Modes3TypeScopeHint.xtendbin | Bin 0 -> 7179 bytes .../run/.Modes3UnitPropagationGenerator.xtendbin | Bin 9899 -> 11735 bytes .../xtend-gen/modes3/run/.gitignore | 1 + .../xtend-gen/modes3/run/Modes3ModelGenerator.java | 56 +- .../xtend-gen/modes3/run/Modes3TypeScopeHint.java | 133 +++ .../modes3/run/Modes3UnitPropagationGenerator.java | 1133 +++++++++++++++----- 7 files changed, 1029 insertions(+), 294 deletions(-) create mode 100644 Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3TypeScopeHint.xtendbin create mode 100644 Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3TypeScopeHint.java (limited to 'Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3') diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3ModelGenerator.xtendbin b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3ModelGenerator.xtendbin index 4f542a67..77f1ea6e 100644 Binary files a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3ModelGenerator.xtendbin and b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3ModelGenerator.xtendbin differ diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3TypeScopeHint.xtendbin b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3TypeScopeHint.xtendbin new file mode 100644 index 00000000..4fdbb71b Binary files /dev/null and b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3TypeScopeHint.xtendbin differ diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3UnitPropagationGenerator.xtendbin b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3UnitPropagationGenerator.xtendbin index 28e763b9..e5e1b63e 100644 Binary files a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3UnitPropagationGenerator.xtendbin and b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.Modes3UnitPropagationGenerator.xtendbin differ diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.gitignore b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.gitignore index 53dcf60f..fb94df96 100644 --- a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.gitignore +++ b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/.gitignore @@ -1,2 +1,3 @@ /.Modes3ModelGenerator.java._trace /.Modes3UnitPropagationGenerator.java._trace +/.Modes3TypeScopeHint.java._trace diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3ModelGenerator.java b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3ModelGenerator.java index c7364257..f32a7172 100644 --- a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3ModelGenerator.java +++ b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3ModelGenerator.java @@ -12,7 +12,9 @@ import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor; import hu.bme.mit.inf.dslreasoner.ecore2logic.ecore2logicannotations.Ecore2logicannotationsFactory; import hu.bme.mit.inf.dslreasoner.ecore2logic.ecore2logicannotations.Ecore2logicannotationsPackage; import hu.bme.mit.inf.dslreasoner.ecore2logic.ecore2logicannotations.InverseRelationAssertion; +import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel; import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicProblemBuilder; +import hu.bme.mit.inf.dslreasoner.logic.model.builder.SolutionScope; import hu.bme.mit.inf.dslreasoner.logic.model.builder.TracedOutput; import hu.bme.mit.inf.dslreasoner.logic.model.builder.TypeScopes; import hu.bme.mit.inf.dslreasoner.logic.model.builder.VariableContext; @@ -48,6 +50,7 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.par import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.RelationLink; import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretation2Gml; import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualisation; +import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.DebugConfiguration; import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.StateCoderStrategy; import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner; import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration; @@ -57,12 +60,13 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.function.Consumer; import java.util.function.Predicate; import modes3.Modes3Factory; import modes3.Modes3ModelRoot; import modes3.Modes3Package; import modes3.queries.Modes3Queries; +import modes3.run.Modes3TypeScopeHint; +import modes3.run.Modes3UnitPropagationGenerator; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EAttribute; @@ -175,29 +179,47 @@ public class Modes3ModelGenerator { it_1.minNewElements = this.modelSize; it_1.maxNewElements = this.modelSize; final Procedure1> _function_4 = (Map it_2) -> { - it_2.put(this.ecore2Logic.TypeofEClass(metamodelLogic.getTrace(), Modes3Package.eINSTANCE.getTurnout()), Integer.valueOf(1)); }; ObjectExtensions.>operator_doubleArrow( it_1.minNewElementsByType, _function_4); final Procedure1> _function_5 = (Map it_2) -> { it_2.put(this.ecore2Logic.TypeofEClass(metamodelLogic.getTrace(), Modes3Package.eINSTANCE.getTrain()), Integer.valueOf(5)); + it_2.put(this.ecore2Logic.TypeofEClass(metamodelLogic.getTrace(), Modes3Package.eINSTANCE.getTurnout()), Integer.valueOf(5)); }; ObjectExtensions.>operator_doubleArrow( it_1.maxNewElementsByType, _function_5); }; ObjectExtensions.operator_doubleArrow( it.typeScopes, _function_3); - it.solutionScope.numberOfRequiredSolutions = 1; + final Procedure1 _function_4 = (SolutionScope it_1) -> { + it_1.numberOfRequiredSolutions = 1; + }; + ObjectExtensions.operator_doubleArrow( + it.solutionScope, _function_4); + it.scopeWeight = 5; it.nameNewElements = false; it.typeInferenceMethod = TypeInferenceMethod.PreliminaryAnalysis; - it.stateCoderStrategy = StateCoderStrategy.Neighbourhood; + it.stateCoderStrategy = StateCoderStrategy.PairwiseNeighbourhood; ScopePropagatorStrategy.Polyhedral _polyhedral = new ScopePropagatorStrategy.Polyhedral( PolyhedralScopePropagatorConstraints.Relational, PolyhedralScopePropagatorSolver.Clp); it.scopePropagatorStrategy = _polyhedral; - it.debugConfiguration.partialInterpretatioVisualiser = null; + Ecore2Logic_Trace _trace = metamodelLogic.getTrace(); + Modes3TypeScopeHint _modes3TypeScopeHint = new Modes3TypeScopeHint(this.ecore2Logic, _trace); + it.hints.add(_modes3TypeScopeHint); + Ecore2Logic_Trace _trace_1 = metamodelLogic.getTrace(); + Modes3UnitPropagationGenerator _modes3UnitPropagationGenerator = new Modes3UnitPropagationGenerator(this.ecore2Logic, _trace_1); + it.unitPropagationPatternGenerators.add(_modes3UnitPropagationGenerator); + final Procedure1 _function_5 = (DebugConfiguration it_1) -> { + GraphvizVisualiser _graphvizVisualiser = new GraphvizVisualiser(); + it_1.partialInterpretatioVisualiser = _graphvizVisualiser; + }; + ObjectExtensions.operator_doubleArrow( + it.debugConfiguration, _function_5); + it.documentationLevel = DocumentationLevel.NORMAL; }; final ViatraReasonerConfiguration config = ObjectExtensions.operator_doubleArrow(_viatraReasonerConfiguration, _function_2); final FileSystemWorkspace workspace = new FileSystemWorkspace("output/", ""); + workspace.writeModel(logic.getOutput(), "problem.logicproblem"); final LogicResult solution = this.solver.solve(logic.getOutput(), config, workspace); URI _xifexpression = null; if ((solution instanceof ModelResult)) { @@ -226,27 +248,23 @@ public class Modes3ModelGenerator { boolean _lessThan = (_size_1 < 160); if (_lessThan) { if ((representation instanceof PartialInterpretation)) { - final Consumer _function_3 = (Type it) -> { - InputOutput.println(it.getName()); - }; - ((PartialInterpretation)representation).getProblem().getTypes().forEach(_function_3); - final Function1 _function_4 = (Type it) -> { + final Function1 _function_3 = (Type it) -> { String _name_2 = it.getName(); return Boolean.valueOf(Objects.equal(_name_2, "Modes3ModelRoot class DefinedPart")); }; - Type _findFirst = IterableExtensions.findFirst(((PartialInterpretation)representation).getProblem().getTypes(), _function_4); + Type _findFirst = IterableExtensions.findFirst(((PartialInterpretation)representation).getProblem().getTypes(), _function_3); final TypeDefinition rootType = ((TypeDefinition) _findFirst); - final Function1 _function_5 = (PartialComplexTypeInterpretation it) -> { + final Function1 _function_4 = (PartialComplexTypeInterpretation it) -> { String _name_2 = it.getInterpretationOf().getName(); return Boolean.valueOf(Objects.equal(_name_2, "Modes3ModelRoot class")); }; final PartialComplexTypeInterpretation rootIntepretation = IterableExtensions.findFirst(Iterables.filter(((PartialInterpretation)representation).getPartialtypeinterpratation(), - PartialComplexTypeInterpretation.class), _function_5); + PartialComplexTypeInterpretation.class), _function_4); rootIntepretation.getElements().removeAll(rootType.getElements()); ((PartialInterpretation)representation).getProblem().getElements().removeAll(rootType.getElements()); EList _partialrelationinterpretation = ((PartialInterpretation)representation).getPartialrelationinterpretation(); for (final PartialRelationInterpretation relationInterpretation : _partialrelationinterpretation) { - final Predicate _function_6 = (RelationLink link) -> { + final Predicate _function_5 = (RelationLink link) -> { boolean _xifexpression_1 = false; if ((link instanceof BinaryElementRelationLink)) { _xifexpression_1 = (rootType.getElements().contains(((BinaryElementRelationLink)link).getParam1()) || rootType.getElements().contains(((BinaryElementRelationLink)link).getParam2())); @@ -255,7 +273,7 @@ public class Modes3ModelGenerator { } return _xifexpression_1; }; - relationInterpretation.getRelationlinks().removeIf(_function_6); + relationInterpretation.getRelationlinks().removeIf(_function_5); } rootType.getElements().clear(); } @@ -349,13 +367,7 @@ public class Modes3ModelGenerator { Viatra2LogicAnnotationsPackage.eINSTANCE.getClass(); Map _extensionToFactoryMap = Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap(); XMIResourceFactoryImpl _xMIResourceFactoryImpl = new XMIResourceFactoryImpl(); - _extensionToFactoryMap.put("ecore", _xMIResourceFactoryImpl); - Map _extensionToFactoryMap_1 = Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap(); - XMIResourceFactoryImpl _xMIResourceFactoryImpl_1 = new XMIResourceFactoryImpl(); - _extensionToFactoryMap_1.put("logicproblem", _xMIResourceFactoryImpl_1); - Map _extensionToFactoryMap_2 = Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap(); - XMIResourceFactoryImpl _xMIResourceFactoryImpl_2 = new XMIResourceFactoryImpl(); - _xblockexpression = _extensionToFactoryMap_2.put("partialinterpretation", _xMIResourceFactoryImpl_2); + _xblockexpression = _extensionToFactoryMap.put("*", _xMIResourceFactoryImpl); } return _xblockexpression; } diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3TypeScopeHint.java b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3TypeScopeHint.java new file mode 100644 index 00000000..adb69760 --- /dev/null +++ b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3TypeScopeHint.java @@ -0,0 +1,133 @@ +package modes3.run; + +import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic; +import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace; +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type; +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.Modality; +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.LinearBoundedExpression; +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.LinearTypeConstraintHint; +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.LinearTypeExpressionBuilderFactory; +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.RelationConstraintUpdater; +import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator; +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation; +import java.util.Iterator; +import java.util.Map; +import modes3.Modes3Package; +import modes3.queries.Adjacent; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery; +import org.eclipse.xtend2.lib.StringConcatenation; +import org.eclipse.xtext.xbase.lib.Extension; + +@SuppressWarnings("all") +public class Modes3TypeScopeHint implements LinearTypeConstraintHint { + private static final String TURNOUT_NEIGHBOR_COUNT = "turnoutNeighborCount"; + + private final Type segmentType; + + private final Type turnoutType; + + public Modes3TypeScopeHint(@Extension final Ecore2Logic ecore2Logic, final Ecore2Logic_Trace ecore2LogicTrace) { + @Extension + final Modes3Package Modes3Package = modes3.Modes3Package.eINSTANCE; + this.segmentType = ecore2Logic.TypeofEClass(ecore2LogicTrace, Modes3Package.getSegment()); + this.turnoutType = ecore2Logic.TypeofEClass(ecore2LogicTrace, Modes3Package.getTurnout()); + } + + @Override + public CharSequence getAdditionalPatterns(@Extension final PatternGenerator patternGenerator, final Map fqnToPQuery) { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("\t"); + _builder.append("pattern "); + _builder.append(Modes3TypeScopeHint.TURNOUT_NEIGHBOR_COUNT, "\t"); + _builder.append("_helper(problem: LogicProblem, interpretation: PartialInterpretation, source: DefinedElement, target: DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t\t"); + _builder.append("find interpretation(problem, interpretation);"); + _builder.newLine(); + _builder.append("\t\t"); + _builder.append("find mustExist(problem, interpretation, source);"); + _builder.newLine(); + _builder.append("\t\t"); + _builder.append("find mustExist(problem, interpretation, target);"); + _builder.newLine(); + _builder.append("\t\t"); + CharSequence _referInstanceOf = patternGenerator.getTypeIndexer().referInstanceOf(this.turnoutType, Modality.MUST, "source"); + _builder.append(_referInstanceOf, "\t\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t\t"); + CharSequence _referInstanceOf_1 = patternGenerator.getTypeIndexer().referInstanceOf(this.segmentType, Modality.MUST, "target"); + _builder.append(_referInstanceOf_1, "\t\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t\t"); + CharSequence _referPattern = patternGenerator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Adjacent.instance().getFullyQualifiedName()), new String[] { "source", "target" }, Modality.MUST, true, false); + _builder.append(_referPattern, "\t\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("\t"); + _builder.append("pattern "); + _builder.append(Modes3TypeScopeHint.TURNOUT_NEIGHBOR_COUNT, "\t"); + _builder.append("(problem: LogicProblem, interpretation: PartialInterpretation, element: DefinedElement, N) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t\t"); + _builder.append("find interpretation(problem, interpretation);"); + _builder.newLine(); + _builder.append("\t\t"); + _builder.append("find mustExist(problem, interpretation, element);"); + _builder.newLine(); + _builder.append("\t\t"); + CharSequence _referInstanceOf_2 = patternGenerator.getTypeIndexer().referInstanceOf(this.turnoutType, Modality.MUST, "element"); + _builder.append(_referInstanceOf_2, "\t\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t\t"); + _builder.append("N == count find "); + _builder.append(Modes3TypeScopeHint.TURNOUT_NEIGHBOR_COUNT, "\t\t"); + _builder.append("_helper(problem, interpretation, element, _);"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("}"); + _builder.newLine(); + return _builder; + } + + @Override + public RelationConstraintUpdater createConstraintUpdater(final LinearTypeExpressionBuilderFactory builderFactory) { + final ViatraQueryMatcher turnoutNeighborCountMatcher = builderFactory.createMatcher(Modes3TypeScopeHint.TURNOUT_NEIGHBOR_COUNT); + final LinearBoundedExpression newNeighbors = builderFactory.createBuilder().add(1, this.segmentType).build(); + final RelationConstraintUpdater _function = (PartialInterpretation partialInterpretation) -> { + final int requiredNeighbbors = Modes3TypeScopeHint.getRemainingCount(turnoutNeighborCountMatcher, partialInterpretation, 3); + newNeighbors.tightenLowerBound(Integer.valueOf(requiredNeighbbors)); + }; + return _function; + } + + private static int getRemainingCount(final ViatraQueryMatcher matcher, final PartialInterpretation partialInterpretation, final int capacity) { + int _xblockexpression = (int) 0; + { + final T partialMatch = matcher.newEmptyMatch(); + partialMatch.set(0, partialInterpretation.getProblem()); + partialMatch.set(1, partialInterpretation); + final Iterator iterator = matcher.streamAllMatches(partialMatch).iterator(); + int max = 0; + while (iterator.hasNext()) { + { + final T match = iterator.next(); + Object _get = match.get(3); + final int n = ((Integer) _get).intValue(); + if ((n < capacity)) { + final int required = (capacity - n); + if ((max < required)) { + max = required; + } + } + } + } + _xblockexpression = max; + } + return _xblockexpression; + } +} diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3UnitPropagationGenerator.java b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3UnitPropagationGenerator.java index 91adaaaa..5c5f82c5 100644 --- a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3UnitPropagationGenerator.java +++ b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/Modes3UnitPropagationGenerator.java @@ -10,9 +10,8 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.UnitPropaga import java.util.Collections; import java.util.Map; import modes3.Modes3Package; -import modes3.queries.ExtraInputOfTurnout; +import modes3.queries.Adjacent; import modes3.queries.Output; -import modes3.queries.TurnoutOutput; import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PQuery; import org.eclipse.xtend2.lib.StringConcatenationClient; import org.eclipse.xtext.xbase.lib.CollectionLiterals; @@ -23,16 +22,20 @@ import org.eclipse.xtext.xbase.lib.Pair; public class Modes3UnitPropagationGenerator implements UnitPropagationPatternGenerator { private static final String MUST_NOT_CONNECTED_TO = "mustNotConnectedTo"; - private static final String MUST_NOT_CONNECTED_TO_HELPER = "mustNotConnectedTo_helper"; - - private static final String MUST_NOT_TURNOUT_OUTPUT = "mustNotTurnoutOutput"; - private static final String MUST_NOT_STRAIGHT = "mustNotStraight"; private static final String MUST_NOT_DIVERGENT = "mustNotDivergent"; + private static final String MUST_CONNECTED_TO = "mustConnectedTo"; + + private static final String MUST_STRAIGHT = "mustStraight"; + + private static final String MUST_DIVERGENT = "mustDivergent"; + private final Type segmentType; + private final Type simpleSegmentType; + private final Type turnoutType; private final Relation connectedToRelation; @@ -45,6 +48,7 @@ public class Modes3UnitPropagationGenerator implements UnitPropagationPatternGen @Extension final Modes3Package Modes3Package = modes3.Modes3Package.eINSTANCE; this.segmentType = ecore2Logic.TypeofEClass(ecore2LogicTrace, Modes3Package.getSegment()); + this.simpleSegmentType = ecore2Logic.TypeofEClass(ecore2LogicTrace, Modes3Package.getSimpleSegment()); this.turnoutType = ecore2Logic.TypeofEClass(ecore2LogicTrace, Modes3Package.getTurnout()); this.connectedToRelation = ecore2Logic.relationOfReference(ecore2LogicTrace, Modes3Package.getSegment_ConnectedTo()); this.straightRelation = ecore2Logic.relationOfReference(ecore2LogicTrace, Modes3Package.getTurnout_Straight()); @@ -53,7 +57,10 @@ public class Modes3UnitPropagationGenerator implements UnitPropagationPatternGen @Override public Map getMustPatterns() { - return CollectionLiterals.emptyMap(); + Pair _mappedTo = Pair.of(this.connectedToRelation, Modes3UnitPropagationGenerator.MUST_CONNECTED_TO); + Pair _mappedTo_1 = Pair.of(this.straightRelation, Modes3UnitPropagationGenerator.MUST_STRAIGHT); + Pair _mappedTo_2 = Pair.of(this.divergentRelation, Modes3UnitPropagationGenerator.MUST_DIVERGENT); + return Collections.unmodifiableMap(CollectionLiterals.newHashMap(_mappedTo, _mappedTo_1, _mappedTo_2)); } @Override @@ -89,496 +96,1078 @@ public class Modes3UnitPropagationGenerator implements UnitPropagationPatternGen _builder.newLine(); } }; - final StringConcatenationClient commonParameterConstraints = _client_1; + final StringConcatenationClient commonMustParameterConstraints = _client_1; StringConcatenationClient _client_2 = new StringConcatenationClient() { @Override protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) { - _builder.append("pattern "); - _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_CONNECTED_TO_HELPER); - _builder.append("("); - _builder.append(parameters); - _builder.append(") {"); - _builder.newLineIfNotEmpty(); - _builder.append("\t"); - _builder.append("// connectedToReflexive unit propagation"); - _builder.newLine(); - _builder.append("\t"); - _builder.append(commonParameterConstraints, "\t"); - _builder.newLineIfNotEmpty(); - _builder.append("\t"); - CharSequence _referInstanceOf = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "source"); - _builder.append(_referInstanceOf, "\t"); - _builder.newLineIfNotEmpty(); - _builder.append("\t"); - CharSequence _referInstanceOf_1 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "target"); - _builder.append(_referInstanceOf_1, "\t"); - _builder.newLineIfNotEmpty(); - _builder.append("\t"); - _builder.append("source == target;"); + _builder.append("find interpretation(problem, interpretation);"); _builder.newLine(); - _builder.append("} or {"); + _builder.append("find mayExist(problem, interpretation, source);"); _builder.newLine(); - _builder.append("\t"); - _builder.append("// tooManyInputsOfSegment unit propagation"); + _builder.append("find mayExist(problem, interpretation, target);"); _builder.newLine(); - _builder.append("\t"); - _builder.append(commonParameterConstraints, "\t"); + } + }; + final StringConcatenationClient commonMayParameterConstraints = _client_2; + StringConcatenationClient _client_3 = new StringConcatenationClient() { + @Override + protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) { + _builder.append("pattern mayInput("); + _builder.append(parameters); + _builder.append(") {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_2 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "source"); - _builder.append(_referInstanceOf_2, "\t"); + _builder.append(commonMayParameterConstraints, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_3 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "target"); - _builder.append(_referInstanceOf_3, "\t"); + CharSequence _referInstanceOf = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "target"); + _builder.append(_referInstanceOf, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_4 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "input1"); - _builder.append(_referInstanceOf_4, "\t"); + CharSequence _referPattern = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Adjacent.instance().getFullyQualifiedName()), new String[] { "target", "source" }, Modality.MAY, true, false); + _builder.append(_referPattern, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_5 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "input2"); - _builder.append(_referInstanceOf_5, "\t"); + _builder.append("neg "); + CharSequence _referRelation = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "target", "source", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("neg "); - CharSequence _referInstanceOf_6 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MAY, "source"); - _builder.append(_referInstanceOf_6, "\t"); + CharSequence _referRelation_1 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "target", "source", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_1, "\t"); _builder.newLineIfNotEmpty(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern multipleMayInput(problem: LogicProblem, interpretation: PartialInterpretation,"); + _builder.newLine(); + _builder.append("\t\t\t"); + _builder.append("target: DefinedElement) {"); + _builder.newLine(); _builder.append("\t"); - CharSequence _referPattern = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Output.instance().getFullyQualifiedName()), new String[] { "input1", "source" }, Modality.MUST, true, false); - _builder.append(_referPattern, "\t"); - _builder.newLineIfNotEmpty(); + _builder.append("find interpretation(problem, interpretation);"); + _builder.newLine(); _builder.append("\t"); - CharSequence _referPattern_1 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Output.instance().getFullyQualifiedName()), new String[] { "input2", "source" }, Modality.MUST, true, false); - _builder.append(_referPattern_1, "\t"); - _builder.newLineIfNotEmpty(); + _builder.append("find mustExist(problem, interpretation, target);"); + _builder.newLine(); _builder.append("\t"); - _builder.append("input1 != input2;"); + _builder.append("find mayInput(problem, interpretaton, source1, target);"); _builder.newLine(); _builder.append("\t"); - _builder.append("input1 != target;"); + _builder.append("find mayInput(problem, interpretaton, source2, target);"); _builder.newLine(); _builder.append("\t"); - _builder.append("input2 != target;"); + _builder.append("neg find mustEquivalent(problem, interpretation, source1, source2);"); _builder.newLine(); - _builder.append("} or {"); + _builder.append("}"); _builder.newLine(); - _builder.append("\t"); - _builder.append("// turnoutConnectedToBothOutputs unit propagation 1"); + _builder.newLine(); + _builder.append("pattern multipleMayStraight(problem: LogicProblem, interpretation: PartialInterpretation,"); + _builder.newLine(); + _builder.append("\t\t\t"); + _builder.append("source: DefinedElement) {"); _builder.newLine(); _builder.append("\t"); - _builder.append(commonParameterConstraints, "\t"); - _builder.newLineIfNotEmpty(); + _builder.append("find interpretation(problem, interpretation);"); + _builder.newLine(); _builder.append("\t"); - CharSequence _referInstanceOf_7 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "source"); - _builder.append(_referInstanceOf_7, "\t"); - _builder.newLineIfNotEmpty(); + _builder.append("find mustExist(problem, interpretation, source);"); + _builder.newLine(); _builder.append("\t"); - CharSequence _referInstanceOf_8 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "target"); - _builder.append(_referInstanceOf_8, "\t"); + CharSequence _referInstanceOf_1 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MAY, "source"); + _builder.append(_referInstanceOf_1, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_9 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "divergent"); - _builder.append(_referInstanceOf_9, "\t"); + CharSequence _referRelation_2 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "target1", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_2, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "target", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation, "\t"); + CharSequence _referRelation_3 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "target2", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_3, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_1 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "divergent", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_1, "\t"); - _builder.newLineIfNotEmpty(); + _builder.append("neg find mustEquivalent(problem, interpretation, target1, target2);"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern multipleMayDivergent(problem: LogicProblem, interpretation: PartialInterpretation,"); + _builder.newLine(); + _builder.append("\t\t\t"); + _builder.append("source: DefinedElement) {"); + _builder.newLine(); _builder.append("\t"); - CharSequence _referRelation_2 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "source", "divergent", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_2, "\t"); - _builder.newLineIfNotEmpty(); - _builder.append("} or {"); + _builder.append("find interpretation(problem, interpretation);"); _builder.newLine(); _builder.append("\t"); - _builder.append("// turnoutConnectedToBothOutputs unit propagation 2"); + _builder.append("find mustExist(problem, interpretation, source);"); _builder.newLine(); _builder.append("\t"); - _builder.append(commonParameterConstraints, "\t"); + CharSequence _referInstanceOf_2 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MAY, "source"); + _builder.append(_referInstanceOf_2, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_10 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "source"); - _builder.append(_referInstanceOf_10, "\t"); + CharSequence _referRelation_4 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "target1", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_4, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_11 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "target"); - _builder.append(_referInstanceOf_11, "\t"); + CharSequence _referRelation_5 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "target2", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_5, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_12 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "straight"); - _builder.append(_referInstanceOf_12, "\t"); + _builder.append("neg find mustEquivalent(problem, interpretation, target1, target2);"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern "); + _builder.append(Modes3UnitPropagationGenerator.MUST_CONNECTED_TO); + _builder.append("("); + _builder.append(parameters); + _builder.append(") {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_3 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "straight", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_3, "\t"); + _builder.append(commonMustParameterConstraints, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_4 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "target", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_4, "\t"); + CharSequence _referInstanceOf_3 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "target"); + _builder.append(_referInstanceOf_3, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_5 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "source", "straight", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_5, "\t"); - _builder.newLineIfNotEmpty(); - _builder.append("} or {"); + _builder.append("find mayInput(problem, interpretaton, source, target);"); _builder.newLine(); _builder.append("\t"); - _builder.append("// tooManyExtraInputsOfTurnout unit propagation"); + _builder.append("neg find multipleMayInput(problem, interpretaton, target);"); _builder.newLine(); _builder.append("\t"); - _builder.append(commonParameterConstraints, "\t"); - _builder.newLineIfNotEmpty(); - _builder.append("\t"); - CharSequence _referInstanceOf_13 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "source"); - _builder.append(_referInstanceOf_13, "\t"); - _builder.newLineIfNotEmpty(); - _builder.append("\t"); - CharSequence _referInstanceOf_14 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "target"); - _builder.append(_referInstanceOf_14, "\t"); + CharSequence _referRelation_6 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "source", "target", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_6, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_15 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "extraInput"); - _builder.append(_referInstanceOf_15, "\t"); + _builder.append("neg "); + CharSequence _referRelation_7 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "source", "target", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_7, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referPattern_2 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(TurnoutOutput.instance().getFullyQualifiedName()), new String[] { "source", "target" }, Modality.MAY, false, false); - _builder.append(_referPattern_2, "\t"); + _builder.append("neg "); + CharSequence _referRelation_8 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "target", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_8, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referPattern_3 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(ExtraInputOfTurnout.instance().getFullyQualifiedName()), new String[] { "source", "extraInput" }, Modality.MUST, true, false); - _builder.append(_referPattern_3, "\t"); + _builder.append("neg "); + CharSequence _referRelation_9 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "target", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_9, "\t"); _builder.newLineIfNotEmpty(); - _builder.append("\t"); - _builder.append("target != extraInput;"); - _builder.newLine(); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append("pattern "); - _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_CONNECTED_TO); + _builder.append(Modes3UnitPropagationGenerator.MUST_STRAIGHT); _builder.append("("); _builder.append(parameters); _builder.append(") {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - _builder.append("find "); - _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_CONNECTED_TO_HELPER, "\t"); - _builder.append("(problem, interpretation, source, target);"); + _builder.append(commonMustParameterConstraints, "\t"); _builder.newLineIfNotEmpty(); - _builder.append("} or {"); - _builder.newLine(); _builder.append("\t"); - _builder.append("find "); - _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_CONNECTED_TO_HELPER, "\t"); - _builder.append("(problem, interpretation, target, source);"); - _builder.newLineIfNotEmpty(); - _builder.append("}"); - _builder.newLine(); - _builder.newLine(); - _builder.append("pattern "); - _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_TURNOUT_OUTPUT); - _builder.append("("); - _builder.append(parameters); - _builder.append(") {"); + _builder.append("neg "); + CharSequence _referRelation_10 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "_", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_10, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - _builder.append("// outputReflexive unit propagation"); + _builder.append("neg find multipleMayStraight(problem, interpretation, source);"); _builder.newLine(); _builder.append("\t"); - _builder.append(commonParameterConstraints, "\t"); - _builder.newLineIfNotEmpty(); - _builder.append("\t"); - CharSequence _referInstanceOf_16 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "source"); - _builder.append(_referInstanceOf_16, "\t"); + CharSequence _referRelation_11 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "target", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_11, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_17 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "target"); - _builder.append(_referInstanceOf_17, "\t"); + _builder.append("neg "); + CharSequence _referRelation_12 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "target", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_12, "\t"); _builder.newLineIfNotEmpty(); - _builder.append("\t"); - _builder.append("source == target;"); - _builder.newLine(); _builder.append("} or {"); _builder.newLine(); _builder.append("\t"); - _builder.append("// tooManyInputsOfSegment unit propagation"); - _builder.newLine(); - _builder.append("\t"); - _builder.append(commonParameterConstraints, "\t"); - _builder.newLineIfNotEmpty(); - _builder.append("\t"); - CharSequence _referInstanceOf_18 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "source"); - _builder.append(_referInstanceOf_18, "\t"); + _builder.append(commonMustParameterConstraints, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_19 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "target"); - _builder.append(_referInstanceOf_19, "\t"); + CharSequence _referInstanceOf_4 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "target"); + _builder.append(_referInstanceOf_4, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_20 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "input1"); - _builder.append(_referInstanceOf_20, "\t"); - _builder.newLineIfNotEmpty(); + _builder.append("find mayInput(problem, interpretaton, source, target);"); + _builder.newLine(); _builder.append("\t"); - CharSequence _referInstanceOf_21 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "input2"); - _builder.append(_referInstanceOf_21, "\t"); - _builder.newLineIfNotEmpty(); + _builder.append("neg find multipleMayInput(problem, interpretaton, target);"); + _builder.newLine(); _builder.append("\t"); _builder.append("neg "); - CharSequence _referInstanceOf_22 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MAY, "target"); - _builder.append(_referInstanceOf_22, "\t"); + CharSequence _referRelation_13 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "source", "target", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_13, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referPattern_4 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Output.instance().getFullyQualifiedName()), new String[] { "input1", "target" }, Modality.MUST, true, false); - _builder.append(_referPattern_4, "\t"); + CharSequence _referRelation_14 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "target", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_14, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referPattern_5 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Output.instance().getFullyQualifiedName()), new String[] { "input2", "target" }, Modality.MUST, true, false); - _builder.append(_referPattern_5, "\t"); + _builder.append("neg "); + CharSequence _referRelation_15 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "target", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_15, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - _builder.append("input1 != input2;"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("input1 != source;"); - _builder.newLine(); - _builder.append("\t"); - _builder.append("input2 != source;"); - _builder.newLine(); + _builder.append("neg "); + CharSequence _referRelation_16 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "target", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_16, "\t"); + _builder.newLineIfNotEmpty(); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append("pattern "); - _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_STRAIGHT); + _builder.append(Modes3UnitPropagationGenerator.MUST_DIVERGENT); _builder.append("("); _builder.append(parameters); _builder.append(") {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - _builder.append("find "); - _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_TURNOUT_OUTPUT, "\t"); - _builder.append("(problem, interpretation, source, target);"); + _builder.append(commonMustParameterConstraints, "\t"); _builder.newLineIfNotEmpty(); - _builder.append("} or {"); - _builder.newLine(); _builder.append("\t"); - _builder.append("// turnoutOutputsAreSame unit propagation"); + _builder.append("neg "); + CharSequence _referRelation_17 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "_", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_17, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("neg find multipleMayDivergent(problem, interpretation, source);"); _builder.newLine(); _builder.append("\t"); - _builder.append(commonParameterConstraints, "\t"); + CharSequence _referRelation_18 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "target", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_18, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_23 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "source"); - _builder.append(_referInstanceOf_23, "\t"); + _builder.append("neg "); + CharSequence _referRelation_19 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "target", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_19, "\t"); _builder.newLineIfNotEmpty(); + _builder.append("} or {"); + _builder.newLine(); _builder.append("\t"); - CharSequence _referInstanceOf_24 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "target"); - _builder.append(_referInstanceOf_24, "\t"); + _builder.append(commonMustParameterConstraints, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_6 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "target", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_6, "\t"); + CharSequence _referInstanceOf_5 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "target"); + _builder.append(_referInstanceOf_5, "\t"); _builder.newLineIfNotEmpty(); - _builder.append("} or {"); + _builder.append("\t"); + _builder.append("find mayInput(problem, interpretaton, source, target);"); _builder.newLine(); _builder.append("\t"); - _builder.append("// turnoutConnectedToBothOutputs unit propagation"); + _builder.append("neg find multipleMayInput(problem, interpretaton, target);"); _builder.newLine(); _builder.append("\t"); - _builder.append(commonParameterConstraints, "\t"); + _builder.append("neg "); + CharSequence _referRelation_20 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "source", "target", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_20, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_25 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "source"); - _builder.append(_referInstanceOf_25, "\t"); + _builder.append("neg "); + CharSequence _referRelation_21 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "target", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_21, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_26 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "target"); - _builder.append(_referInstanceOf_26, "\t"); + CharSequence _referRelation_22 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "target", Modality.MAY, fqnToPQuery); + _builder.append(_referRelation_22, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_27 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "divergent"); - _builder.append(_referInstanceOf_27, "\t"); + _builder.append("neg "); + CharSequence _referRelation_23 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "target", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_23, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern turnoutOutput_must_to_true_by_straight("); + _builder.append(parameters); + _builder.append(", T : DefinedElement, S : DefinedElement) {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_7 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "source", "target", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_7, "\t"); + _builder.append(commonMayParameterConstraints, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_8 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "divergent", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_8, "\t"); + CharSequence _referInstanceOf_6 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MAY, "source"); + _builder.append(_referInstanceOf_6, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_9 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "source", "divergent", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_9, "\t"); + CharSequence _referInstanceOf_7 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "target"); + _builder.append(_referInstanceOf_7, "\t"); _builder.newLineIfNotEmpty(); - _builder.append("} or {"); - _builder.newLine(); _builder.append("\t"); - _builder.append("// tooManyExtraInputsOfTurnout unit propagation"); + _builder.append("T == source;"); _builder.newLine(); _builder.append("\t"); - _builder.append(commonParameterConstraints, "\t"); + _builder.append("S == target;"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern turnoutOutput_must_to_true_by_divergent("); + _builder.append(parameters); + _builder.append(", T : DefinedElement, S : DefinedElement) {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_28 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "source"); - _builder.append(_referInstanceOf_28, "\t"); + _builder.append(commonMayParameterConstraints, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_29 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "target"); - _builder.append(_referInstanceOf_29, "\t"); + CharSequence _referInstanceOf_8 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MAY, "source"); + _builder.append(_referInstanceOf_8, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_30 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "extraInput"); - _builder.append(_referInstanceOf_30, "\t"); + CharSequence _referInstanceOf_9 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "target"); + _builder.append(_referInstanceOf_9, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_31 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "potentialExtraInput"); - _builder.append(_referInstanceOf_31, "\t"); - _builder.newLineIfNotEmpty(); + _builder.append("T == source;"); + _builder.newLine(); _builder.append("\t"); - CharSequence _referPattern_6 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(ExtraInputOfTurnout.instance().getFullyQualifiedName()), new String[] { "source", "extraInput" }, Modality.MUST, true, false); - _builder.append(_referPattern_6, "\t"); + _builder.append("S == target;"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern output_must_to_true_by_connectedTo("); + _builder.append(parameters); + _builder.append(", S1 : DefinedElement, S2 : DefinedElement) {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_10 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "source", "potentialExtraInput", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_10, "\t"); + _builder.append(commonMayParameterConstraints, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - _builder.append("neg "); - CharSequence _referRelation_11 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "source", "potentialExtraInput", Modality.MAY, fqnToPQuery); - _builder.append(_referRelation_11, "\t"); + CharSequence _referInstanceOf_10 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "source"); + _builder.append(_referInstanceOf_10, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - _builder.append("extraInput != potentialExtraInput;"); - _builder.newLine(); + CharSequence _referInstanceOf_11 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "target"); + _builder.append(_referInstanceOf_11, "\t"); + _builder.newLineIfNotEmpty(); _builder.append("\t"); - _builder.append("extraInput != target;"); + _builder.append("S1 == source;"); _builder.newLine(); _builder.append("\t"); - _builder.append("potentialExtraInput != target;"); + _builder.append("S2 == target;"); _builder.newLine(); _builder.append("}"); _builder.newLine(); _builder.newLine(); - _builder.append("pattern "); - _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_DIVERGENT); - _builder.append("("); + _builder.append("pattern output_must_to_true_by_straight("); _builder.append(parameters); - _builder.append(") {"); + _builder.append(", S1 : DefinedElement, S2 : DefinedElement) {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - _builder.append("find "); - _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_TURNOUT_OUTPUT, "\t"); - _builder.append("(problem, interpretation, source, target);"); - _builder.newLineIfNotEmpty(); - _builder.append("} or {"); + _builder.append("find turnoutOutput_must_to_true_by_straight(problem, interpretation, source, target, S1, S2);"); _builder.newLine(); - _builder.append("\t"); - _builder.append("// turnoutOutputsAreSame unit propagation"); + _builder.append("}"); _builder.newLine(); - _builder.append("\t"); - _builder.append(commonParameterConstraints, "\t"); + _builder.newLine(); + _builder.append("pattern output_must_to_true_by_divergent("); + _builder.append(parameters); + _builder.append(", S1 : DefinedElement, S2 : DefinedElement) {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_32 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "source"); - _builder.append(_referInstanceOf_32, "\t"); + _builder.append("find turnoutOutput_must_to_true_by_divergent(problem, interpretation, source, target, S1, S2);"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern adjacent_must_to_true_by_connectedTo("); + _builder.append(parameters); + _builder.append(", S1 : DefinedElement, S2 : DefinedElement) {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_33 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "target"); - _builder.append(_referInstanceOf_33, "\t"); + _builder.append("find output_must_to_true_by_connectedTo(problem, interpretation, source, target, S1, S2);"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern adjacent_must_to_true_by_straight("); + _builder.append(parameters); + _builder.append(", S1 : DefinedElement, S2 : DefinedElement) {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_12 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "target", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_12, "\t"); + _builder.append("find output_must_to_true_by_straight(problem, interpretation, source, target, S1, S2);"); + _builder.newLine(); + _builder.append("} or {"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find turnoutOutput_must_to_true_by_straight(problem, interpretation, source, target, S2, S1);"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern adjacent_must_to_true_by_divergent("); + _builder.append(parameters); + _builder.append(", S1 : DefinedElement, S2 : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find output_must_to_true_by_divergent(problem, interpretation, source, target, S1, S2);"); + _builder.newLine(); + _builder.append("} or {"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find turnoutOutput_must_to_true_by_divergent(problem, interpretation, source, target, S2, S1);"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern connectedToReflexive_must_to_true_by_connectedTo("); + _builder.append(parameters); + _builder.append(", S : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, source);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referInstanceOf_12 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "source"); + _builder.append(_referInstanceOf_12, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("S == source;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("S == target;"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern outputReflexive_must_to_true_by_straight("); + _builder.append(parameters); + _builder.append(", T : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find turnoutOutput_must_to_true_by_straight(problem, interpretation, source, target, T, T);"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern outputReflexive_must_to_true_by_divergent("); + _builder.append(parameters); + _builder.append(", T : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find turnoutOutput_must_to_true_by_divergent(problem, interpretation, source, target, T, T);"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern turnoutOutputsAreSame_must_to_true_by_straight("); + _builder.append(parameters); + _builder.append(", T : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append(commonMayParameterConstraints, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_13 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MAY, "source"); + _builder.append(_referInstanceOf_13, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_14 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "target"); + _builder.append(_referInstanceOf_14, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("T == source;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("S == target;"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referRelation_24 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "T", "S", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_24, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern turnoutOutputsAreSame_must_to_true_by_divergent("); + _builder.append(parameters); + _builder.append(", T : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append(commonMayParameterConstraints, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_15 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MAY, "source"); + _builder.append(_referInstanceOf_15, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_16 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "target"); + _builder.append(_referInstanceOf_16, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("T == source;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("S == target;"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referRelation_25 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "T", "S", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_25, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern tooManyInputsOfSegment_must_to_true_by_connectedTo("); + _builder.append(parameters); + _builder.append(", S : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, S);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referInstanceOf_17 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.simpleSegmentType, Modality.MUST, "S"); + _builder.append(_referInstanceOf_17, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find output_must_to_true_by_connectedTo(problem, interpretation, source, target, I1, S);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referPattern_1 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Output.instance().getFullyQualifiedName()), new String[] { "I2", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_1, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referPattern_2 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Output.instance().getFullyQualifiedName()), new String[] { "I3", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_2, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("I1 != I2;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I1 != I3;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I2 != I3;"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern tooManyInputsOfSegment_must_to_true_by_straight("); + _builder.append(parameters); + _builder.append(", S : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, S);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referInstanceOf_18 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.simpleSegmentType, Modality.MUST, "S"); + _builder.append(_referInstanceOf_18, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find output_must_to_true_by_straight(problem, interpretation, source, target, I1, S);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referPattern_3 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Output.instance().getFullyQualifiedName()), new String[] { "I2", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_3, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referPattern_4 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Output.instance().getFullyQualifiedName()), new String[] { "I3", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_4, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("I1 != I2;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I1 != I3;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I2 != I3;"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern tooManyInputsOfSegment_must_to_true_by_divergent("); + _builder.append(parameters); + _builder.append(", S : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, S);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referInstanceOf_19 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.simpleSegmentType, Modality.MUST, "S"); + _builder.append(_referInstanceOf_19, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find output_must_to_true_by_divergent(problem, interpretation, source, target, I1, S);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referPattern_5 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Output.instance().getFullyQualifiedName()), new String[] { "I2", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_5, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referPattern_6 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Output.instance().getFullyQualifiedName()), new String[] { "I3", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_6, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("I1 != I2;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I1 != I3;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I2 != I3;"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern turnoutConnectedToBothOutputs_must_to_true_by_connectedTo("); + _builder.append(parameters); + _builder.append(", T : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append(commonMayParameterConstraints, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, Straight);"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, Divergent);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referInstanceOf_20 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MAY, "source"); + _builder.append(_referInstanceOf_20, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_21 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "target"); + _builder.append(_referInstanceOf_21, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_22 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "Straight"); + _builder.append(_referInstanceOf_22, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_23 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "Divergent"); + _builder.append(_referInstanceOf_23, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referRelation_26 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "T", "Straight", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_26, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referRelation_27 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "T", "Divergent", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_27, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("T == source;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("Straight == target;"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referRelation_28 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "T", "Divergent", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_28, "\t"); _builder.newLineIfNotEmpty(); _builder.append("} or {"); _builder.newLine(); _builder.append("\t"); - _builder.append("// turnoutConnectedToBothOutputs unit propagation"); + _builder.append(commonMayParameterConstraints, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, Straight);"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, Divergent);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referInstanceOf_24 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MAY, "source"); + _builder.append(_referInstanceOf_24, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_25 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "target"); + _builder.append(_referInstanceOf_25, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_26 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "Straight"); + _builder.append(_referInstanceOf_26, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_27 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "Divergent"); + _builder.append(_referInstanceOf_27, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referRelation_29 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "T", "Straight", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_29, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referRelation_30 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "T", "Divergent", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_30, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referRelation_31 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "T", "Straight", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_31, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("T == source;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("Straight == target;"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern turnoutConnectedToBothOutputs_must_to_true_by_straight("); + _builder.append(parameters); + _builder.append(", T : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append(commonMayParameterConstraints, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, Straight);"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, Divergent);"); _builder.newLine(); _builder.append("\t"); - _builder.append(commonParameterConstraints, "\t"); + CharSequence _referInstanceOf_28 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MAY, "source"); + _builder.append(_referInstanceOf_28, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_29 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "target"); + _builder.append(_referInstanceOf_29, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_30 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "Straight"); + _builder.append(_referInstanceOf_30, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_34 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "source"); + CharSequence _referInstanceOf_31 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "Divergent"); + _builder.append(_referInstanceOf_31, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("T == source;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("Straight == target;"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referRelation_32 = generator.referRelation(Modes3UnitPropagationGenerator.this.divergentRelation, "T", "Divergent", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_32, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referRelation_33 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "T", "Straight", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_33, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referRelation_34 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "T", "Divergent", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_34, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern turnoutConnectedToBothOutputs_must_to_true_by_divergent("); + _builder.append(parameters); + _builder.append(", T : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append(commonMayParameterConstraints, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, Straight);"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, Divergent);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referInstanceOf_32 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MAY, "source"); + _builder.append(_referInstanceOf_32, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_33 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MAY, "target"); + _builder.append(_referInstanceOf_33, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referInstanceOf_34 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "Straight"); _builder.append(_referInstanceOf_34, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_35 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "target"); + CharSequence _referInstanceOf_35 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "Divergent"); _builder.append(_referInstanceOf_35, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_36 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "straight"); + CharSequence _referRelation_35 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "T", "Straight", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_35, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("T == source;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("Divergent == target;"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referRelation_36 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "T", "Straight", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_36, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referRelation_37 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "T", "Divergent", Modality.MUST, fqnToPQuery); + _builder.append(_referRelation_37, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern tooManyInputsOfTurnout_must_to_true_by_connectedTo("); + _builder.append(parameters); + _builder.append(", T : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, S);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referInstanceOf_36 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "S"); _builder.append(_referInstanceOf_36, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_13 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "source", "target", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_13, "\t"); + _builder.append("find adjacent_must_to_true_by_connectedTo(problem, interpretation, source, target, I1, S);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referPattern_7 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Adjacent.instance().getFullyQualifiedName()), new String[] { "I2", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_7, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_14 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "straight", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_14, "\t"); + CharSequence _referPattern_8 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Adjacent.instance().getFullyQualifiedName()), new String[] { "I3", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_8, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_15 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "source", "straight", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_15, "\t"); + CharSequence _referPattern_9 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Adjacent.instance().getFullyQualifiedName()), new String[] { "I4", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_9, "\t"); _builder.newLineIfNotEmpty(); - _builder.append("} or {"); + _builder.append("\t"); + _builder.append("I1 != I2;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I1 != I3;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I1 != I4;"); _builder.newLine(); _builder.append("\t"); - _builder.append("// tooManyExtraInputsOfTurnout unit propagation"); + _builder.append("I2 != I3;"); _builder.newLine(); _builder.append("\t"); - _builder.append(commonParameterConstraints, "\t"); + _builder.append("I2 != I4;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I3 != I4;"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern tooManyInputsOfTurnout_must_to_true_by_straight("); + _builder.append(parameters); + _builder.append(", T : DefinedElement) {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_37 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "source"); + _builder.append("find mustExist(problem, interpretation, S);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referInstanceOf_37 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "S"); _builder.append(_referInstanceOf_37, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_38 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "target"); + _builder.append("find adjacent_must_to_true_by_straight(problem, interpretation, source, target, I1, S);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referPattern_10 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Adjacent.instance().getFullyQualifiedName()), new String[] { "I2", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_10, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referPattern_11 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Adjacent.instance().getFullyQualifiedName()), new String[] { "I3", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_11, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + CharSequence _referPattern_12 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Adjacent.instance().getFullyQualifiedName()), new String[] { "I4", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_12, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("I1 != I2;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I1 != I3;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I1 != I4;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I2 != I3;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I2 != I4;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I3 != I4;"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern tooManyInputsOfTurnout_must_to_true_by_divergent("); + _builder.append(parameters); + _builder.append(", T : DefinedElement) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find mustExist(problem, interpretation, S);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referInstanceOf_38 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.turnoutType, Modality.MUST, "S"); _builder.append(_referInstanceOf_38, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_39 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "extraInput"); - _builder.append(_referInstanceOf_39, "\t"); + _builder.append("find adjacent_must_to_true_by_divergent(problem, interpretation, source, target, I1, S);"); + _builder.newLine(); + _builder.append("\t"); + CharSequence _referPattern_13 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Adjacent.instance().getFullyQualifiedName()), new String[] { "I2", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_13, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referInstanceOf_40 = generator.getTypeIndexer().referInstanceOf(Modes3UnitPropagationGenerator.this.segmentType, Modality.MUST, "potentialExtraInput"); - _builder.append(_referInstanceOf_40, "\t"); + CharSequence _referPattern_14 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Adjacent.instance().getFullyQualifiedName()), new String[] { "I3", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_14, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referPattern_7 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(ExtraInputOfTurnout.instance().getFullyQualifiedName()), new String[] { "source", "extraInput" }, Modality.MUST, true, false); - _builder.append(_referPattern_7, "\t"); + CharSequence _referPattern_15 = generator.getRelationDefinitionIndexer().referPattern(fqnToPQuery.get(Adjacent.instance().getFullyQualifiedName()), new String[] { "I4", "S" }, Modality.MUST, true, false); + _builder.append(_referPattern_15, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - CharSequence _referRelation_16 = generator.referRelation(Modes3UnitPropagationGenerator.this.connectedToRelation, "source", "potentialExtraInput", Modality.MUST, fqnToPQuery); - _builder.append(_referRelation_16, "\t"); + _builder.append("I1 != I2;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I1 != I3;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I1 != I4;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I2 != I3;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I2 != I4;"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("I3 != I4;"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern "); + _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_CONNECTED_TO); + _builder.append("_helper("); + _builder.append(parameters); + _builder.append(") {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - _builder.append("neg "); - CharSequence _referRelation_17 = generator.referRelation(Modes3UnitPropagationGenerator.this.straightRelation, "source", "potentialExtraInput", Modality.MAY, fqnToPQuery); - _builder.append(_referRelation_17, "\t"); + _builder.append("find connectedToReflexive_must_to_true_by_connectedTo(problem, interpretation, source, target, _);"); + _builder.newLine(); + _builder.append("} or {"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find tooManyInputsOfSegment_must_to_true_by_connectedTo(problem, interpretation, source, target, _);"); + _builder.newLine(); + _builder.append("} or {"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find turnoutConnectedToBothOutputs_must_to_true_by_connectedTo(problem, interpretation, source, target, _);"); + _builder.newLine(); + _builder.append("} or {"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find tooManyInputsOfTurnout_must_to_true_by_connectedTo(problem, interpretation, source, target, _);"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern "); + _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_CONNECTED_TO); + _builder.append("("); + _builder.append(parameters); + _builder.append(") {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find "); + _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_CONNECTED_TO, "\t"); + _builder.append("_helper(problem, interpretation, source, target);"); + _builder.newLineIfNotEmpty(); + _builder.append("} or {"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find "); + _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_CONNECTED_TO, "\t"); + _builder.append("_helper(problem, interpretation, target, source);"); + _builder.newLineIfNotEmpty(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern "); + _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_STRAIGHT); + _builder.append("("); + _builder.append(parameters); + _builder.append(") {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); - _builder.append("extraInput != potentialExtraInput;"); + _builder.append("find outputReflexive_must_to_true_by_straight(problem, interpretation, source, target, _);"); + _builder.newLine(); + _builder.append("} or {"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find turnoutOutputsAreSame_must_to_true_by_straight(problem, interpretation, source, target, _);"); + _builder.newLine(); + _builder.append("} or {"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find tooManyInputsOfSegment_must_to_true_by_straight(problem, interpretation, source, target, _);"); + _builder.newLine(); + _builder.append("} or {"); _builder.newLine(); _builder.append("\t"); - _builder.append("extraInput != target;"); + _builder.append("find turnoutConnectedToBothOutputs_must_to_true_by_straight(problem, interpretation, source, target, _);"); + _builder.newLine(); + _builder.append("} or {"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find tooManyInputsOfTurnout_must_to_true_by_straight(problem, interpretation, source, target, _);"); + _builder.newLine(); + _builder.append("}"); + _builder.newLine(); + _builder.newLine(); + _builder.append("pattern "); + _builder.append(Modes3UnitPropagationGenerator.MUST_NOT_DIVERGENT); + _builder.append("("); + _builder.append(parameters); + _builder.append(") {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("find outputReflexive_must_to_true_by_divergent(problem, interpretation, source, target, _);"); + _builder.newLine(); + _builder.append("} or {"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find turnoutOutputsAreSame_must_to_true_by_divergent(problem, interpretation, source, target, _);"); + _builder.newLine(); + _builder.append("} or {"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find tooManyInputsOfSegment_must_to_true_by_divergent(problem, interpretation, source, target, _);"); + _builder.newLine(); + _builder.append("} or {"); + _builder.newLine(); + _builder.append("\t"); + _builder.append("find turnoutConnectedToBothOutputs_must_to_true_by_divergent(problem, interpretation, source, target, _);"); + _builder.newLine(); + _builder.append("} or {"); _builder.newLine(); _builder.append("\t"); - _builder.append("potentialExtraInput != target;"); + _builder.append("find tooManyInputsOfTurnout_must_to_true_by_divergent(problem, interpretation, source, target, _);"); _builder.newLine(); _builder.append("}"); _builder.newLine(); } }; - _xblockexpression = _client_2; + _xblockexpression = _client_3; } return _xblockexpression; } -- cgit v1.2.3-70-g09d2