From 525d01ba80a02289d4ba6d3ab52ff19ae4bf5f29 Mon Sep 17 00:00:00 2001 From: Ferhat Erata Date: Wed, 26 Sep 2018 19:28:13 +0300 Subject: [PATCH] new kodkodz engine is integrated --- .../.gitignore | 4 +- .../.idea/workspace.xml | 1658 ---- Source/kodkod/SMT/inttest.smt | 2309 +++++ Source/kodkod/SMT/requirementsmodel.smt | 8748 +++++++++++++++++ .../kodkod/examples/ExampleMetadata.java | 57 + .../examples/kodkod/examples/TestScript.java | 161 + .../examples/TestScriptUsingBinary.java | 207 + .../alloy/AbstractWorldDefinitions.java | 20 + .../kodkod/examples/alloy/Bigconfig.java | 20 + .../examples/alloy/CeilingsAndFloors.java | 20 + .../kodkod/examples/alloy/DNACuts.java | 20 + .../kodkod/examples/alloy/DiffEg.java | 20 + .../kodkod/examples/alloy/Dijkstra.java | 22 +- .../kodkod/examples/alloy/FileSystem.java | 22 +- .../examples/alloy/GroupScheduling.java | 20 + .../kodkod/examples/alloy/Handshake.java | 20 + .../examples/kodkod/examples/alloy/Hotel.java | 20 + .../examples/kodkod/examples/alloy/Lists.java | 20 + .../kodkod/examples/alloy/Netconfig.java | 20 + .../kodkod/examples/alloy/Pigeonhole.java | 20 + .../kodkod/examples/alloy/RingElection.java | 20 + .../kodkod/examples/alloy/Toughnut.java | 20 + .../kodkod/examples/alloy/ToyFilesystem.java | 20 + .../kodkod/examples/alloy/ToyLists.java | 20 + .../examples/kodkod/examples/alloy/Trees.java | 20 + .../kodkod/examples/alloy/Viktor.java | 4 +- .../kodkod/examples/alloyinecore/IntTest.java | 102 + .../alloyinecore/RequirementsModel.java | 236 + .../alloyinecore/SimplifiedTheoryOfList.java | 20 + .../examples/alloyinecore/TestModel.java | 135 + .../examples/alloyinecore/TheoryOfList.java | 20 + .../kodkod/examples/csp/BlockedNQueens.java | 20 + .../kodkod/examples/csp/BlockedNQueens2.java | 20 + .../kodkod/examples/csp/GraphColoring.java | 20 + .../kodkod/examples/csp/HamiltonianCycle.java | 20 + .../kodkod/examples/csp/LatinSquare.java | 20 + .../kodkod/examples/csp/MagicSeries.java | 20 + .../examples/kodkod/examples/csp/NQueens.java | 60 +- .../kodkod/examples/csp/SocialGolfer.java | 20 + .../algorithm/discovery/INSLabelCheck.java | 941 ++ .../algorithm/discovery/INSLabelRun.java | 810 ++ .../election/ringleadLeaderHighestCheck.java | 1536 +++ .../election/ringleadLivenessCheck.java | 1179 +++ .../election/ringleadNeverFindLeaderRun.java | 1179 +++ .../election/ringleadOneLeaderCheck.java | 1179 +++ .../election/ringleadSomeLeaderRun.java | 1529 +++ .../stable_ringleadCBadLivenessTraceRun.java | 927 ++ .../stable_ringleadCMustConvergeCheck.java | 841 ++ .../stable_ringleadCTraceWithoutLoopRun.java | 1052 ++ .../election/stable_ringleadCoveringRun.java | 1055 ++ .../stable_ringleadDBadLivenessTraceRun.java | 1052 ++ .../stable_ringleadDTraceWithoutLoopRun.java | 1053 ++ .../gc/marksweepgcCompletenessCheck.java | 423 + .../gc/marksweepgcSoundness1Check.java | 428 + .../gc/marksweepgcSoundness2Check.java | 423 + .../iolusOutsiderCantReadCheck.java | 1972 ++++ .../mutex/dijkstra2ProcessDeadlockRun.java | 335 + ...ProcessDijkstraPreventsDeadlocksCheck.java | 695 ++ .../dijkstra2ProcessShowDijkstraRun.java | 510 + .../mutex/dijkstraKStateClosureCheck.java | 773 ++ ...kstraKStateTraceShorterThanMaxLoopRun.java | 532 + .../mutex/dijkstraKStateTwoPrivilegedRun.java | 619 ++ .../mutex/petersonNotStuckCheck.java | 1217 +++ .../algorithm/mutex/petersonSafetyCheck.java | 1046 ++ .../algorithm/mutex/petersonTwoRun.java | 1521 +++ .../stableOrientRingClosureCheck.java | 671 ++ .../stableOrientRingSomeStateRun.java | 640 ++ .../opt_spanTreeBadLivenessTraceRun.java | 986 ++ .../opt_spanTreeClosureCheck.java | 977 ++ .../opt_spanTreeSuccessfulRun.java | 719 ++ .../synchronsation/syncSpecNotUniqueRun.java | 979 ++ .../syncimplCorrectnessCheck.java | 1222 +++ .../logic/syllogism/syllogismCheck1.java | 162 + .../logic/syllogism/syllogismCheck2.java | 161 + .../model/fileSystem/file_systemCheck1.java | 420 + .../model/fileSystem/file_systemCheck2.java | 422 + .../models/model/java/javatypesRun.java | 304 + .../model/microsoftCom/comTheorem1Check.java | 584 ++ .../model/microsoftCom/comTheorem2Check.java | 587 ++ .../model/microsoftCom/comTheorem3Check.java | 583 ++ .../model/microsoftCom/comTheorem4aCheck.java | 589 ++ .../model/microsoftCom/comTheorem4bCheck.java | 588 ++ .../transport/railwayPolicyWorksCheck.java | 409 + .../transport/railwayTrainsMoveLegalRun.java | 394 + ...aragraphNumberingAddNeverReducesCheck.java | 831 ++ ...paragraphNumberingPreserveForestCheck.java | 640 ++ .../farmerNoQuantumObjectCheck.java | 477 + .../farmerSolvePuzzleRun.java | 469 + .../halmosHandshake/handshakeP10Run.java | 493 + .../halmosHandshake/handshakeP12Run.java | 583 ++ .../halmosHandshake/handshakeP14Run.java | 689 ++ .../halmosHandshake/handshakeP16Run.java | 881 ++ .../prisonerCountInvariantCheck.java | 1311 +++ .../puzzle/prisonerRoomVisit/prisonerRun.java | 1460 +++ .../prisonerSafetyCheck.java | 1310 +++ .../prisonerTheoremCheck.java | 1491 +++ .../prisonerTypeOKCheck.java | 1468 +++ .../simple/book/birthdayAddWorksCheck.java | 247 + .../simple/book/birthdayBusyDayRun.java | 223 + .../simple/book/birthdayDellsUndoCheck.java | 251 + .../simple/games/lifeInterestingRun.java | 469 + .../models/simple/games/lifeShowRun.java | 702 ++ .../models/simple/games/lifeSquareRun.java | 474 + .../simple/genealogy/genealogyShowRun.java | 330 + .../genealogy/grandpaOwnGrandpaRun.java | 313 + .../simple/lists/listsEmptiesCheck.java | 463 + .../simple/lists/listsReflexiveCheck.java | 461 + .../models/simple/lists/listsShowRun.java | 378 + .../simple/lists/listsSymmetricCheck.java | 467 + .../simple/stateMachine/flipflopShowRun.java | 515 + .../reset_flip_flop_with_enableShowRun.java | 549 ++ .../appendixE/p306HotelNotIntruderCheck.java | 1546 +++ .../addressBook3dAddIdempotentCheck.java | 401 + .../chapter2/addressBook3dAddLocalCheck.java | 374 + .../addressBook3dDellUndoesAddCheck.java | 403 + .../addressBook3dLookupYields2Check.java | 630 ++ .../addressBook3dLookupYieldsCheck.java | 388 + .../chapter4/filesystemFileInDirCheck.java | 191 + .../chapter4/filesystemRootTopCheck.java | 192 + .../chapter4/filesystemSomeDirCheck.java | 192 + .../chapter4/grandpa3NoSelfFatherCheck.java | 266 + .../chapter4/grandpa3OwnGrandpaRun.java | 301 + .../chapter4/grandpa3SameCheck.java | 300 + .../chapter4/lightsSafeCheck.java | 317 + .../chapter5/addressBookAddLocalCheck.java | 233 + .../chapter5/addressBookAddRun.java | 215 + .../chapter5/sets2ClosedCheck.java | 274 + .../chapter6/hotel4NoBadEntryCheck.java | 1578 +++ .../chapter6/mediaAssetsCutPasteCheck.java | 536 + .../chapter6/mediaAssetsNoBadEntryCheck.java | 439 + .../chapter6/mediaAssetsPasteCutCheck.java | 535 + .../mediaAssetsPasteNotAffectHiddenCheck.java | 469 + .../abstractMemoryWriteIdempotentCheck.java | 253 + .../memory/abstractMemoryWriteReadCheck.java | 254 + .../cacheMemoryLoadNotObservableCheck.java | 333 + .../ringElection2AtLeastOneElectedCheck.java | 537 + .../ringElection2AtMostOneElectedCheck.java | 516 + .../ringElection2LooplessPathRun.java | 698 ++ .../chapter6/ringElection2ShowRun.java | 437 + .../messaging/messagingOutOfOrderRun.java | 1044 ++ .../util/messaging/messagingSomeStateRun.java | 562 ++ .../models/util/trace/traceTotalCheck.java | 229 + .../util/types/orderingCorrectCheck0.java | 339 + .../util/types/orderingCorrectCheck1.java | 344 + .../util/types/orderingCorrectCheck2.java | 350 + .../util/types/orderingCorrectCheck3.java | 358 + .../util/types/orderingCorrectCheck4.java | 368 + .../util/types/orderingCorrectCheck5.java | 380 + .../models/util/types/orderingRun1.java | 164 + .../models/util/types/orderingRun2.java | 170 + .../models/util/types/orderingRun3.java | 176 + .../models/util/types/orderingRun4.java | 184 + .../models/util/types/orderingRun5.java | 194 + .../examples/kodkod/examples/tptp/ALG195.java | 20 + .../kodkod/examples/tptp/ALG195_1.java | 20 + .../examples/kodkod/examples/tptp/ALG212.java | 20 + .../examples/kodkod/examples/tptp/COM008.java | 20 + .../examples/kodkod/examples/tptp/GEO091.java | 20 + .../examples/kodkod/examples/tptp/GEO092.java | 20 + .../examples/kodkod/examples/tptp/GEO158.java | 22 +- .../examples/kodkod/examples/tptp/GEO159.java | 20 + .../kodkod/examples/tptp/GRA013_026.java | 20 + .../examples/kodkod/examples/tptp/LAT258.java | 20 + .../examples/kodkod/examples/tptp/MED007.java | 20 + .../examples/kodkod/examples/tptp/MED009.java | 20 + .../examples/kodkod/examples/tptp/MGT066.java | 20 + .../examples/kodkod/examples/tptp/NUM374.java | 20 + .../examples/kodkod/examples/tptp/NUM378.java | 21 + .../examples/kodkod/examples/tptp/SET943.java | 20 + .../examples/kodkod/examples/tptp/SET948.java | 20 + .../examples/kodkod/examples/tptp/SET967.java | 20 + .../examples/kodkod/examples/tptp/TOP020.java | 20 + Source/kodkod/kodkod.iml | 10 + Source/kodkod/src/kodkod/engine/Solver.java | 70 +- .../fol2sat/HigherOrderDeclException.java | 2 +- .../engine/satlab/AssertionChecker.java | 507 + .../src/kodkod/engine/satlab/SATFactory.java | 12 +- .../src/kodkod/engine/satlab/Z3CNFSolver.java | 121 - .../src/kodkod/engine/satlab/Z3Solver.java | 745 +- .../kodkod/util/z3/ClosureCountFinder.java | 40 + .../kodkod/util/z3/QuantifierEliminator.java | 39 + .../src/kodkod/util/z3/UpperBoundFinder.java | 377 + .../src/kodkod/util/z3/VariableDetector.java | 29 + .../util/z3/Z3EliminatedFormulaConverter.java | 1457 +++ .../kodkod/util/z3/Z3FormulaConverter.java | 675 ++ .../util/z3/Z3FormulaConverterWithBV.java | 721 ++ .../util/z3/Z3FormulaConverterWithInt.java | 722 ++ Source/kodkod/test_script.out | 766 ++ 188 files changed, 90387 insertions(+), 2353 deletions(-) delete mode 100644 Source/eu.modelwriter.core.alloyinecore/.idea/workspace.xml create mode 100644 Source/kodkod/SMT/inttest.smt create mode 100644 Source/kodkod/SMT/requirementsmodel.smt create mode 100644 Source/kodkod/examples/kodkod/examples/ExampleMetadata.java create mode 100644 Source/kodkod/examples/kodkod/examples/TestScript.java create mode 100644 Source/kodkod/examples/kodkod/examples/TestScriptUsingBinary.java create mode 100644 Source/kodkod/examples/kodkod/examples/alloyinecore/IntTest.java create mode 100644 Source/kodkod/examples/kodkod/examples/alloyinecore/RequirementsModel.java create mode 100644 Source/kodkod/examples/kodkod/examples/alloyinecore/TestModel.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/discovery/INSLabelCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/discovery/INSLabelRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadLeaderHighestCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadLivenessCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadNeverFindLeaderRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadOneLeaderCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadSomeLeaderRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCBadLivenessTraceRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCMustConvergeCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCTraceWithoutLoopRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCoveringRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadDBadLivenessTraceRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadDTraceWithoutLoopRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/gc/marksweepgcCompletenessCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/gc/marksweepgcSoundness1Check.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/gc/marksweepgcSoundness2Check.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/multicasting/iolusOutsiderCantReadCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstra2ProcessDeadlockRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstra2ProcessDijkstraPreventsDeadlocksCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstra2ProcessShowDijkstraRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstraKStateClosureCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstraKStateTraceShorterThanMaxLoopRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstraKStateTwoPrivilegedRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/petersonNotStuckCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/petersonSafetyCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/petersonTwoRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/ringOrientation/stableOrientRingClosureCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/ringOrientation/stableOrientRingSomeStateRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/spanningTree/opt_spanTreeBadLivenessTraceRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/spanningTree/opt_spanTreeClosureCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/spanningTree/opt_spanTreeSuccessfulRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/synchronsation/syncSpecNotUniqueRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/algorithm/synchronsation/syncimplCorrectnessCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/logic/syllogism/syllogismCheck1.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/logic/syllogism/syllogismCheck2.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/model/fileSystem/file_systemCheck1.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/model/fileSystem/file_systemCheck2.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/model/java/javatypesRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem1Check.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem2Check.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem3Check.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem4aCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem4bCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/model/transport/railwayPolicyWorksCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/model/transport/railwayTrainsMoveLegalRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/model/typography/paragraphNumberingAddNeverReducesCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/model/typography/paragraphNumberingPreserveForestCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/puzzle/farmerChickenFox/farmerNoQuantumObjectCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/puzzle/farmerChickenFox/farmerSolvePuzzleRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP10Run.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP12Run.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP14Run.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP16Run.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerCountInvariantCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerSafetyCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerTheoremCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerTypeOKCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/book/birthdayAddWorksCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/book/birthdayBusyDayRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/book/birthdayDellsUndoCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/games/lifeInterestingRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/games/lifeShowRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/games/lifeSquareRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/genealogy/genealogyShowRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/genealogy/grandpaOwnGrandpaRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/lists/listsEmptiesCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/lists/listsReflexiveCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/lists/listsShowRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/lists/listsSymmetricCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/stateMachine/flipflopShowRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/simple/stateMachine/reset_flip_flop_with_enableShowRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/appendixE/p306HotelNotIntruderCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dAddIdempotentCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dAddLocalCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dDellUndoesAddCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dLookupYields2Check.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dLookupYieldsCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/filesystemFileInDirCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/filesystemRootTopCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/filesystemSomeDirCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/grandpa3NoSelfFatherCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/grandpa3OwnGrandpaRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/grandpa3SameCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/lightsSafeCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter5/addressBookAddLocalCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter5/addressBookAddRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter5/sets2ClosedCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/hotel4NoBadEntryCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsCutPasteCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsNoBadEntryCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsPasteCutCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsPasteNotAffectHiddenCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/memory/abstractMemoryWriteIdempotentCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/memory/abstractMemoryWriteReadCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/memory/cacheMemoryLoadNotObservableCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2AtLeastOneElectedCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2AtMostOneElectedCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2LooplessPathRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2ShowRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/messaging/messagingOutOfOrderRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/messaging/messagingSomeStateRun.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/trace/traceTotalCheck.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck0.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck1.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck2.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck3.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck4.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck5.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun1.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun2.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun3.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun4.java create mode 100644 Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun5.java create mode 100644 Source/kodkod/src/kodkod/engine/satlab/AssertionChecker.java delete mode 100644 Source/kodkod/src/kodkod/engine/satlab/Z3CNFSolver.java create mode 100644 Source/kodkod/src/kodkod/util/z3/ClosureCountFinder.java create mode 100644 Source/kodkod/src/kodkod/util/z3/QuantifierEliminator.java create mode 100644 Source/kodkod/src/kodkod/util/z3/UpperBoundFinder.java create mode 100644 Source/kodkod/src/kodkod/util/z3/VariableDetector.java create mode 100644 Source/kodkod/src/kodkod/util/z3/Z3EliminatedFormulaConverter.java create mode 100644 Source/kodkod/src/kodkod/util/z3/Z3FormulaConverter.java create mode 100644 Source/kodkod/src/kodkod/util/z3/Z3FormulaConverterWithBV.java create mode 100644 Source/kodkod/src/kodkod/util/z3/Z3FormulaConverterWithInt.java create mode 100644 Source/kodkod/test_script.out diff --git a/Source/eu.modelwriter.core.alloyinecore/.gitignore b/Source/eu.modelwriter.core.alloyinecore/.gitignore index bbf9dfc..e096b47 100644 --- a/Source/eu.modelwriter.core.alloyinecore/.gitignore +++ b/Source/eu.modelwriter.core.alloyinecore/.gitignore @@ -1,3 +1,5 @@ *.class -/bin/ +.project +/.idea/workspace.xml /target/ +/bin/ diff --git a/Source/eu.modelwriter.core.alloyinecore/.idea/workspace.xml b/Source/eu.modelwriter.core.alloyinecore/.idea/workspace.xml deleted file mode 100644 index cba7563..0000000 --- a/Source/eu.modelwriter.core.alloyinecore/.idea/workspace.xml +++ /dev/null @@ -1,1658 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - reflexive - acyc - multiplicity - mult - cardinality - save - reason - > - decls - declarations - nesting - - - $PROJECT_DIR$/src/test/java/kodkod/examples/alloy - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1506109516540 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - file://$PROJECT_DIR$/src/main/java/eu/modelwriter/core/alloyinecore/interpreter/typesystem/BoundCollector.java - 283 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - eu.modelwriter.core.alloyinecore:jar - - - - - - - - No facets are configured - - - - - - - - - - - - - - - 1.8 - - - - - - - - eu.modelwriter.core.alloyinecore - - - - - - - - 1.8 - - - - - - - - Maven: com.github.javaparser:javaparser-core-generators:3.1.0 - - - - - - - - \ No newline at end of file diff --git a/Source/kodkod/SMT/inttest.smt b/Source/kodkod/SMT/inttest.smt new file mode 100644 index 0000000..35bb0d1 --- /dev/null +++ b/Source/kodkod/SMT/inttest.smt @@ -0,0 +1,2309 @@ +(declare-datatypes ((univ 0)) ((univ (|1|) (|2|) (|3|) (|4|) (obj2) (obj1) (obj0) (obj3)))) +(declare-fun Object (univ) Bool) +(declare-fun Max (univ) Bool) +(declare-fun no (univ univ) Bool) +(declare-fun |SUM[(o . no)]16| (univ) (_ BitVec 5)) +(declare-fun |SUM[(Max . no)]0| () (_ BitVec 5)) +(declare-fun Ints (univ) Bool) +(declare-fun |NO[(o . no)]20| (univ (_ BitVec 5)) (_ BitVec 5)) +(declare-fun |SUM_RECURSIVE[(o . no)]18| (univ (_ BitVec 5)) (_ BitVec 5)) +(declare-fun |#[(o . no)]17| (univ) (_ BitVec 5)) +(declare-fun toInt (univ) (_ BitVec 5)) +(declare-fun |ord[(o . no)]19| (univ univ) (_ BitVec 5)) +(declare-fun |#[(Max . no)]1| () (_ BitVec 5)) +(declare-fun |ord[(Max . no)]3| (univ) (_ BitVec 5)) +(declare-fun |NO[(Max . no)]4| ((_ BitVec 5)) (_ BitVec 5)) +(declare-fun |SUM_RECURSIVE[(Max . no)]2| ((_ BitVec 5)) (_ BitVec 5)) +(assert (Object obj2)) +(assert (Object obj1)) +(assert (Object obj0)) +(assert (Object obj3)) +(assert (not (Object |1|))) +(assert (not (Object |2|))) +(assert (not (Object |3|))) +(assert (not (Object |4|))) +(assert (not (Max |1|))) +(assert (not (Max |2|))) +(assert (not (Max |3|))) +(assert (not (Max |4|))) +(assert (let ((a!1 (and (exists ((x!0 univ)) (! (no obj1 x!0) :skolemid s!14 :qid q!54)) + (=> (and (no obj1 obj3) (no obj1 obj1)) (and (= obj1 obj3))) + (=> (and (no obj1 |3|) (no obj1 obj1)) (and (= obj1 |3|))) + (=> (and (no obj1 obj1) (no obj1 |4|)) (and (= |4| obj1))) + (=> (and (no obj1 |2|) (no obj1 |3|)) (and (= |3| |2|))) + (=> (and (no obj1 obj1) (no obj1 |1|)) (and (= |1| obj1))) + (=> (and (no obj1 |3|) (no obj1 obj3)) (and (= obj3 |3|))) + (=> (and (no obj1 obj3) (no obj1 obj2)) (and (= obj2 obj3))) + (=> (and (no obj1 |1|) (no obj1 |4|)) (and (= |4| |1|))) + (=> (and (no obj1 |4|) (no obj1 |2|)) (and (= |2| |4|))) + (=> (and (no obj1 obj0) (no obj1 |4|)) (and (= |4| obj0))) + (=> (and (no obj1 |4|) (no obj1 |3|)) (and (= |3| |4|))) + (=> (and (no obj1 obj1) (no obj1 obj3)) (and (= obj3 obj1))) + (=> (and (no obj1 |4|) (no obj1 |4|)) (and (= |4| |4|))) + (=> (and (no obj1 |1|) (no obj1 obj3)) (and (= obj3 |1|))) + (=> (and (no obj1 obj2) (no obj1 obj3)) (and (= obj3 obj2))) + (=> (and (no obj1 |2|) (no obj1 obj3)) (and (= obj3 |2|))) + (=> (and (no obj1 obj1) (no obj1 |3|)) (and (= |3| obj1))) + (=> (and (no obj1 obj3) (no obj1 obj3)) (and (= obj3 obj3))) + (=> (and (no obj1 obj0) (no obj1 obj3)) (and (= obj3 obj0))) + (=> (and (no obj1 |1|) (no obj1 obj1)) (and (= obj1 |1|))) + (=> (and (no obj1 obj1) (no obj1 obj0)) (and (= obj0 obj1))) + (=> (and (no obj1 obj2) (no obj1 |1|)) (and (= |1| obj2))) + (=> (and (no obj1 |4|) (no obj1 obj0)) (and (= obj0 |4|))) + (=> (and (no obj1 obj2) (no obj1 obj0)) (and (= obj0 obj2))) + (=> (and (no obj1 |4|) (no obj1 obj1)) (and (= obj1 |4|))) + (=> (and (no obj1 |1|) (no obj1 obj2)) (and (= obj2 |1|))) + (=> (and (no obj1 obj1) (no obj1 obj1)) (and (= obj1 obj1))) + (=> (and (no obj1 |3|) (no obj1 |3|)) (and (= |3| |3|))) + (=> (and (no obj1 |1|) (no obj1 |2|)) (and (= |2| |1|))) + (=> (and (no obj1 |2|) (no obj1 obj1)) (and (= obj1 |2|))) + (=> (and (no obj1 obj3) (no obj1 |2|)) (and (= |2| obj3))) + (=> (and (no obj1 obj2) (no obj1 |4|)) (and (= |4| obj2))) + (=> (and (no obj1 |4|) (no obj1 obj2)) (and (= obj2 |4|))) + (=> (and (no obj1 obj3) (no obj1 |4|)) (and (= |4| obj3))) + (=> (and (no obj1 |2|) (no obj1 |2|)) (and (= |2| |2|))) + (=> (and (no obj1 |3|) (no obj1 |2|)) (and (= |2| |3|))) + (=> (and (no obj1 obj0) (no obj1 |3|)) (and (= |3| obj0))) + (=> (and (no obj1 |4|) (no obj1 |1|)) (and (= |1| |4|))) + (=> (and (no obj1 |3|) (no obj1 obj2)) (and (= obj2 |3|))) + (=> (and (no obj1 obj1) (no obj1 |2|)) (and (= |2| obj1))) + (=> (and (no obj1 |4|) (no obj1 obj3)) (and (= obj3 |4|))) + (=> (and (no obj1 obj2) (no obj1 |2|)) (and (= |2| obj2))) + (=> (and (no obj1 obj0) (no obj1 obj0)) (and (= obj0 obj0))) + (=> (and (no obj1 |2|) (no obj1 obj2)) (and (= obj2 |2|))) + (=> (and (no obj1 |3|) (no obj1 |1|)) (and (= |1| |3|))) + (=> (and (no obj1 obj1) (no obj1 obj2)) (and (= obj2 obj1))) + (=> (and (no obj1 obj0) (no obj1 obj2)) (and (= obj2 obj0))) + (=> (and (no obj1 |3|) (no obj1 obj0)) (and (= obj0 |3|))) + (=> (and (no obj1 obj0) (no obj1 |2|)) (and (= |2| obj0))) + (=> (and (no obj1 |1|) (no obj1 |1|)) (and (= |1| |1|))) + (=> (and (no obj1 |3|) (no obj1 |4|)) (and (= |4| |3|))) + (=> (and (no obj1 obj2) (no obj1 |3|)) (and (= |3| obj2))) + (=> (and (no obj1 obj3) (no obj1 obj0)) (and (= obj0 obj3))) + (=> (and (no obj1 |2|) (no obj1 |1|)) (and (= |1| |2|))) + (=> (and (no obj1 obj3) (no obj1 |1|)) (and (= |1| obj3))) + (=> (and (no obj1 obj3) (no obj1 |3|)) (and (= |3| obj3))) + (=> (and (no obj1 |1|) (no obj1 obj0)) (and (= obj0 |1|))) + (=> (and (no obj1 obj2) (no obj1 obj2)) (and (= obj2 obj2))) + (=> (and (no obj1 |2|) (no obj1 |4|)) (and (= |4| |2|))) + (=> (and (no obj1 obj0) (no obj1 obj1)) (and (= obj1 obj0))) + (=> (and (no obj1 obj2) (no obj1 obj1)) (and (= obj1 obj2))) + (=> (and (no obj1 |1|) (no obj1 |3|)) (and (= |3| |1|))) + (=> (and (no obj1 |2|) (no obj1 obj0)) (and (= obj0 |2|))) + (=> (and (no obj1 obj0) (no obj1 |1|)) (and (= |1| obj0)))))) + (=> (and (Object obj1)) a!1))) +(assert (let ((a!1 (and (exists ((x!1 univ)) (! (no obj3 x!1) :skolemid s!15 :qid q!55)) + (=> (and (no obj3 |3|) (no obj3 |4|)) (and (= |4| |3|))) + (=> (and (no obj3 |4|) (no obj3 |1|)) (and (= |1| |4|))) + (=> (and (no obj3 |1|) (no obj3 |1|)) (and (= |1| |1|))) + (=> (and (no obj3 |1|) (no obj3 |4|)) (and (= |4| |1|))) + (=> (and (no obj3 |2|) (no obj3 |2|)) (and (= |2| |2|))) + (=> (and (no obj3 obj3) (no obj3 obj3)) (and (= obj3 obj3))) + (=> (and (no obj3 |3|) (no obj3 obj0)) (and (= obj0 |3|))) + (=> (and (no obj3 obj2) (no obj3 |3|)) (and (= |3| obj2))) + (=> (and (no obj3 obj2) (no obj3 obj2)) (and (= obj2 obj2))) + (=> (and (no obj3 obj1) (no obj3 |2|)) (and (= |2| obj1))) + (=> (and (no obj3 |2|) (no obj3 |3|)) (and (= |3| |2|))) + (=> (and (no obj3 obj3) (no obj3 |4|)) (and (= |4| obj3))) + (=> (and (no obj3 obj1) (no obj3 |4|)) (and (= |4| obj1))) + (=> (and (no obj3 |2|) (no obj3 obj0)) (and (= obj0 |2|))) + (=> (and (no obj3 obj1) (no obj3 |1|)) (and (= |1| obj1))) + (=> (and (no obj3 |1|) (no obj3 obj0)) (and (= obj0 |1|))) + (=> (and (no obj3 |4|) (no obj3 obj3)) (and (= obj3 |4|))) + (=> (and (no obj3 obj1) (no obj3 obj2)) (and (= obj2 obj1))) + (=> (and (no obj3 |4|) (no obj3 |4|)) (and (= |4| |4|))) + (=> (and (no obj3 |3|) (no obj3 obj1)) (and (= obj1 |3|))) + (=> (and (no obj3 obj0) (no obj3 obj2)) (and (= obj2 obj0))) + (=> (and (no obj3 |1|) (no obj3 |3|)) (and (= |3| |1|))) + (=> (and (no obj3 |1|) (no obj3 |2|)) (and (= |2| |1|))) + (=> (and (no obj3 |3|) (no obj3 obj2)) (and (= obj2 |3|))) + (=> (and (no obj3 |3|) (no obj3 |2|)) (and (= |2| |3|))) + (=> (and (no obj3 obj2) (no obj3 |2|)) (and (= |2| obj2))) + (=> (and (no obj3 obj0) (no obj3 |2|)) (and (= |2| obj0))) + (=> (and (no obj3 obj3) (no obj3 obj2)) (and (= obj2 obj3))) + (=> (and (no obj3 |1|) (no obj3 obj1)) (and (= obj1 |1|))) + (=> (and (no obj3 |2|) (no obj3 |4|)) (and (= |4| |2|))) + (=> (and (no obj3 |3|) (no obj3 obj3)) (and (= obj3 |3|))) + (=> (and (no obj3 |4|) (no obj3 obj2)) (and (= obj2 |4|))) + (=> (and (no obj3 obj0) (no obj3 obj3)) (and (= obj3 obj0))) + (=> (and (no obj3 obj3) (no obj3 |1|)) (and (= |1| obj3))) + (=> (and (no obj3 obj3) (no obj3 |2|)) (and (= |2| obj3))) + (=> (and (no obj3 |1|) (no obj3 obj2)) (and (= obj2 |1|))) + (=> (and (no obj3 |4|) (no obj3 obj1)) (and (= obj1 |4|))) + (=> (and (no obj3 |3|) (no obj3 |1|)) (and (= |1| |3|))) + (=> (and (no obj3 obj3) (no obj3 obj0)) (and (= obj0 obj3))) + (=> (and (no obj3 |1|) (no obj3 obj3)) (and (= obj3 |1|))) + (=> (and (no obj3 obj0) (no obj3 |1|)) (and (= |1| obj0))) + (=> (and (no obj3 |2|) (no obj3 |1|)) (and (= |1| |2|))) + (=> (and (no obj3 |3|) (no obj3 |3|)) (and (= |3| |3|))) + (=> (and (no obj3 obj1) (no obj3 obj1)) (and (= obj1 obj1))) + (=> (and (no obj3 obj0) (no obj3 |4|)) (and (= |4| obj0))) + (=> (and (no obj3 |4|) (no obj3 |3|)) (and (= |3| |4|))) + (=> (and (no obj3 obj2) (no obj3 obj1)) (and (= obj1 obj2))) + (=> (and (no obj3 |4|) (no obj3 |2|)) (and (= |2| |4|))) + (=> (and (no obj3 |4|) (no obj3 obj0)) (and (= obj0 |4|))) + (=> (and (no obj3 obj0) (no obj3 obj1)) (and (= obj1 obj0))) + (=> (and (no obj3 obj2) (no obj3 |4|)) (and (= |4| obj2))) + (=> (and (no obj3 obj1) (no obj3 |3|)) (and (= |3| obj1))) + (=> (and (no obj3 |2|) (no obj3 obj1)) (and (= obj1 |2|))) + (=> (and (no obj3 obj0) (no obj3 obj0)) (and (= obj0 obj0))) + (=> (and (no obj3 obj2) (no obj3 obj3)) (and (= obj3 obj2))) + (=> (and (no obj3 obj0) (no obj3 |3|)) (and (= |3| obj0))) + (=> (and (no obj3 obj3) (no obj3 |3|)) (and (= |3| obj3))) + (=> (and (no obj3 obj1) (no obj3 obj3)) (and (= obj3 obj1))) + (=> (and (no obj3 obj2) (no obj3 |1|)) (and (= |1| obj2))) + (=> (and (no obj3 obj2) (no obj3 obj0)) (and (= obj0 obj2))) + (=> (and (no obj3 obj1) (no obj3 obj0)) (and (= obj0 obj1))) + (=> (and (no obj3 |2|) (no obj3 obj3)) (and (= obj3 |2|))) + (=> (and (no obj3 |2|) (no obj3 obj2)) (and (= obj2 |2|))) + (=> (and (no obj3 obj3) (no obj3 obj1)) (and (= obj1 obj3)))))) + (=> (and (Object obj3)) a!1))) +(assert (let ((a!1 (and (exists ((x!2 univ)) (! (no obj0 x!2) :skolemid s!16 :qid q!56)) + (=> (and (no obj0 |4|) (no obj0 |3|)) (and (= |3| |4|))) + (=> (and (no obj0 |2|) (no obj0 |1|)) (and (= |1| |2|))) + (=> (and (no obj0 |2|) (no obj0 |4|)) (and (= |4| |2|))) + (=> (and (no obj0 |2|) (no obj0 obj2)) (and (= obj2 |2|))) + (=> (and (no obj0 obj2) (no obj0 |2|)) (and (= |2| obj2))) + (=> (and (no obj0 obj2) (no obj0 obj1)) (and (= obj1 obj2))) + (=> (and (no obj0 obj3) (no obj0 |4|)) (and (= |4| obj3))) + (=> (and (no obj0 |2|) (no obj0 obj3)) (and (= obj3 |2|))) + (=> (and (no obj0 obj1) (no obj0 |4|)) (and (= |4| obj1))) + (=> (and (no obj0 obj3) (no obj0 |2|)) (and (= |2| obj3))) + (=> (and (no obj0 |2|) (no obj0 |3|)) (and (= |3| |2|))) + (=> (and (no obj0 obj3) (no obj0 |3|)) (and (= |3| obj3))) + (=> (and (no obj0 |2|) (no obj0 obj1)) (and (= obj1 |2|))) + (=> (and (no obj0 |2|) (no obj0 obj0)) (and (= obj0 |2|))) + (=> (and (no obj0 |3|) (no obj0 obj3)) (and (= obj3 |3|))) + (=> (and (no obj0 obj2) (no obj0 obj0)) (and (= obj0 obj2))) + (=> (and (no obj0 |4|) (no obj0 |2|)) (and (= |2| |4|))) + (=> (and (no obj0 obj1) (no obj0 |1|)) (and (= |1| obj1))) + (=> (and (no obj0 |1|) (no obj0 obj1)) (and (= obj1 |1|))) + (=> (and (no obj0 obj3) (no obj0 obj1)) (and (= obj1 obj3))) + (=> (and (no obj0 obj1) (no obj0 |2|)) (and (= |2| obj1))) + (=> (and (no obj0 obj3) (no obj0 obj2)) (and (= obj2 obj3))) + (=> (and (no obj0 obj0) (no obj0 obj1)) (and (= obj1 obj0))) + (=> (and (no obj0 |1|) (no obj0 obj0)) (and (= obj0 |1|))) + (=> (and (no obj0 |3|) (no obj0 obj0)) (and (= obj0 |3|))) + (=> (and (no obj0 obj2) (no obj0 obj3)) (and (= obj3 obj2))) + (=> (and (no obj0 |3|) (no obj0 |4|)) (and (= |4| |3|))) + (=> (and (no obj0 |1|) (no obj0 |2|)) (and (= |2| |1|))) + (=> (and (no obj0 |1|) (no obj0 |1|)) (and (= |1| |1|))) + (=> (and (no obj0 |1|) (no obj0 obj3)) (and (= obj3 |1|))) + (=> (and (no obj0 obj2) (no obj0 obj2)) (and (= obj2 obj2))) + (=> (and (no obj0 |1|) (no obj0 |4|)) (and (= |4| |1|))) + (=> (and (no obj0 |1|) (no obj0 |3|)) (and (= |3| |1|))) + (=> (and (no obj0 |3|) (no obj0 |3|)) (and (= |3| |3|))) + (=> (and (no obj0 obj1) (no obj0 obj1)) (and (= obj1 obj1))) + (=> (and (no obj0 |2|) (no obj0 |2|)) (and (= |2| |2|))) + (=> (and (no obj0 |3|) (no obj0 |2|)) (and (= |2| |3|))) + (=> (and (no obj0 |4|) (no obj0 |4|)) (and (= |4| |4|))) + (=> (and (no obj0 obj3) (no obj0 obj0)) (and (= obj0 obj3))) + (=> (and (no obj0 obj3) (no obj0 obj3)) (and (= obj3 obj3))) + (=> (and (no obj0 |3|) (no obj0 obj2)) (and (= obj2 |3|))) + (=> (and (no obj0 |4|) (no obj0 obj0)) (and (= obj0 |4|))) + (=> (and (no obj0 obj0) (no obj0 obj2)) (and (= obj2 obj0))) + (=> (and (no obj0 obj1) (no obj0 obj3)) (and (= obj3 obj1))) + (=> (and (no obj0 obj3) (no obj0 |1|)) (and (= |1| obj3))) + (=> (and (no obj0 obj0) (no obj0 |1|)) (and (= |1| obj0))) + (=> (and (no obj0 obj2) (no obj0 |1|)) (and (= |1| obj2))) + (=> (and (no obj0 |3|) (no obj0 obj1)) (and (= obj1 |3|))) + (=> (and (no obj0 obj1) (no obj0 obj0)) (and (= obj0 obj1))) + (=> (and (no obj0 obj2) (no obj0 |4|)) (and (= |4| obj2))) + (=> (and (no obj0 |4|) (no obj0 |1|)) (and (= |1| |4|))) + (=> (and (no obj0 obj0) (no obj0 |3|)) (and (= |3| obj0))) + (=> (and (no obj0 obj0) (no obj0 |4|)) (and (= |4| obj0))) + (=> (and (no obj0 obj1) (no obj0 |3|)) (and (= |3| obj1))) + (=> (and (no obj0 |1|) (no obj0 obj2)) (and (= obj2 |1|))) + (=> (and (no obj0 |4|) (no obj0 obj2)) (and (= obj2 |4|))) + (=> (and (no obj0 obj0) (no obj0 obj3)) (and (= obj3 obj0))) + (=> (and (no obj0 obj0) (no obj0 |2|)) (and (= |2| obj0))) + (=> (and (no obj0 obj0) (no obj0 obj0)) (and (= obj0 obj0))) + (=> (and (no obj0 |3|) (no obj0 |1|)) (and (= |1| |3|))) + (=> (and (no obj0 |4|) (no obj0 obj3)) (and (= obj3 |4|))) + (=> (and (no obj0 obj1) (no obj0 obj2)) (and (= obj2 obj1))) + (=> (and (no obj0 |4|) (no obj0 obj1)) (and (= obj1 |4|))) + (=> (and (no obj0 obj2) (no obj0 |3|)) (and (= |3| obj2)))))) + (=> (and (Object obj0)) a!1))) +(assert (let ((a!1 (and (exists ((x!3 univ)) (! (no obj2 x!3) :skolemid s!17 :qid q!57)) + (=> (and (no obj2 obj2) (no obj2 obj1)) (and (= obj1 obj2))) + (=> (and (no obj2 |4|) (no obj2 obj0)) (and (= obj0 |4|))) + (=> (and (no obj2 |3|) (no obj2 |2|)) (and (= |2| |3|))) + (=> (and (no obj2 obj3) (no obj2 obj0)) (and (= obj0 obj3))) + (=> (and (no obj2 |4|) (no obj2 |4|)) (and (= |4| |4|))) + (=> (and (no obj2 obj2) (no obj2 obj2)) (and (= obj2 obj2))) + (=> (and (no obj2 obj1) (no obj2 obj0)) (and (= obj0 obj1))) + (=> (and (no obj2 |3|) (no obj2 obj0)) (and (= obj0 |3|))) + (=> (and (no obj2 |2|) (no obj2 obj1)) (and (= obj1 |2|))) + (=> (and (no obj2 |4|) (no obj2 |2|)) (and (= |2| |4|))) + (=> (and (no obj2 obj3) (no obj2 |1|)) (and (= |1| obj3))) + (=> (and (no obj2 obj3) (no obj2 obj3)) (and (= obj3 obj3))) + (=> (and (no obj2 |4|) (no obj2 obj1)) (and (= obj1 |4|))) + (=> (and (no obj2 |1|) (no obj2 obj1)) (and (= obj1 |1|))) + (=> (and (no obj2 obj0) (no obj2 obj3)) (and (= obj3 obj0))) + (=> (and (no obj2 obj1) (no obj2 |2|)) (and (= |2| obj1))) + (=> (and (no obj2 obj0) (no obj2 |1|)) (and (= |1| obj0))) + (=> (and (no obj2 |2|) (no obj2 obj3)) (and (= obj3 |2|))) + (=> (and (no obj2 |2|) (no obj2 |2|)) (and (= |2| |2|))) + (=> (and (no obj2 obj1) (no obj2 |4|)) (and (= |4| obj1))) + (=> (and (no obj2 obj0) (no obj2 |4|)) (and (= |4| obj0))) + (=> (and (no obj2 |2|) (no obj2 |1|)) (and (= |1| |2|))) + (=> (and (no obj2 |2|) (no obj2 obj2)) (and (= obj2 |2|))) + (=> (and (no obj2 obj0) (no obj2 |3|)) (and (= |3| obj0))) + (=> (and (no obj2 obj3) (no obj2 obj1)) (and (= obj1 obj3))) + (=> (and (no obj2 |1|) (no obj2 |3|)) (and (= |3| |1|))) + (=> (and (no obj2 obj2) (no obj2 obj0)) (and (= obj0 obj2))) + (=> (and (no obj2 |3|) (no obj2 |1|)) (and (= |1| |3|))) + (=> (and (no obj2 obj0) (no obj2 obj1)) (and (= obj1 obj0))) + (=> (and (no obj2 obj3) (no obj2 |2|)) (and (= |2| obj3))) + (=> (and (no obj2 |4|) (no obj2 obj2)) (and (= obj2 |4|))) + (=> (and (no obj2 |1|) (no obj2 obj2)) (and (= obj2 |1|))) + (=> (and (no obj2 |4|) (no obj2 |1|)) (and (= |1| |4|))) + (=> (and (no obj2 obj1) (no obj2 |3|)) (and (= |3| obj1))) + (=> (and (no obj2 |3|) (no obj2 obj3)) (and (= obj3 |3|))) + (=> (and (no obj2 obj3) (no obj2 |4|)) (and (= |4| obj3))) + (=> (and (no obj2 obj3) (no obj2 obj2)) (and (= obj2 obj3))) + (=> (and (no obj2 obj2) (no obj2 |3|)) (and (= |3| obj2))) + (=> (and (no obj2 |1|) (no obj2 |1|)) (and (= |1| |1|))) + (=> (and (no obj2 |3|) (no obj2 obj1)) (and (= obj1 |3|))) + (=> (and (no obj2 |2|) (no obj2 |3|)) (and (= |3| |2|))) + (=> (and (no obj2 |4|) (no obj2 |3|)) (and (= |3| |4|))) + (=> (and (no obj2 |1|) (no obj2 obj3)) (and (= obj3 |1|))) + (=> (and (no obj2 obj1) (no obj2 obj3)) (and (= obj3 obj1))) + (=> (and (no obj2 obj1) (no obj2 |1|)) (and (= |1| obj1))) + (=> (and (no obj2 obj3) (no obj2 |3|)) (and (= |3| obj3))) + (=> (and (no obj2 |3|) (no obj2 |3|)) (and (= |3| |3|))) + (=> (and (no obj2 obj0) (no obj2 obj2)) (and (= obj2 obj0))) + (=> (and (no obj2 |1|) (no obj2 |4|)) (and (= |4| |1|))) + (=> (and (no obj2 obj1) (no obj2 obj2)) (and (= obj2 obj1))) + (=> (and (no obj2 |1|) (no obj2 obj0)) (and (= obj0 |1|))) + (=> (and (no obj2 |3|) (no obj2 obj2)) (and (= obj2 |3|))) + (=> (and (no obj2 |2|) (no obj2 obj0)) (and (= obj0 |2|))) + (=> (and (no obj2 obj1) (no obj2 obj1)) (and (= obj1 obj1))) + (=> (and (no obj2 |1|) (no obj2 |2|)) (and (= |2| |1|))) + (=> (and (no obj2 |4|) (no obj2 obj3)) (and (= obj3 |4|))) + (=> (and (no obj2 obj2) (no obj2 obj3)) (and (= obj3 obj2))) + (=> (and (no obj2 obj0) (no obj2 |2|)) (and (= |2| obj0))) + (=> (and (no obj2 obj2) (no obj2 |2|)) (and (= |2| obj2))) + (=> (and (no obj2 obj2) (no obj2 |1|)) (and (= |1| obj2))) + (=> (and (no obj2 obj0) (no obj2 obj0)) (and (= obj0 obj0))) + (=> (and (no obj2 |2|) (no obj2 |4|)) (and (= |4| |2|))) + (=> (and (no obj2 obj2) (no obj2 |4|)) (and (= |4| obj2))) + (=> (and (no obj2 |3|) (no obj2 |4|)) (and (= |4| |3|)))))) + (=> (and (Object obj2)) a!1))) +(assert (let ((a!1 (forall ((x!5 univ)) + (! (and (=> (no obj1 x!5) (no obj1 x!5)) + (=> (no obj1 x!5) (no obj1 x!5))) + :qid q!64)))) + (=> (and (Object obj1) (Object obj1) (not (= obj1 obj1))) (not a!1)))) +(assert (let ((a!1 (forall ((x!7 univ)) + (! (and (=> (no obj2 x!7) (no obj0 x!7)) + (=> (no obj0 x!7) (no obj2 x!7))) + :qid q!66)))) + (=> (and (Object obj2) (Object obj0) (not (= obj2 obj0))) (not a!1)))) +(assert (let ((a!1 (forall ((x!15 univ)) + (! (and (=> (no obj3 x!15) (no obj2 x!15)) + (=> (no obj2 x!15) (no obj3 x!15))) + :qid q!74)))) + (=> (and (Object obj3) (Object obj2) (not (= obj3 obj2))) (not a!1)))) +(assert (let ((a!1 (forall ((x!3 univ)) + (! (and (=> (no obj0 x!3) (no obj2 x!3)) + (=> (no obj2 x!3) (no obj0 x!3))) + :qid q!62)))) + (=> (and (Object obj0) (Object obj2) (not (= obj0 obj2))) (not a!1)))) +(assert (let ((a!1 (forall ((x!12 univ)) + (! (and (=> (no obj3 x!12) (no obj3 x!12)) + (=> (no obj3 x!12) (no obj3 x!12))) + :qid q!71)))) + (=> (and (Object obj3) (Object obj3) (not (= obj3 obj3))) (not a!1)))) +(assert (let ((a!1 (forall ((x!8 univ)) + (! (and (=> (no obj1 x!8) (no obj2 x!8)) + (=> (no obj2 x!8) (no obj1 x!8))) + :qid q!67)))) + (=> (and (Object obj1) (Object obj2) (not (= obj1 obj2))) (not a!1)))) +(assert (let ((a!1 (forall ((x!11 univ)) + (! (and (=> (no obj1 x!11) (no obj3 x!11)) + (=> (no obj3 x!11) (no obj1 x!11))) + :qid q!70)))) + (=> (and (Object obj1) (Object obj3) (not (= obj1 obj3))) (not a!1)))) +(assert (let ((a!1 (forall ((x!2 univ)) + (! (and (=> (no obj3 x!2) (no obj0 x!2)) + (=> (no obj0 x!2) (no obj3 x!2))) + :qid q!61)))) + (=> (and (Object obj3) (Object obj0) (not (= obj3 obj0))) (not a!1)))) +(assert (let ((a!1 (forall ((x!9 univ)) + (! (and (=> (no obj0 x!9) (no obj1 x!9)) + (=> (no obj1 x!9) (no obj0 x!9))) + :qid q!68)))) + (=> (and (Object obj0) (Object obj1) (not (= obj0 obj1))) (not a!1)))) +(assert (let ((a!1 (forall ((x!1 univ)) + (! (and (=> (no obj1 x!1) (no obj0 x!1)) + (=> (no obj0 x!1) (no obj1 x!1))) + :qid q!60)))) + (=> (and (Object obj1) (Object obj0) (not (= obj1 obj0))) (not a!1)))) +(assert (let ((a!1 (forall ((x!6 univ)) + (! (and (=> (no obj2 x!6) (no obj2 x!6)) + (=> (no obj2 x!6) (no obj2 x!6))) + :qid q!65)))) + (=> (and (Object obj2) (Object obj2) (not (= obj2 obj2))) (not a!1)))) +(assert (let ((a!1 (forall ((x!14 univ)) + (! (and (=> (no obj0 x!14) (no obj3 x!14)) + (=> (no obj3 x!14) (no obj0 x!14))) + :qid q!73)))) + (=> (and (Object obj0) (Object obj3) (not (= obj0 obj3))) (not a!1)))) +(assert (let ((a!1 (forall ((x!10 univ)) + (! (and (=> (no obj2 x!10) (no obj1 x!10)) + (=> (no obj1 x!10) (no obj2 x!10))) + :qid q!69)))) + (=> (and (Object obj2) (Object obj1) (not (= obj2 obj1))) (not a!1)))) +(assert (let ((a!1 (forall ((x!13 univ)) + (! (and (=> (no obj3 x!13) (no obj1 x!13)) + (=> (no obj1 x!13) (no obj3 x!13))) + :qid q!72)))) + (=> (and (Object obj3) (Object obj1) (not (= obj3 obj1))) (not a!1)))) +(assert (let ((a!1 (forall ((x!0 univ)) + (! (and (=> (no obj2 x!0) (no obj3 x!0)) + (=> (no obj3 x!0) (no obj2 x!0))) + :qid q!59)))) + (=> (and (Object obj2) (Object obj3) (not (= obj2 obj3))) (not a!1)))) +(assert (let ((a!1 (forall ((x!4 univ)) + (! (and (=> (no obj0 x!4) (no obj0 x!4)) + (=> (no obj0 x!4) (no obj0 x!4))) + :qid q!63)))) + (=> (and (Object obj0) (Object obj0) (not (= obj0 obj0))) (not a!1)))) +(assert (=> (and (Object obj0)) (bvsge |SUM[(Max . no)]0| (|SUM[(o . no)]16| obj0)))) +(assert (=> (and (Object obj1)) (bvsge |SUM[(Max . no)]0| (|SUM[(o . no)]16| obj1)))) +(assert (=> (and (Object obj3)) (bvsge |SUM[(Max . no)]0| (|SUM[(o . no)]16| obj3)))) +(assert (=> (and (Object obj2)) (bvsge |SUM[(Max . no)]0| (|SUM[(o . no)]16| obj2)))) +(assert (=> (no |2| |1|) (and (Object |2|) (Ints |1|)))) +(assert (=> (no obj2 |1|) (and (Object obj2) (Ints |1|)))) +(assert (=> (no obj2 |3|) (and (Object obj2) (Ints |3|)))) +(assert (=> (no obj1 |2|) (and (Object obj1) (Ints |2|)))) +(assert (=> (no obj0 obj3) (and (Object obj0) (Ints obj3)))) +(assert (=> (no |1| |2|) (and (Object |1|) (Ints |2|)))) +(assert (=> (no |4| obj0) (and (Object |4|) (Ints obj0)))) +(assert (=> (no |3| obj2) (and (Object |3|) (Ints obj2)))) +(assert (=> (no obj3 |4|) (and (Object obj3) (Ints |4|)))) +(assert (=> (no |3| obj3) (and (Object |3|) (Ints obj3)))) +(assert (=> (no obj3 |1|) (and (Object obj3) (Ints |1|)))) +(assert (=> (no |1| |3|) (and (Object |1|) (Ints |3|)))) +(assert (=> (no obj0 |3|) (and (Object obj0) (Ints |3|)))) +(assert (=> (no obj0 |4|) (and (Object obj0) (Ints |4|)))) +(assert (=> (no obj1 obj0) (and (Object obj1) (Ints obj0)))) +(assert (=> (no |1| obj2) (and (Object |1|) (Ints obj2)))) +(assert (=> (no |1| |4|) (and (Object |1|) (Ints |4|)))) +(assert (=> (no |4| obj1) (and (Object |4|) (Ints obj1)))) +(assert (=> (no |2| obj2) (and (Object |2|) (Ints obj2)))) +(assert (=> (no |3| |2|) (and (Object |3|) (Ints |2|)))) +(assert (=> (no |3| |4|) (and (Object |3|) (Ints |4|)))) +(assert (=> (no |3| obj0) (and (Object |3|) (Ints obj0)))) +(assert (=> (no |4| obj3) (and (Object |4|) (Ints obj3)))) +(assert (=> (no obj1 |4|) (and (Object obj1) (Ints |4|)))) +(assert (=> (no |2| obj0) (and (Object |2|) (Ints obj0)))) +(assert (=> (no obj0 |2|) (and (Object obj0) (Ints |2|)))) +(assert (=> (no |1| obj0) (and (Object |1|) (Ints obj0)))) +(assert (=> (no obj3 obj0) (and (Object obj3) (Ints obj0)))) +(assert (=> (no |4| |1|) (and (Object |4|) (Ints |1|)))) +(assert (=> (no obj1 obj3) (and (Object obj1) (Ints obj3)))) +(assert (=> (no obj0 |1|) (and (Object obj0) (Ints |1|)))) +(assert (=> (no obj2 obj1) (and (Object obj2) (Ints obj1)))) +(assert (=> (no |4| |4|) (and (Object |4|) (Ints |4|)))) +(assert (=> (no obj3 obj1) (and (Object obj3) (Ints obj1)))) +(assert (=> (no obj1 obj2) (and (Object obj1) (Ints obj2)))) +(assert (=> (no obj3 |2|) (and (Object obj3) (Ints |2|)))) +(assert (=> (no obj0 obj1) (and (Object obj0) (Ints obj1)))) +(assert (=> (no obj1 |3|) (and (Object obj1) (Ints |3|)))) +(assert (=> (no |3| obj1) (and (Object |3|) (Ints obj1)))) +(assert (=> (no |1| obj1) (and (Object |1|) (Ints obj1)))) +(assert (=> (no |3| |1|) (and (Object |3|) (Ints |1|)))) +(assert (=> (no |1| obj3) (and (Object |1|) (Ints obj3)))) +(assert (=> (no obj2 obj0) (and (Object obj2) (Ints obj0)))) +(assert (=> (no obj2 obj3) (and (Object obj2) (Ints obj3)))) +(assert (=> (no |4| obj2) (and (Object |4|) (Ints obj2)))) +(assert (=> (no obj3 |3|) (and (Object obj3) (Ints |3|)))) +(assert (=> (no obj3 obj2) (and (Object obj3) (Ints obj2)))) +(assert (=> (no |1| |1|) (and (Object |1|) (Ints |1|)))) +(assert (=> (no obj2 |2|) (and (Object obj2) (Ints |2|)))) +(assert (=> (no obj1 obj1) (and (Object obj1) (Ints obj1)))) +(assert (=> (no obj1 |1|) (and (Object obj1) (Ints |1|)))) +(assert (=> (no obj0 obj2) (and (Object obj0) (Ints obj2)))) +(assert (=> (no obj3 obj3) (and (Object obj3) (Ints obj3)))) +(assert (=> (no |3| |3|) (and (Object |3|) (Ints |3|)))) +(assert (=> (no |2| obj3) (and (Object |2|) (Ints obj3)))) +(assert (=> (no |2| obj1) (and (Object |2|) (Ints obj1)))) +(assert (=> (no obj2 |4|) (and (Object obj2) (Ints |4|)))) +(assert (=> (no |2| |4|) (and (Object |2|) (Ints |4|)))) +(assert (=> (no |4| |2|) (and (Object |4|) (Ints |2|)))) +(assert (=> (no |4| |3|) (and (Object |4|) (Ints |3|)))) +(assert (=> (no obj0 obj0) (and (Object obj0) (Ints obj0)))) +(assert (=> (no |2| |3|) (and (Object |2|) (Ints |3|)))) +(assert (=> (no obj2 obj2) (and (Object obj2) (Ints obj2)))) +(assert (=> (no |2| |2|) (and (Object |2|) (Ints |2|)))) +(assert (exists ((x!0 univ)) (! (Max x!0) :skolemid s!18 :qid q!58))) +(assert (=> (and (Max obj0) (Max obj2)) (and (= obj2 obj0)))) +(assert (=> (and (Max obj1) (Max obj2)) (and (= obj2 obj1)))) +(assert (=> (and (Max obj2) (Max obj0)) (and (= obj0 obj2)))) +(assert (=> (and (Max obj1) (Max obj0)) (and (= obj0 obj1)))) +(assert (=> (and (Max obj0) (Max obj0)) (and (= obj0 obj0)))) +(assert (=> (and (Max obj0) (Max obj3)) (and (= obj3 obj0)))) +(assert (=> (and (Max obj2) (Max obj1)) (and (= obj1 obj2)))) +(assert (=> (and (Max obj3) (Max obj3)) (and (= obj3 obj3)))) +(assert (=> (and (Max obj0) (Max obj1)) (and (= obj1 obj0)))) +(assert (=> (and (Max obj1) (Max obj1)) (and (= obj1 obj1)))) +(assert (=> (and (Max obj1) (Max obj3)) (and (= obj3 obj1)))) +(assert (=> (and (Max obj2) (Max obj3)) (and (= obj3 obj2)))) +(assert (=> (and (Max obj3) (Max obj2)) (and (= obj2 obj3)))) +(assert (=> (and (Max obj3) (Max obj0)) (and (= obj0 obj3)))) +(assert (=> (and (Max obj3) (Max obj1)) (and (= obj1 obj3)))) +(assert (=> (and (Max obj2) (Max obj2)) (and (= obj2 obj2)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj3 #b00110) + (ite (bvsle #b00110 (|#[(o . no)]17| obj3)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj3 #b00111) + (|NO[(o . no)]20| obj3 #b00110)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) #b00111) + (= (|NO[(o . no)]20| obj3 #b00111) (toInt |2|)))) +(assert (=> (or (and (Max obj1) (no obj1 obj2)) + (and (Max obj0) (no obj0 obj2)) + (and (Max obj3) (no obj3 obj2)) + (and (Max obj2) (no obj2 obj2))) + (and (bvsle #b00001 (|ord[(Max . no)]3| obj2)) + (bvsle (|ord[(Max . no)]3| obj2) |#[(Max . no)]1|)))) +(assert (=> (no obj3 |1|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj3 |1|)) + (bvsle (|ord[(o . no)]19| obj3 |1|) (|#[(o . no)]17| obj3))))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) (|ord[(o . no)]19| obj0 |1|)) + (and (= obj0 |1|)))) +(assert (=> (= (|ord[(Max . no)]3| obj3) (|ord[(Max . no)]3| |1|)) (and (= obj3 |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) (|ord[(o . no)]19| obj2 |4|)) + (and (= obj2 |4|)))) +(assert (let ((a!1 (exists ((x!26 univ)) + (! (and (= (|ord[(o . no)]19| obj0 x!26) #b00110) (no obj0 x!26)) + :qid q!42)))) + (=> (and (bvsle #b00001 #b00110) (bvsle #b00110 (|#[(o . no)]17| obj0))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) (|ord[(o . no)]19| obj1 |4|)) + (and (= |4| |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) #b00111) + (= (|NO[(o . no)]20| obj0 #b00111) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) (|ord[(o . no)]19| obj2 obj1)) + (and (= obj0 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) #b00010) + (= (|NO[(o . no)]20| obj0 #b00010) (toInt obj3)))) +(assert (=> (no obj2 obj0) + (and (bvsle #b00001 (|ord[(o . no)]19| obj2 obj0)) + (bvsle (|ord[(o . no)]19| obj2 obj0) (|#[(o . no)]17| obj2))))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) #b00011) + (= (|NO[(o . no)]20| obj1 #b00011) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) (|ord[(o . no)]19| obj2 |4|)) + (and (= |2| |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) (|ord[(o . no)]19| obj1 obj3)) + (and (= |4| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) #b00011) + (= (|NO[(o . no)]20| obj3 #b00011) (toInt |1|)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) (|ord[(Max . no)]3| obj3)) (and (= obj0 obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) #b01000) + (= (|NO[(o . no)]20| obj0 #b01000) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) #b00010) + (= (|NO[(o . no)]20| obj3 #b00010) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) (|ord[(o . no)]19| obj2 |2|)) + (and (= |1| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) #b00100) + (= (|NO[(o . no)]20| obj1 #b00100) (toInt obj2)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) (|ord[(Max . no)]3| obj3)) (and (= obj2 obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) (|ord[(o . no)]19| obj2 |1|)) + (and (= |2| |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) (|ord[(o . no)]19| obj1 |1|)) + (and (= |2| |1|)))) +(assert (let ((a!1 (exists ((x!7 univ)) + (! (and (= (|ord[(Max . no)]3| x!7) #b00100) + (exists ((x!11 univ)) + (! (and (Max x!11) (no x!11 x!7)) :skolemid s!5 :qid q!8))) + :qid q!9)))) + (=> (and (bvsle #b00001 #b00100) (bvsle #b00100 |#[(Max . no)]1|)) a!1))) +(assert (=> (= (|ord[(Max . no)]3| |1|) (|ord[(Max . no)]3| |4|)) (and (= |1| |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) #b01000) + (= (|NO[(o . no)]20| obj3 #b01000) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) (|ord[(o . no)]19| obj3 |3|)) + (and (= obj1 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) #b00110) + (= (|NO[(o . no)]20| obj1 #b00110) (toInt obj1)))) +(assert (=> (= (|ord[(Max . no)]3| obj3) #b01000) + (= (|NO[(Max . no)]4| #b01000) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) (|ord[(o . no)]19| obj0 obj3)) + (and (= obj3 obj3)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj0 #b00111) + (ite (bvsle #b00111 (|#[(o . no)]17| obj0)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj0 #b01000) + (|NO[(o . no)]20| obj0 #b00111)) + #b00000))) +(assert (=> (= (|ord[(Max . no)]3| |4|) (|ord[(Max . no)]3| obj1)) (and (= |4| obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) #b00001) + (= (|NO[(o . no)]20| obj3 #b00001) (toInt obj3)))) +(assert (let ((a!1 (exists ((x!22 univ)) + (! (and (= (|ord[(o . no)]19| obj1 x!22) #b01000) (no obj1 x!22)) + :qid q!26)))) + (=> (and (bvsle #b00001 #b01000) (bvsle #b01000 (|#[(o . no)]17| obj1))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) (|ord[(o . no)]19| obj0 obj3)) + (and (= |4| obj3)))) +(assert (=> (= (|ord[(Max . no)]3| |2|) (|ord[(Max . no)]3| obj1)) (and (= |2| obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) (|ord[(o . no)]19| obj3 obj2)) + (and (= obj1 obj2)))) +(assert (= (|SUM_RECURSIVE[(Max . no)]2| #b00111) + (ite (bvsle #b00111 |#[(Max . no)]1|) + (bvadd (|SUM_RECURSIVE[(Max . no)]2| #b01000) + (|NO[(Max . no)]4| #b00111)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) #b00111) + (= (|NO[(o . no)]20| obj2 #b00111) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) #b00011) + (= (|NO[(o . no)]20| obj3 #b00011) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) #b00011) + (= (|NO[(o . no)]20| obj0 #b00011) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) (|ord[(o . no)]19| obj1 obj0)) + (and (= obj0 obj0)))) +(assert (=> (no obj3 |3|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj3 |3|)) + (bvsle (|ord[(o . no)]19| obj3 |3|) (|#[(o . no)]17| obj3))))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) (|ord[(o . no)]19| obj1 |2|)) + (and (= obj1 |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) #b00011) + (= (|NO[(o . no)]20| obj3 #b00011) (toInt |4|)))) +(assert (=> (no obj3 obj0) + (and (bvsle #b00001 (|ord[(o . no)]19| obj3 obj0)) + (bvsle (|ord[(o . no)]19| obj3 obj0) (|#[(o . no)]17| obj3))))) +(assert (=> (= (|ord[(Max . no)]3| |2|) #b00011) + (= (|NO[(Max . no)]4| #b00011) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) (|ord[(o . no)]19| obj0 obj1)) + (and (= |3| obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) #b00101) + (= (|NO[(o . no)]20| obj3 #b00101) (toInt obj0)))) +(assert (=> (= (|ord[(Max . no)]3| |3|) (|ord[(Max . no)]3| obj1)) (and (= |3| obj1)))) +(assert (=> (= (|ord[(Max . no)]3| obj3) #b00011) + (= (|NO[(Max . no)]4| #b00011) (toInt obj3)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) (|ord[(Max . no)]3| obj1)) (and (= obj1 obj1)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj1 #b00101) + (ite (bvsle #b00101 (|#[(o . no)]17| obj1)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj1 #b00110) + (|NO[(o . no)]20| obj1 #b00101)) + #b00000))) +(assert (= (toInt obj0) #b00000)) +(assert (=> (= (|ord[(Max . no)]3| obj3) #b00111) + (= (|NO[(Max . no)]4| #b00111) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) #b00111) + (= (|NO[(o . no)]20| obj0 #b00111) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) #b00011) + (= (|NO[(o . no)]20| obj2 #b00011) (toInt obj2)))) +(assert (=> (= (|ord[(Max . no)]3| |1|) #b00010) + (= (|NO[(Max . no)]4| #b00010) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) #b00100) + (= (|NO[(o . no)]20| obj2 #b00100) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) (|ord[(o . no)]19| obj2 |1|)) + (and (= |3| |1|)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) (|ord[(Max . no)]3| |1|)) (and (= obj2 |1|)))) +(assert (= (|SUM_RECURSIVE[(Max . no)]2| #b01000) + (ite (bvsle #b01000 |#[(Max . no)]1|) + (bvadd (|SUM_RECURSIVE[(Max . no)]2| #b01001) + (|NO[(Max . no)]4| #b01000)) + #b00000))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj0 #b00011) + (ite (bvsle #b00011 (|#[(o . no)]17| obj0)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj0 #b00100) + (|NO[(o . no)]20| obj0 #b00011)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) #b00001) + (= (|NO[(o . no)]20| obj1 #b00001) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) #b00100) + (= (|NO[(o . no)]20| obj3 #b00100) (toInt |3|)))) +(assert (let ((a!1 (exists ((x!28 univ)) + (! (and (= (|ord[(o . no)]19| obj2 x!28) #b01000) (no obj2 x!28)) + :qid q!53)))) + (=> (and (bvsle #b00001 #b01000) (bvsle #b01000 (|#[(o . no)]17| obj2))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) #b00001) + (= (|NO[(o . no)]20| obj2 #b00001) (toInt obj3)))) +(assert (=> (= (|ord[(Max . no)]3| |2|) (|ord[(Max . no)]3| |2|)) (and (= |2| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) #b00100) + (= (|NO[(o . no)]20| obj0 #b00100) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) (|ord[(o . no)]19| obj1 obj2)) + (and (= obj3 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) #b01000) + (= (|NO[(o . no)]20| obj0 #b01000) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) (|ord[(o . no)]19| obj0 obj3)) + (and (= obj1 obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) (|ord[(o . no)]19| obj0 obj1)) + (and (= |1| obj1)))) +(assert (=> (no obj2 obj2) + (and (bvsle #b00001 (|ord[(o . no)]19| obj2 obj2)) + (bvsle (|ord[(o . no)]19| obj2 obj2) (|#[(o . no)]17| obj2))))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) #b01000) + (= (|NO[(o . no)]20| obj3 #b01000) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) (|ord[(o . no)]19| obj0 obj0)) + (and (= obj1 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) (|ord[(o . no)]19| obj1 obj1)) + (and (= |4| obj1)))) +(assert (=> (= (|ord[(Max . no)]3| |3|) #b00101) + (= (|NO[(Max . no)]4| #b00101) (toInt |3|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj0 #b00101) + (ite (bvsle #b00101 (|#[(o . no)]17| obj0)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj0 #b00110) + (|NO[(o . no)]20| obj0 #b00101)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) #b00110) + (= (|NO[(o . no)]20| obj2 #b00110) (toInt obj2)))) +(assert (=> (no obj0 |1|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj0 |1|)) + (bvsle (|ord[(o . no)]19| obj0 |1|) (|#[(o . no)]17| obj0))))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) #b00001) + (= (|NO[(o . no)]20| obj0 #b00001) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) #b00101) + (= (|NO[(o . no)]20| obj0 #b00101) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) #b00110) + (= (|NO[(o . no)]20| obj2 #b00110) (toInt obj3)))) +(assert (= (|SUM_RECURSIVE[(Max . no)]2| #b00011) + (ite (bvsle #b00011 |#[(Max . no)]1|) + (bvadd (|SUM_RECURSIVE[(Max . no)]2| #b00100) + (|NO[(Max . no)]4| #b00011)) + #b00000))) +(assert (=> (no obj3 |2|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj3 |2|)) + (bvsle (|ord[(o . no)]19| obj3 |2|) (|#[(o . no)]17| obj3))))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) (|ord[(o . no)]19| obj3 obj3)) + (and (= obj2 obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) #b00101) + (= (|NO[(o . no)]20| obj2 #b00101) (toInt |2|)))) +(assert (= (|SUM_RECURSIVE[(Max . no)]2| #b00101) + (ite (bvsle #b00101 |#[(Max . no)]1|) + (bvadd (|SUM_RECURSIVE[(Max . no)]2| #b00110) + (|NO[(Max . no)]4| #b00101)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) #b00101) + (= (|NO[(o . no)]20| obj1 #b00101) (toInt obj2)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj1 #b00111) + (ite (bvsle #b00111 (|#[(o . no)]17| obj1)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj1 #b01000) + (|NO[(o . no)]20| obj1 #b00111)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) (|ord[(o . no)]19| obj1 obj3)) + (and (= |3| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) #b00001) + (= (|NO[(o . no)]20| obj3 #b00001) (toInt |4|)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) (|ord[(Max . no)]3| |2|)) (and (= obj1 |2|)))) +(assert (=> (no obj1 obj2) + (and (bvsle #b00001 (|ord[(o . no)]19| obj1 obj2)) + (bvsle (|ord[(o . no)]19| obj1 obj2) (|#[(o . no)]17| obj1))))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) #b00110) + (= (|NO[(o . no)]20| obj0 #b00110) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) (|ord[(o . no)]19| obj0 obj2)) + (and (= obj1 obj2)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) #b00110) + (= (|NO[(Max . no)]4| #b00110) (toInt obj1)))) +(assert (=> (= (|ord[(Max . no)]3| |2|) #b00110) + (= (|NO[(Max . no)]4| #b00110) (toInt |2|)))) +(assert (=> (= (|ord[(Max . no)]3| |3|) (|ord[(Max . no)]3| obj0)) (and (= |3| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) #b00101) + (= (|NO[(o . no)]20| obj3 #b00101) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) #b00111) + (= (|NO[(o . no)]20| obj1 #b00111) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) (|ord[(o . no)]19| obj3 |3|)) + (and (= |1| |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) (|ord[(o . no)]19| obj0 obj1)) + (and (= obj0 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) #b00110) + (= (|NO[(o . no)]20| obj2 #b00110) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) #b00011) + (= (|NO[(o . no)]20| obj0 #b00011) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) #b00100) + (= (|NO[(o . no)]20| obj3 #b00100) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) #b00001) + (= (|NO[(o . no)]20| obj3 #b00001) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) (|ord[(o . no)]19| obj0 obj2)) + (and (= obj2 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) #b00001) + (= (|NO[(o . no)]20| obj3 #b00001) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) (|ord[(o . no)]19| obj3 obj0)) + (and (= obj0 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) (|ord[(o . no)]19| obj3 obj1)) + (and (= obj0 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) (|ord[(o . no)]19| obj2 obj2)) + (and (= |3| obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) (|ord[(o . no)]19| obj1 obj1)) + (and (= obj1 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) (|ord[(o . no)]19| obj1 |3|)) + (and (= |4| |3|)))) +(assert (=> (no obj2 obj1) + (and (bvsle #b00001 (|ord[(o . no)]19| obj2 obj1)) + (bvsle (|ord[(o . no)]19| obj2 obj1) (|#[(o . no)]17| obj2))))) +(assert (=> (= (|ord[(Max . no)]3| |3|) #b00111) + (= (|NO[(Max . no)]4| #b00111) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) #b00100) + (= (|NO[(o . no)]20| obj0 #b00100) (toInt |4|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj3 #b00101) + (ite (bvsle #b00101 (|#[(o . no)]17| obj3)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj3 #b00110) + (|NO[(o . no)]20| obj3 #b00101)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) #b01000) + (= (|NO[(o . no)]20| obj3 #b01000) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) (|ord[(o . no)]19| obj1 obj2)) + (and (= obj1 obj2)))) +(assert (=> (= (|ord[(Max . no)]3| |1|) (|ord[(Max . no)]3| |2|)) (and (= |1| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) #b00110) + (= (|NO[(o . no)]20| obj3 #b00110) (toInt obj3)))) +(assert (= (|SUM[(o . no)]16| obj3) (|SUM_RECURSIVE[(o . no)]18| obj3 #b00001))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) (|ord[(o . no)]19| obj1 |3|)) + (and (= obj2 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) #b00110) + (= (|NO[(o . no)]20| obj3 #b00110) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) (|ord[(o . no)]19| obj1 |1|)) + (and (= obj3 |1|)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) (|ord[(Max . no)]3| obj1)) (and (= obj2 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) (|ord[(o . no)]19| obj3 |1|)) + (and (= |4| |1|)))) +(assert (=> (= (|ord[(Max . no)]3| obj3) (|ord[(Max . no)]3| obj2)) (and (= obj3 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) (|ord[(o . no)]19| obj1 |2|)) + (and (= |2| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) #b01000) + (= (|NO[(o . no)]20| obj1 #b01000) (toInt obj2)))) +(assert (=> (or (and (Max obj1) (no obj1 obj0)) + (and (Max obj0) (no obj0 obj0)) + (and (Max obj3) (no obj3 obj0)) + (and (Max obj2) (no obj2 obj0))) + (and (bvsle #b00001 (|ord[(Max . no)]3| obj0)) + (bvsle (|ord[(Max . no)]3| obj0) |#[(Max . no)]1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) (|ord[(o . no)]19| obj3 obj3)) + (and (= obj1 obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) (|ord[(o . no)]19| obj3 obj1)) + (and (= obj1 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) (|ord[(o . no)]19| obj3 |3|)) + (and (= obj3 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) (|ord[(o . no)]19| obj3 obj3)) + (and (= obj0 obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) #b00011) + (= (|NO[(o . no)]20| obj2 #b00011) (toInt obj3)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) #b01000) + (= (|NO[(Max . no)]4| #b01000) (toInt |4|)))) +(assert (let ((a!1 (exists ((x!24 univ)) + (! (and (= (|ord[(o . no)]19| obj3 x!24) #b00101) (no obj3 x!24)) + :qid q!32)))) + (=> (and (bvsle #b00001 #b00101) (bvsle #b00101 (|#[(o . no)]17| obj3))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) #b00111) + (= (|NO[(o . no)]20| obj1 #b00111) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) (|ord[(o . no)]19| obj0 obj2)) + (and (= |4| obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) #b00110) + (= (|NO[(o . no)]20| obj0 #b00110) (toInt |4|)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) #b00101) + (= (|NO[(Max . no)]4| #b00101) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) (|ord[(o . no)]19| obj3 obj0)) + (and (= |3| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) (|ord[(o . no)]19| obj3 |3|)) + (and (= obj0 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) (|ord[(o . no)]19| obj3 |2|)) + (and (= |4| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) (|ord[(o . no)]19| obj3 obj3)) + (and (= |3| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) (|ord[(o . no)]19| obj0 |2|)) + (and (= obj1 |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) #b00111) + (= (|NO[(o . no)]20| obj2 #b00111) (toInt |2|)))) +(assert (=> (or (and (Max obj1) (no obj1 obj1)) + (and (Max obj3) (no obj3 obj1)) + (and (Max obj2) (no obj2 obj1)) + (and (Max obj0) (no obj0 obj1))) + (and (bvsle #b00001 (|ord[(Max . no)]3| obj1)) + (bvsle (|ord[(Max . no)]3| obj1) |#[(Max . no)]1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) #b00111) + (= (|NO[(o . no)]20| obj2 #b00111) (toInt obj3)))) +(assert (=> (or (and (Max obj1) (no obj1 |2|)) + (and (Max obj0) (no obj0 |2|)) + (and (Max obj3) (no obj3 |2|)) + (and (Max obj2) (no obj2 |2|))) + (and (bvsle #b00001 (|ord[(Max . no)]3| |2|)) + (bvsle (|ord[(Max . no)]3| |2|) |#[(Max . no)]1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) #b00111) + (= (|NO[(o . no)]20| obj1 #b00111) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) #b00111) + (= (|NO[(o . no)]20| obj0 #b00111) (toInt obj0)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) (|ord[(Max . no)]3| obj3)) (and (= obj1 obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) (|ord[(o . no)]19| obj1 obj1)) + (and (= |1| obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) #b00011) + (= (|NO[(o . no)]20| obj3 #b00011) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) (|ord[(o . no)]19| obj2 obj3)) + (and (= obj2 obj3)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) #b00110) + (= (|NO[(Max . no)]4| #b00110) (toInt |4|)))) +(assert (=> (= (|ord[(Max . no)]3| |2|) (|ord[(Max . no)]3| |4|)) (and (= |2| |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) (|ord[(o . no)]19| obj2 |1|)) + (and (= obj2 |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) #b00011) + (= (|NO[(o . no)]20| obj1 #b00011) (toInt obj2)))) +(assert (let ((a!1 (exists ((x!22 univ)) + (! (and (= (|ord[(o . no)]19| obj1 x!22) #b00001) (no obj1 x!22)) + :qid q!19)))) + (=> (and (bvsle #b00001 #b00001) (bvsle #b00001 (|#[(o . no)]17| obj1))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) (|ord[(o . no)]19| obj2 |3|)) + (and (= |2| |3|)))) +(assert (=> (= (|ord[(Max . no)]3| |1|) #b00110) + (= (|NO[(Max . no)]4| #b00110) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) (|ord[(o . no)]19| obj3 |4|)) + (and (= |2| |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) (|ord[(o . no)]19| obj3 |1|)) + (and (= obj2 |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) (|ord[(o . no)]19| obj0 obj0)) + (and (= obj0 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) #b00100) + (= (|NO[(o . no)]20| obj3 #b00100) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) #b01000) + (= (|NO[(o . no)]20| obj1 #b01000) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) #b00100) + (= (|NO[(o . no)]20| obj1 #b00100) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) #b00101) + (= (|NO[(o . no)]20| obj1 #b00101) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) (|ord[(o . no)]19| obj2 obj3)) + (and (= |3| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) (|ord[(o . no)]19| obj0 |4|)) + (and (= |2| |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) #b00011) + (= (|NO[(o . no)]20| obj0 #b00011) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) (|ord[(o . no)]19| obj0 obj2)) + (and (= |1| obj2)))) +(assert (=> (no obj2 |1|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj2 |1|)) + (bvsle (|ord[(o . no)]19| obj2 |1|) (|#[(o . no)]17| obj2))))) +(assert (= (|SUM_RECURSIVE[(Max . no)]2| #b00001) + (ite (bvsle #b00001 |#[(Max . no)]1|) + (bvadd (|SUM_RECURSIVE[(Max . no)]2| #b00010) + (|NO[(Max . no)]4| #b00001)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) (|ord[(o . no)]19| obj0 obj2)) + (and (= obj3 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) (|ord[(o . no)]19| obj2 |3|)) + (and (= obj2 |3|)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) #b00010) + (= (|NO[(Max . no)]4| #b00010) (toInt obj1)))) +(assert (=> (no obj1 obj1) + (and (bvsle #b00001 (|ord[(o . no)]19| obj1 obj1)) + (bvsle (|ord[(o . no)]19| obj1 obj1) (|#[(o . no)]17| obj1))))) +(assert (=> (= (|ord[(Max . no)]3| obj3) #b00010) + (= (|NO[(Max . no)]4| #b00010) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) (|ord[(o . no)]19| obj1 obj0)) + (and (= obj3 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) (|ord[(o . no)]19| obj2 obj2)) + (and (= |1| obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) #b00100) + (= (|NO[(o . no)]20| obj2 #b00100) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) (|ord[(o . no)]19| obj0 obj2)) + (and (= |3| obj2)))) +(assert (=> (= (|ord[(Max . no)]3| obj3) #b00100) + (= (|NO[(Max . no)]4| #b00100) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) #b00011) + (= (|NO[(o . no)]20| obj3 #b00011) (toInt obj2)))) +(assert (=> (no obj0 obj2) + (and (bvsle #b00001 (|ord[(o . no)]19| obj0 obj2)) + (bvsle (|ord[(o . no)]19| obj0 obj2) (|#[(o . no)]17| obj0))))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj2 #b00010) + (ite (bvsle #b00010 (|#[(o . no)]17| obj2)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj2 #b00011) + (|NO[(o . no)]20| obj2 #b00010)) + #b00000))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj2 #b00110) + (ite (bvsle #b00110 (|#[(o . no)]17| obj2)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj2 #b00111) + (|NO[(o . no)]20| obj2 #b00110)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) #b01000) + (= (|NO[(o . no)]20| obj2 #b01000) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) (|ord[(o . no)]19| obj3 |1|)) + (and (= |1| |1|)))) +(assert (=> (= (|ord[(Max . no)]3| |3|) (|ord[(Max . no)]3| obj3)) (and (= |3| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) (|ord[(o . no)]19| obj1 obj3)) + (and (= |2| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) #b00001) + (= (|NO[(o . no)]20| obj0 #b00001) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) #b00111) + (= (|NO[(o . no)]20| obj3 #b00111) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) (|ord[(o . no)]19| obj0 |2|)) + (and (= |2| |2|)))) +(assert (let ((a!1 (exists ((x!28 univ)) + (! (and (= (|ord[(o . no)]19| obj2 x!28) #b00100) (no obj2 x!28)) + :qid q!49)))) + (=> (and (bvsle #b00001 #b00100) (bvsle #b00100 (|#[(o . no)]17| obj2))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) (|ord[(o . no)]19| obj2 |2|)) + (and (= obj0 |2|)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) (|ord[(Max . no)]3| obj2)) (and (= obj1 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) (|ord[(o . no)]19| obj1 obj3)) + (and (= obj0 obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) #b01000) + (= (|NO[(o . no)]20| obj0 #b01000) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) #b00100) + (= (|NO[(o . no)]20| obj0 #b00100) (toInt obj0)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) #b00010) + (= (|NO[(Max . no)]4| #b00010) (toInt obj0)))) +(assert (Ints |4|)) +(assert (= (toInt |2|) #b00010)) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) (|ord[(o . no)]19| obj3 |4|)) + (and (= |3| |4|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj3 #b00001) + (ite (bvsle #b00001 (|#[(o . no)]17| obj3)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj3 #b00010) + (|NO[(o . no)]20| obj3 #b00001)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) #b00110) + (= (|NO[(o . no)]20| obj1 #b00110) (toInt obj0)))) +(assert (=> (= (|ord[(Max . no)]3| |2|) #b00111) + (= (|NO[(Max . no)]4| #b00111) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) (|ord[(o . no)]19| obj1 |2|)) + (and (= obj2 |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) #b01000) + (= (|NO[(o . no)]20| obj2 #b01000) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) #b00010) + (= (|NO[(o . no)]20| obj0 #b00010) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) #b00100) + (= (|NO[(o . no)]20| obj0 #b00100) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) (|ord[(o . no)]19| obj1 obj2)) + (and (= obj0 obj2)))) +(assert (not (Ints obj1))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj3 #b01000) + (ite (bvsle #b01000 (|#[(o . no)]17| obj3)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj3 #b01001) + (|NO[(o . no)]20| obj3 #b01000)) + #b00000))) +(assert (= (|SUM[(o . no)]16| obj2) (|SUM_RECURSIVE[(o . no)]18| obj2 #b00001))) +(assert (=> (= (|ord[(Max . no)]3| obj3) (|ord[(Max . no)]3| |2|)) (and (= obj3 |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) (|ord[(o . no)]19| obj2 obj0)) + (and (= obj2 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) #b01000) + (= (|NO[(o . no)]20| obj3 #b01000) (toInt |4|)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) #b00100) + (= (|NO[(Max . no)]4| #b00100) (toInt |4|)))) +(assert (=> (= (|#[(o . no)]17| obj1) #b00000) + (and (not (no obj1 |1|)) + (not (no obj1 |2|)) + (not (no obj1 obj2)) + (not (no obj1 obj1)) + (not (no obj1 obj0)) + (not (no obj1 obj3)) + (not (no obj1 |3|)) + (not (no obj1 |4|))))) +(assert (=> (not (exists ((x!21 univ)) (! (no obj1 x!21) :skolemid s!10 :qid q!18))) + (= (|#[(o . no)]17| obj1) #b00000))) +(assert (=> (= (|ord[(Max . no)]3| obj0) (|ord[(Max . no)]3| |2|)) (and (= obj0 |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) #b00010) + (= (|NO[(o . no)]20| obj2 #b00010) (toInt |3|)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) (|ord[(Max . no)]3| obj2)) (and (= obj0 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) (|ord[(o . no)]19| obj2 obj0)) + (and (= |2| obj0)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) (|ord[(Max . no)]3| |4|)) (and (= |4| |4|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj0 #b00100) + (ite (bvsle #b00100 (|#[(o . no)]17| obj0)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj0 #b00101) + (|NO[(o . no)]20| obj0 #b00100)) + #b00000))) +(assert (=> (= (|ord[(Max . no)]3| |1|) (|ord[(Max . no)]3| |3|)) (and (= |1| |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) #b01000) + (= (|NO[(o . no)]20| obj1 #b01000) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) (|ord[(o . no)]19| obj0 obj1)) + (and (= |4| obj1)))) +(assert (=> (= (|ord[(Max . no)]3| |1|) #b00001) + (= (|NO[(Max . no)]4| #b00001) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) (|ord[(o . no)]19| obj3 obj0)) + (and (= |1| obj0)))) +(assert (let ((a!1 (exists ((x!26 univ)) + (! (and (= (|ord[(o . no)]19| obj0 x!26) #b00010) (no obj0 x!26)) + :qid q!38)))) + (=> (and (bvsle #b00001 #b00010) (bvsle #b00010 (|#[(o . no)]17| obj0))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) (|ord[(o . no)]19| obj2 obj0)) + (and (= obj0 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) #b00111) + (= (|NO[(o . no)]20| obj2 #b00111) (toInt obj1)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) #b00100) + (= (|NO[(Max . no)]4| #b00100) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) #b00110) + (= (|NO[(o . no)]20| obj1 #b00110) (toInt |1|)))) +(assert (let ((a!1 (exists ((x!24 univ)) + (! (and (= (|ord[(o . no)]19| obj3 x!24) #b01000) (no obj3 x!24)) + :qid q!35)))) + (=> (and (bvsle #b00001 #b01000) (bvsle #b01000 (|#[(o . no)]17| obj3))) a!1))) +(assert (let ((a!1 (exists ((x!28 univ)) + (! (and (= (|ord[(o . no)]19| obj2 x!28) #b00010) (no obj2 x!28)) + :qid q!47)))) + (=> (and (bvsle #b00001 #b00010) (bvsle #b00010 (|#[(o . no)]17| obj2))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) (|ord[(o . no)]19| obj1 |4|)) + (and (= |2| |4|)))) +(assert (let ((a!1 (exists ((x!28 univ)) + (! (and (= (|ord[(o . no)]19| obj2 x!28) #b00111) (no obj2 x!28)) + :qid q!52)))) + (=> (and (bvsle #b00001 #b00111) (bvsle #b00111 (|#[(o . no)]17| obj2))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) #b00110) + (= (|NO[(o . no)]20| obj0 #b00110) (toInt |3|)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) (|ord[(Max . no)]3| |2|)) (and (= obj2 |2|)))) +(assert (let ((a!1 (exists ((x!24 univ)) + (! (and (= (|ord[(o . no)]19| obj3 x!24) #b00011) (no obj3 x!24)) + :qid q!30)))) + (=> (and (bvsle #b00001 #b00011) (bvsle #b00011 (|#[(o . no)]17| obj3))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) (|ord[(o . no)]19| obj0 |1|)) + (and (= obj2 |1|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj1 #b00110) + (ite (bvsle #b00110 (|#[(o . no)]17| obj1)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj1 #b00111) + (|NO[(o . no)]20| obj1 #b00110)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) (|ord[(o . no)]19| obj0 |1|)) + (and (= |2| |1|)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) #b00111) + (= (|NO[(Max . no)]4| #b00111) (toInt obj2)))) +(assert (let ((a!1 (exists ((x!26 univ)) + (! (and (= (|ord[(o . no)]19| obj0 x!26) #b01000) (no obj0 x!26)) + :qid q!44)))) + (=> (and (bvsle #b00001 #b01000) (bvsle #b01000 (|#[(o . no)]17| obj0))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) (|ord[(o . no)]19| obj2 obj2)) + (and (= obj3 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) (|ord[(o . no)]19| obj2 obj2)) + (and (= |2| obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) (|ord[(o . no)]19| obj3 obj2)) + (and (= obj2 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) #b01000) + (= (|NO[(o . no)]20| obj0 #b01000) (toInt obj2)))) +(assert (=> (= (|ord[(Max . no)]3| |3|) (|ord[(Max . no)]3| |4|)) (and (= |3| |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) (|ord[(o . no)]19| obj0 |4|)) + (and (= |1| |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) (|ord[(o . no)]19| obj2 |3|)) + (and (= |1| |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) #b00111) + (= (|NO[(o . no)]20| obj1 #b00111) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) #b00010) + (= (|NO[(o . no)]20| obj1 #b00010) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) #b00010) + (= (|NO[(o . no)]20| obj3 #b00010) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) #b00110) + (= (|NO[(o . no)]20| obj0 #b00110) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) #b00001) + (= (|NO[(o . no)]20| obj1 #b00001) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) #b00100) + (= (|NO[(o . no)]20| obj0 #b00100) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) (|ord[(o . no)]19| obj2 |3|)) + (and (= obj1 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) (|ord[(o . no)]19| obj1 obj1)) + (and (= obj2 obj1)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) (|ord[(Max . no)]3| obj3)) (and (= |4| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) #b00101) + (= (|NO[(o . no)]20| obj2 #b00101) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) (|ord[(o . no)]19| obj2 |2|)) + (and (= obj2 |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) #b00010) + (= (|NO[(o . no)]20| obj2 #b00010) (toInt |1|)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) (|ord[(Max . no)]3| obj0)) (and (= |4| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) #b00011) + (= (|NO[(o . no)]20| obj0 #b00011) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) (|ord[(o . no)]19| obj2 |4|)) + (and (= |4| |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) (|ord[(o . no)]19| obj1 obj0)) + (and (= |2| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) #b00011) + (= (|NO[(o . no)]20| obj2 #b00011) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) #b00001) + (= (|NO[(o . no)]20| obj2 #b00001) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) #b00011) + (= (|NO[(o . no)]20| obj2 #b00011) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) (|ord[(o . no)]19| obj2 obj3)) + (and (= |1| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) #b00001) + (= (|NO[(o . no)]20| obj2 #b00001) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) #b01000) + (= (|NO[(o . no)]20| obj1 #b01000) (toInt |3|)))) +(assert (=> (= (|ord[(Max . no)]3| obj3) #b00001) + (= (|NO[(Max . no)]4| #b00001) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) (|ord[(o . no)]19| obj1 |3|)) + (and (= |2| |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) (|ord[(o . no)]19| obj1 obj0)) + (and (= |1| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) (|ord[(o . no)]19| obj3 obj1)) + (and (= obj2 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) (|ord[(o . no)]19| obj1 |2|)) + (and (= |1| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) #b00100) + (= (|NO[(o . no)]20| obj1 #b00100) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) (|ord[(o . no)]19| obj2 |1|)) + (and (= |1| |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) (|ord[(o . no)]19| obj1 obj3)) + (and (= |1| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) #b01000) + (= (|NO[(o . no)]20| obj3 #b01000) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) #b00001) + (= (|NO[(o . no)]20| obj3 #b00001) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) #b00110) + (= (|NO[(o . no)]20| obj2 #b00110) (toInt obj0)))) +(assert (let ((a!1 (exists ((x!7 univ)) + (! (and (= (|ord[(Max . no)]3| x!7) #b00001) + (exists ((x!8 univ)) + (! (and (Max x!8) (no x!8 x!7)) :skolemid s!2 :qid q!2))) + :qid q!3)))) + (=> (and (bvsle #b00001 #b00001) (bvsle #b00001 |#[(Max . no)]1|)) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) (|ord[(o . no)]19| obj3 obj1)) + (and (= obj3 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) #b00011) + (= (|NO[(o . no)]20| obj0 #b00011) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) #b00100) + (= (|NO[(o . no)]20| obj3 #b00100) (toInt |4|)))) +(assert (=> (= (|ord[(Max . no)]3| obj3) (|ord[(Max . no)]3| |3|)) (and (= obj3 |3|)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) #b00011) + (= (|NO[(Max . no)]4| #b00011) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) (|ord[(o . no)]19| obj0 |2|)) + (and (= obj0 |2|)))) +(assert (not (Ints obj2))) +(assert (let ((a!1 (exists ((x!7 univ)) + (! (and (= (|ord[(Max . no)]3| x!7) #b01000) + (exists ((x!15 univ)) + (! (and (Max x!15) (no x!15 x!7)) + :skolemid s!9 + :qid q!16))) + :qid q!17)))) + (=> (and (bvsle #b00001 #b01000) (bvsle #b01000 |#[(Max . no)]1|)) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) (|ord[(o . no)]19| obj3 |2|)) + (and (= |2| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) #b00111) + (= (|NO[(o . no)]20| obj0 #b00111) (toInt |3|)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) (|ord[(Max . no)]3| |4|)) (and (= obj0 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) (|ord[(o . no)]19| obj3 obj1)) + (and (= |2| obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) #b00010) + (= (|NO[(o . no)]20| obj3 #b00010) (toInt obj1)))) +(assert (=> (no obj0 |3|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj0 |3|)) + (bvsle (|ord[(o . no)]19| obj0 |3|) (|#[(o . no)]17| obj0))))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) (|ord[(o . no)]19| obj0 obj0)) + (and (= obj3 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) (|ord[(o . no)]19| obj1 |3|)) + (and (= obj3 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) (|ord[(o . no)]19| obj0 |1|)) + (and (= |1| |1|)))) +(assert (=> (no obj0 |4|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj0 |4|)) + (bvsle (|ord[(o . no)]19| obj0 |4|) (|#[(o . no)]17| obj0))))) +(assert (=> (= (|ord[(Max . no)]3| obj1) #b01000) + (= (|NO[(Max . no)]4| #b01000) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) #b00001) + (= (|NO[(o . no)]20| obj3 #b00001) (toInt |2|)))) +(assert (let ((a!1 (not (or (and (Max obj1) (no obj1 obj3)) + (and (Max obj3) (no obj3 obj3)) + (and (Max obj2) (no obj2 obj3)) + (and (Max obj0) (no obj0 obj3))))) + (a!2 (not (or (and (Max obj2) (no obj2 |1|)) + (and (Max obj0) (no obj0 |1|)) + (and (Max obj3) (no obj3 |1|)) + (and (Max obj1) (no obj1 |1|))))) + (a!3 (not (or (and (Max obj3) (no obj3 |4|)) + (and (Max obj0) (no obj0 |4|)) + (and (Max obj2) (no obj2 |4|)) + (and (Max obj1) (no obj1 |4|))))) + (a!4 (not (or (and (Max obj1) (no obj1 |2|)) + (and (Max obj0) (no obj0 |2|)) + (and (Max obj3) (no obj3 |2|)) + (and (Max obj2) (no obj2 |2|))))) + (a!5 (not (or (and (Max obj0) (no obj0 |3|)) + (and (Max obj3) (no obj3 |3|)) + (and (Max obj1) (no obj1 |3|)) + (and (Max obj2) (no obj2 |3|))))) + (a!6 (not (or (and (Max obj1) (no obj1 obj0)) + (and (Max obj0) (no obj0 obj0)) + (and (Max obj3) (no obj3 obj0)) + (and (Max obj2) (no obj2 obj0))))) + (a!7 (not (or (and (Max obj1) (no obj1 obj1)) + (and (Max obj3) (no obj3 obj1)) + (and (Max obj2) (no obj2 obj1)) + (and (Max obj0) (no obj0 obj1))))) + (a!8 (not (or (and (Max obj1) (no obj1 obj2)) + (and (Max obj0) (no obj0 obj2)) + (and (Max obj3) (no obj3 obj2)) + (and (Max obj2) (no obj2 obj2)))))) + (=> (= |#[(Max . no)]1| #b00000) (and a!1 a!2 a!3 a!4 a!5 a!6 a!7 a!8)))) +(assert (let ((a!1 (exists ((x!5 univ)) + (! (exists ((x!6 univ)) + (! (and (Max x!6) (no x!6 x!5)) :skolemid s!0 :qid q!0)) + :skolemid s!1 + :qid q!1)))) + (=> (not a!1) (= |#[(Max . no)]1| #b00000)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) (|ord[(Max . no)]3| obj2)) (and (= |4| obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) (|ord[(o . no)]19| obj1 |4|)) + (and (= obj3 |4|)))) +(assert (=> (= (|#[(o . no)]17| obj3) #b00000) + (and (not (no obj3 |1|)) + (not (no obj3 obj1)) + (not (no obj3 obj0)) + (not (no obj3 obj2)) + (not (no obj3 |2|)) + (not (no obj3 |4|)) + (not (no obj3 obj3)) + (not (no obj3 |3|))))) +(assert (=> (not (exists ((x!23 univ)) (! (no obj3 x!23) :skolemid s!11 :qid q!27))) + (= (|#[(o . no)]17| obj3) #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) (|ord[(o . no)]19| obj3 |3|)) + (and (= |4| |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) #b00011) + (= (|NO[(o . no)]20| obj0 #b00011) (toInt |3|)))) +(assert (=> (no obj1 |2|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj1 |2|)) + (bvsle (|ord[(o . no)]19| obj1 |2|) (|#[(o . no)]17| obj1))))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) #b00111) + (= (|NO[(o . no)]20| obj3 #b00111) (toInt obj1)))) +(assert (=> (= (|ord[(Max . no)]3| |2|) #b01000) + (= (|NO[(Max . no)]4| #b01000) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) #b00001) + (= (|NO[(o . no)]20| obj1 #b00001) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) #b00001) + (= (|NO[(o . no)]20| obj0 #b00001) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) (|ord[(o . no)]19| obj2 |1|)) + (and (= |4| |1|)))) +(assert (let ((a!1 (exists ((x!24 univ)) + (! (and (= (|ord[(o . no)]19| obj3 x!24) #b00110) (no obj3 x!24)) + :qid q!33)))) + (=> (and (bvsle #b00001 #b00110) (bvsle #b00110 (|#[(o . no)]17| obj3))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) (|ord[(o . no)]19| obj2 obj1)) + (and (= |3| obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) (|ord[(o . no)]19| obj0 |4|)) + (and (= obj3 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) #b00011) + (= (|NO[(o . no)]20| obj2 #b00011) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) (|ord[(o . no)]19| obj2 |3|)) + (and (= |3| |3|)))) +(assert (=> (= (|ord[(Max . no)]3| |2|) (|ord[(Max . no)]3| obj2)) (and (= |2| obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) (|ord[(o . no)]19| obj0 |1|)) + (and (= |4| |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) (|ord[(o . no)]19| obj1 |1|)) + (and (= |3| |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) (|ord[(o . no)]19| obj3 |2|)) + (and (= obj2 |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) (|ord[(o . no)]19| obj0 |4|)) + (and (= |3| |4|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj1 #b00100) + (ite (bvsle #b00100 (|#[(o . no)]17| obj1)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj1 #b00101) + (|NO[(o . no)]20| obj1 #b00100)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) (|ord[(o . no)]19| obj0 obj0)) + (and (= obj2 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) (|ord[(o . no)]19| obj1 |2|)) + (and (= |4| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) #b00111) + (= (|NO[(o . no)]20| obj3 #b00111) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) #b00001) + (= (|NO[(o . no)]20| obj2 #b00001) (toInt obj2)))) +(assert (=> (= (|ord[(Max . no)]3| obj3) (|ord[(Max . no)]3| obj3)) (and (= obj3 obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) #b00011) + (= (|NO[(o . no)]20| obj2 #b00011) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) (|ord[(o . no)]19| obj3 |1|)) + (and (= |2| |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) (|ord[(o . no)]19| obj0 obj0)) + (and (= |3| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) (|ord[(o . no)]19| obj0 obj2)) + (and (= |2| obj2)))) +(assert (Ints |1|)) +(assert (not (Ints obj3))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) (|ord[(o . no)]19| obj2 |2|)) + (and (= |4| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) (|ord[(o . no)]19| obj2 obj2)) + (and (= |4| obj2)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj1 #b00011) + (ite (bvsle #b00011 (|#[(o . no)]17| obj1)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj1 #b00100) + (|NO[(o . no)]20| obj1 #b00011)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) #b00100) + (= (|NO[(o . no)]20| obj2 #b00100) (toInt |2|)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) (|ord[(Max . no)]3| obj2)) (and (= obj2 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) #b00010) + (= (|NO[(o . no)]20| obj0 #b00010) (toInt obj0)))) +(assert (let ((a!1 (exists ((x!26 univ)) + (! (and (= (|ord[(o . no)]19| obj0 x!26) #b00100) (no obj0 x!26)) + :qid q!40)))) + (=> (and (bvsle #b00001 #b00100) (bvsle #b00100 (|#[(o . no)]17| obj0))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) (|ord[(o . no)]19| obj0 |2|)) + (and (= |4| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) #b00111) + (= (|NO[(o . no)]20| obj2 #b00111) (toInt obj0)))) +(assert (=> (= (|ord[(Max . no)]3| |3|) #b01000) + (= (|NO[(Max . no)]4| #b01000) (toInt |3|)))) +(assert (=> (no obj3 |4|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj3 |4|)) + (bvsle (|ord[(o . no)]19| obj3 |4|) (|#[(o . no)]17| obj3))))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) #b00010) + (= (|NO[(o . no)]20| obj2 #b00010) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) (|ord[(o . no)]19| obj0 obj1)) + (and (= |2| obj1)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj0 #b00110) + (ite (bvsle #b00110 (|#[(o . no)]17| obj0)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj0 #b00111) + (|NO[(o . no)]20| obj0 #b00110)) + #b00000))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj2 #b00001) + (ite (bvsle #b00001 (|#[(o . no)]17| obj2)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj2 #b00010) + (|NO[(o . no)]20| obj2 #b00001)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) (|ord[(o . no)]19| obj1 obj2)) + (and (= |4| obj2)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) #b00010) + (= (|NO[(Max . no)]4| #b00010) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) #b00110) + (= (|NO[(o . no)]20| obj0 #b00110) (toInt obj2)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) (|ord[(Max . no)]3| obj0)) (and (= obj0 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) #b00010) + (= (|NO[(o . no)]20| obj3 #b00010) (toInt obj0)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj2 #b00101) + (ite (bvsle #b00101 (|#[(o . no)]17| obj2)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj2 #b00110) + (|NO[(o . no)]20| obj2 #b00101)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) #b00001) + (= (|NO[(o . no)]20| obj3 #b00001) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) (|ord[(o . no)]19| obj0 obj1)) + (and (= obj2 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) #b00110) + (= (|NO[(o . no)]20| obj1 #b00110) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) #b00101) + (= (|NO[(o . no)]20| obj2 #b00101) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) #b00011) + (= (|NO[(o . no)]20| obj1 #b00011) (toInt obj0)))) +(assert (=> (no obj0 obj0) + (and (bvsle #b00001 (|ord[(o . no)]19| obj0 obj0)) + (bvsle (|ord[(o . no)]19| obj0 obj0) (|#[(o . no)]17| obj0))))) +(assert (=> (= (|ord[(Max . no)]3| |1|) #b00100) + (= (|NO[(Max . no)]4| #b00100) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) #b00101) + (= (|NO[(o . no)]20| obj1 #b00101) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) (|ord[(o . no)]19| obj0 |3|)) + (and (= obj3 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) #b00101) + (= (|NO[(o . no)]20| obj1 #b00101) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) #b00010) + (= (|NO[(o . no)]20| obj3 #b00010) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) #b01000) + (= (|NO[(o . no)]20| obj0 #b01000) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) (|ord[(o . no)]19| obj2 |2|)) + (and (= |2| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) (|ord[(o . no)]19| obj1 obj0)) + (and (= obj1 obj0)))) +(assert (=> (= (|ord[(Max . no)]3| |3|) #b00001) + (= (|NO[(Max . no)]4| #b00001) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) (|ord[(o . no)]19| obj0 |2|)) + (and (= obj3 |2|)))) +(assert (let ((a!1 (exists ((x!28 univ)) + (! (and (= (|ord[(o . no)]19| obj2 x!28) #b00001) (no obj2 x!28)) + :qid q!46)))) + (=> (and (bvsle #b00001 #b00001) (bvsle #b00001 (|#[(o . no)]17| obj2))) a!1))) +(assert (=> (= (|ord[(Max . no)]3| |3|) #b00011) + (= (|NO[(Max . no)]4| #b00011) (toInt |3|)))) +(assert (let ((a!1 (exists ((x!7 univ)) + (! (and (= (|ord[(Max . no)]3| x!7) #b00101) + (exists ((x!12 univ)) + (! (and (Max x!12) (no x!12 x!7)) + :skolemid s!6 + :qid q!10))) + :qid q!11)))) + (=> (and (bvsle #b00001 #b00101) (bvsle #b00101 |#[(Max . no)]1|)) a!1))) +(assert (=> (= (|ord[(Max . no)]3| |3|) #b00010) + (= (|NO[(Max . no)]4| #b00010) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) (|ord[(o . no)]19| obj0 obj3)) + (and (= |1| obj3)))) +(assert (let ((a!1 (exists ((x!22 univ)) + (! (and (= (|ord[(o . no)]19| obj1 x!22) #b00111) (no obj1 x!22)) + :qid q!25)))) + (=> (and (bvsle #b00001 #b00111) (bvsle #b00111 (|#[(o . no)]17| obj1))) a!1))) +(assert (= (toInt |1|) #b00001)) +(assert (=> (= (|ord[(Max . no)]3| |3|) #b00110) + (= (|NO[(Max . no)]4| #b00110) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) (|ord[(o . no)]19| obj2 obj0)) + (and (= |3| obj0)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) (|ord[(Max . no)]3| |1|)) (and (= |4| |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) #b01000) + (= (|NO[(o . no)]20| obj3 #b01000) (toInt obj1)))) +(assert (= (|SUM[(o . no)]16| obj1) (|SUM_RECURSIVE[(o . no)]18| obj1 #b00001))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj1 #b00010) + (ite (bvsle #b00010 (|#[(o . no)]17| obj1)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj1 #b00011) + (|NO[(o . no)]20| obj1 #b00010)) + #b00000))) +(assert (=> (= (|ord[(Max . no)]3| |2|) #b00100) + (= (|NO[(Max . no)]4| #b00100) (toInt |2|)))) +(assert (let ((a!1 (exists ((x!24 univ)) + (! (and (= (|ord[(o . no)]19| obj3 x!24) #b00111) (no obj3 x!24)) + :qid q!34)))) + (=> (and (bvsle #b00001 #b00111) (bvsle #b00111 (|#[(o . no)]17| obj3))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) (|ord[(o . no)]19| obj0 obj0)) + (and (= |4| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) #b00001) + (= (|NO[(o . no)]20| obj0 #b00001) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) (|ord[(o . no)]19| obj0 obj3)) + (and (= obj0 obj3)))) +(assert (= (|SUM[(o . no)]16| obj0) (|SUM_RECURSIVE[(o . no)]18| obj0 #b00001))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) (|ord[(o . no)]19| obj3 obj0)) + (and (= |2| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) (|ord[(o . no)]19| obj2 |3|)) + (and (= |4| |3|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj2 #b00011) + (ite (bvsle #b00011 (|#[(o . no)]17| obj2)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj2 #b00100) + (|NO[(o . no)]20| obj2 #b00011)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) #b00001) + (= (|NO[(o . no)]20| obj1 #b00001) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) (|ord[(o . no)]19| obj3 |1|)) + (and (= |3| |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) (|ord[(o . no)]19| obj1 |4|)) + (and (= |1| |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) #b00101) + (= (|NO[(o . no)]20| obj2 #b00101) (toInt obj2)))) +(assert (=> (= (|ord[(Max . no)]3| |3|) (|ord[(Max . no)]3| |3|)) (and (= |3| |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) #b00001) + (= (|NO[(o . no)]20| obj0 #b00001) (toInt obj1)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) #b00101) + (= (|NO[(Max . no)]4| #b00101) (toInt obj1)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) #b01000) + (= (|NO[(Max . no)]4| #b01000) (toInt obj0)))) +(assert (let ((a!1 (exists ((x!26 univ)) + (! (and (= (|ord[(o . no)]19| obj0 x!26) #b00001) (no obj0 x!26)) + :qid q!37)))) + (=> (and (bvsle #b00001 #b00001) (bvsle #b00001 (|#[(o . no)]17| obj0))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) (|ord[(o . no)]19| obj2 |4|)) + (and (= obj3 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) #b00101) + (= (|NO[(o . no)]20| obj2 #b00101) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) (|ord[(o . no)]19| obj2 obj1)) + (and (= |4| obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) #b00111) + (= (|NO[(o . no)]20| obj0 #b00111) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) #b00011) + (= (|NO[(o . no)]20| obj2 #b00011) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) #b01000) + (= (|NO[(o . no)]20| obj2 #b01000) (toInt |1|)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) #b00011) + (= (|NO[(Max . no)]4| #b00011) (toInt obj0)))) +(assert (=> (= (|ord[(Max . no)]3| |2|) (|ord[(Max . no)]3| |3|)) (and (= |2| |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) (|ord[(o . no)]19| obj0 |2|)) + (and (= obj2 |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) #b00010) + (= (|NO[(o . no)]20| obj0 #b00010) (toInt obj1)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj1 #b01000) + (ite (bvsle #b01000 (|#[(o . no)]17| obj1)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj1 #b01001) + (|NO[(o . no)]20| obj1 #b01000)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) #b00110) + (= (|NO[(o . no)]20| obj3 #b00110) (toInt obj1)))) +(assert (not (Ints obj0))) +(assert (let ((a!1 (exists ((x!24 univ)) + (! (and (= (|ord[(o . no)]19| obj3 x!24) #b00010) (no obj3 x!24)) + :qid q!29)))) + (=> (and (bvsle #b00001 #b00010) (bvsle #b00010 (|#[(o . no)]17| obj3))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) (|ord[(o . no)]19| obj2 |1|)) + (and (= obj0 |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) (|ord[(o . no)]19| obj1 |2|)) + (and (= |3| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) #b00110) + (= (|NO[(o . no)]20| obj0 #b00110) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) (|ord[(o . no)]19| obj0 |1|)) + (and (= |3| |1|)))) +(assert (=> (= (|ord[(Max . no)]3| obj3) #b00110) + (= (|NO[(Max . no)]4| #b00110) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) (|ord[(o . no)]19| obj3 |2|)) + (and (= obj3 |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) (|ord[(o . no)]19| obj1 obj1)) + (and (= obj3 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) (|ord[(o . no)]19| obj2 obj1)) + (and (= obj2 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) #b00101) + (= (|NO[(o . no)]20| obj1 #b00101) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) (|ord[(o . no)]19| obj2 |4|)) + (and (= |1| |4|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj1 #b00001) + (ite (bvsle #b00001 (|#[(o . no)]17| obj1)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj1 #b00010) + (|NO[(o . no)]20| obj1 #b00001)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) (|ord[(o . no)]19| obj1 |4|)) + (and (= obj0 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) #b00010) + (= (|NO[(o . no)]20| obj0 #b00010) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) (|ord[(o . no)]19| obj2 |2|)) + (and (= obj1 |2|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj2 #b00100) + (ite (bvsle #b00100 (|#[(o . no)]17| obj2)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj2 #b00101) + (|NO[(o . no)]20| obj2 #b00100)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) (|ord[(o . no)]19| obj1 |2|)) + (and (= obj3 |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) #b00100) + (= (|NO[(o . no)]20| obj3 #b00100) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) #b00001) + (= (|NO[(o . no)]20| obj3 #b00001) (toInt obj0)))) +(assert (=> (= (|ord[(Max . no)]3| |2|) (|ord[(Max . no)]3| obj0)) (and (= |2| obj0)))) +(assert (=> (no obj0 obj1) + (and (bvsle #b00001 (|ord[(o . no)]19| obj0 obj1)) + (bvsle (|ord[(o . no)]19| obj0 obj1) (|#[(o . no)]17| obj0))))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) (|ord[(o . no)]19| obj3 obj2)) + (and (= |4| obj2)))) +(assert (= (|SUM_RECURSIVE[(Max . no)]2| #b00110) + (ite (bvsle #b00110 |#[(Max . no)]1|) + (bvadd (|SUM_RECURSIVE[(Max . no)]2| #b00111) + (|NO[(Max . no)]4| #b00110)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) (|ord[(o . no)]19| obj2 |3|)) + (and (= obj3 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) #b00101) + (= (|NO[(o . no)]20| obj2 #b00101) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) #b00010) + (= (|NO[(o . no)]20| obj3 #b00010) (toInt |2|)))) +(assert (= (|SUM_RECURSIVE[(Max . no)]2| #b00100) + (ite (bvsle #b00100 |#[(Max . no)]1|) + (bvadd (|SUM_RECURSIVE[(Max . no)]2| #b00101) + (|NO[(Max . no)]4| #b00100)) + #b00000))) +(assert (= (|SUM_RECURSIVE[(Max . no)]2| #b00010) + (ite (bvsle #b00010 |#[(Max . no)]1|) + (bvadd (|SUM_RECURSIVE[(Max . no)]2| #b00011) + (|NO[(Max . no)]4| #b00010)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) (|ord[(o . no)]19| obj3 obj0)) + (and (= obj3 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) (|ord[(o . no)]19| obj0 obj0)) + (and (= |1| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) (|ord[(o . no)]19| obj2 obj0)) + (and (= |1| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) #b00111) + (= (|NO[(o . no)]20| obj0 #b00111) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) (|ord[(o . no)]19| obj2 |2|)) + (and (= |3| |2|)))) +(assert (=> (no obj1 obj3) + (and (bvsle #b00001 (|ord[(o . no)]19| obj1 obj3)) + (bvsle (|ord[(o . no)]19| obj1 obj3) (|#[(o . no)]17| obj1))))) +(assert (= |SUM[(Max . no)]0| (|SUM_RECURSIVE[(Max . no)]2| #b00001))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) (|ord[(o . no)]19| obj2 obj3)) + (and (= obj3 obj3)))) +(assert (let ((a!1 (exists ((x!22 univ)) + (! (and (= (|ord[(o . no)]19| obj1 x!22) #b00010) (no obj1 x!22)) + :qid q!20)))) + (=> (and (bvsle #b00001 #b00010) (bvsle #b00010 (|#[(o . no)]17| obj1))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) #b00010) + (= (|NO[(o . no)]20| obj0 #b00010) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) #b00111) + (= (|NO[(o . no)]20| obj2 #b00111) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) #b00100) + (= (|NO[(o . no)]20| obj0 #b00100) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) (|ord[(o . no)]19| obj2 obj1)) + (and (= obj1 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) #b00110) + (= (|NO[(o . no)]20| obj3 #b00110) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) (|ord[(o . no)]19| obj3 |4|)) + (and (= |1| |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) (|ord[(o . no)]19| obj2 obj1)) + (and (= |1| obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) #b00100) + (= (|NO[(o . no)]20| obj1 #b00100) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) #b00100) + (= (|NO[(o . no)]20| obj1 #b00100) (toInt obj1)))) +(assert (= (toInt obj2) #b00000)) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) #b00001) + (= (|NO[(o . no)]20| obj0 #b00001) (toInt obj2)))) +(assert (=> (no obj2 |3|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj2 |3|)) + (bvsle (|ord[(o . no)]19| obj2 |3|) (|#[(o . no)]17| obj2))))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) (|ord[(o . no)]19| obj1 |1|)) + (and (= obj2 |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) #b00100) + (= (|NO[(o . no)]20| obj1 #b00100) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) (|ord[(o . no)]19| obj3 |4|)) + (and (= |4| |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) (|ord[(o . no)]19| obj3 obj2)) + (and (= obj0 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) #b00010) + (= (|NO[(o . no)]20| obj2 #b00010) (toInt obj2)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) #b00111) + (= (|NO[(Max . no)]4| #b00111) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) #b00010) + (= (|NO[(o . no)]20| obj1 #b00010) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) (|ord[(o . no)]19| obj3 obj1)) + (and (= |3| obj1)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) #b00001) + (= (|NO[(Max . no)]4| #b00001) (toInt obj0)))) +(assert (=> (or (and (Max obj0) (no obj0 |3|)) + (and (Max obj3) (no obj3 |3|)) + (and (Max obj1) (no obj1 |3|)) + (and (Max obj2) (no obj2 |3|))) + (and (bvsle #b00001 (|ord[(Max . no)]3| |3|)) + (bvsle (|ord[(Max . no)]3| |3|) |#[(Max . no)]1|)))) +(assert (=> (= (|#[(o . no)]17| obj0) #b00000) + (and (not (no obj0 |1|)) + (not (no obj0 obj1)) + (not (no obj0 |4|)) + (not (no obj0 |2|)) + (not (no obj0 obj0)) + (not (no obj0 obj3)) + (not (no obj0 |3|)) + (not (no obj0 obj2))))) +(assert (=> (not (exists ((x!25 univ)) (! (no obj0 x!25) :skolemid s!12 :qid q!36))) + (= (|#[(o . no)]17| obj0) #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) (|ord[(o . no)]19| obj0 |4|)) + (and (= obj0 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) #b00110) + (= (|NO[(o . no)]20| obj2 #b00110) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) #b00010) + (= (|NO[(o . no)]20| obj1 #b00010) (toInt obj1)))) +(assert (=> (= (|ord[(Max . no)]3| |3|) (|ord[(Max . no)]3| |1|)) (and (= |3| |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) #b01000) + (= (|NO[(o . no)]20| obj3 #b01000) (toInt |2|)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) #b00001) + (= (|NO[(Max . no)]4| #b00001) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) (|ord[(o . no)]19| obj2 obj3)) + (and (= obj0 obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) #b00101) + (= (|NO[(o . no)]20| obj2 #b00101) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) #b00110) + (= (|NO[(o . no)]20| obj2 #b00110) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) (|ord[(o . no)]19| obj0 |2|)) + (and (= |1| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) (|ord[(o . no)]19| obj3 obj3)) + (and (= obj3 obj3)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj0 #b01000) + (ite (bvsle #b01000 (|#[(o . no)]17| obj0)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj0 #b01001) + (|NO[(o . no)]20| obj0 #b01000)) + #b00000))) +(assert (=> (= (|ord[(Max . no)]3| obj2) #b01000) + (= (|NO[(Max . no)]4| #b01000) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) (|ord[(o . no)]19| obj0 |3|)) + (and (= obj1 |3|)))) +(assert (let ((a!1 (exists ((x!28 univ)) + (! (and (= (|ord[(o . no)]19| obj2 x!28) #b00101) (no obj2 x!28)) + :qid q!50)))) + (=> (and (bvsle #b00001 #b00101) (bvsle #b00101 (|#[(o . no)]17| obj2))) a!1))) +(assert (=> (= (|ord[(Max . no)]3| |2|) (|ord[(Max . no)]3| |1|)) (and (= |2| |1|)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) #b00101) + (= (|NO[(Max . no)]4| #b00101) (toInt |4|)))) +(assert (=> (no obj3 obj1) + (and (bvsle #b00001 (|ord[(o . no)]19| obj3 obj1)) + (bvsle (|ord[(o . no)]19| obj3 obj1) (|#[(o . no)]17| obj3))))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) #b00011) + (= (|NO[(o . no)]20| obj1 #b00011) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) #b00001) + (= (|NO[(o . no)]20| obj2 #b00001) (toInt obj1)))) +(assert (=> (= (|ord[(Max . no)]3| |3|) #b00100) + (= (|NO[(Max . no)]4| #b00100) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) #b00111) + (= (|NO[(o . no)]20| obj2 #b00111) (toInt |1|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj3 #b00011) + (ite (bvsle #b00011 (|#[(o . no)]17| obj3)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj3 #b00100) + (|NO[(o . no)]20| obj3 #b00011)) + #b00000))) +(assert (let ((a!1 (exists ((x!28 univ)) + (! (and (= (|ord[(o . no)]19| obj2 x!28) #b00110) (no obj2 x!28)) + :qid q!51)))) + (=> (and (bvsle #b00001 #b00110) (bvsle #b00110 (|#[(o . no)]17| obj2))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) (|ord[(o . no)]19| obj3 |3|)) + (and (= obj2 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) (|ord[(o . no)]19| obj1 |1|)) + (and (= |1| |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) #b00100) + (= (|NO[(o . no)]20| obj2 #b00100) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) (|ord[(o . no)]19| obj0 |4|)) + (and (= obj2 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) #b00110) + (= (|NO[(o . no)]20| obj1 #b00110) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) #b00100) + (= (|NO[(o . no)]20| obj1 #b00100) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) (|ord[(o . no)]19| obj1 |4|)) + (and (= obj1 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) (|ord[(o . no)]19| obj3 |1|)) + (and (= obj1 |1|)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) (|ord[(Max . no)]3| |4|)) (and (= obj2 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) #b00011) + (= (|NO[(o . no)]20| obj1 #b00011) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) #b01000) + (= (|NO[(o . no)]20| obj2 #b01000) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) #b01000) + (= (|NO[(o . no)]20| obj1 #b01000) (toInt |4|)))) +(assert (=> (= (|ord[(Max . no)]3| obj3) (|ord[(Max . no)]3| obj1)) (and (= obj3 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) #b00100) + (= (|NO[(o . no)]20| obj2 #b00100) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) (|ord[(o . no)]19| obj2 |3|)) + (and (= obj0 |3|)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) #b00010) + (= (|NO[(Max . no)]4| #b00010) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) #b00001) + (= (|NO[(o . no)]20| obj1 #b00001) (toInt |3|)))) +(assert (= (toInt obj1) #b00000)) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) (|ord[(o . no)]19| obj0 |3|)) + (and (= obj0 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) (|ord[(o . no)]19| obj3 obj2)) + (and (= |3| obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) (|ord[(o . no)]19| obj0 obj2)) + (and (= obj0 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) (|ord[(o . no)]19| obj2 |4|)) + (and (= |3| |4|)))) +(assert (=> (= (|ord[(Max . no)]3| |2|) #b00101) + (= (|NO[(Max . no)]4| #b00101) (toInt |2|)))) +(assert (=> (= (|ord[(Max . no)]3| |2|) #b00010) + (= (|NO[(Max . no)]4| #b00010) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) (|ord[(o . no)]19| obj1 |1|)) + (and (= obj0 |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) #b00110) + (= (|NO[(o . no)]20| obj3 #b00110) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) #b00100) + (= (|NO[(o . no)]20| obj3 #b00100) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) (|ord[(o . no)]19| obj0 |3|)) + (and (= obj2 |3|)))) +(assert (=> (= (|ord[(Max . no)]3| |2|) #b00001) + (= (|NO[(Max . no)]4| #b00001) (toInt |2|)))) +(assert (let ((a!1 (exists ((x!24 univ)) + (! (and (= (|ord[(o . no)]19| obj3 x!24) #b00001) (no obj3 x!24)) + :qid q!28)))) + (=> (and (bvsle #b00001 #b00001) (bvsle #b00001 (|#[(o . no)]17| obj3))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) #b00100) + (= (|NO[(o . no)]20| obj1 #b00100) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) #b01000) + (= (|NO[(o . no)]20| obj3 #b01000) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) #b01000) + (= (|NO[(o . no)]20| obj2 #b01000) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) #b00010) + (= (|NO[(o . no)]20| obj1 #b00010) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) (|ord[(o . no)]19| obj1 |3|)) + (and (= |3| |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) (|ord[(o . no)]19| obj1 obj3)) + (and (= obj3 obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) (|ord[(o . no)]19| obj0 obj3)) + (and (= |2| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) #b01000) + (= (|NO[(o . no)]20| obj0 #b01000) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) #b00010) + (= (|NO[(o . no)]20| obj1 #b00010) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) #b00010) + (= (|NO[(o . no)]20| obj2 #b00010) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) #b00101) + (= (|NO[(o . no)]20| obj0 #b00101) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) (|ord[(o . no)]19| obj3 obj2)) + (and (= |1| obj2)))) +(assert (=> (= (|ord[(Max . no)]3| |1|) (|ord[(Max . no)]3| obj2)) (and (= |1| obj2)))) +(assert (let ((a!1 (exists ((x!7 univ)) + (! (and (= (|ord[(Max . no)]3| x!7) #b00011) + (exists ((x!10 univ)) + (! (and (Max x!10) (no x!10 x!7)) :skolemid s!4 :qid q!6))) + :qid q!7)))) + (=> (and (bvsle #b00001 #b00011) (bvsle #b00011 |#[(Max . no)]1|)) a!1))) +(assert (=> (= (|ord[(Max . no)]3| obj2) (|ord[(Max . no)]3| obj0)) (and (= obj2 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) #b00011) + (= (|NO[(o . no)]20| obj0 #b00011) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) (|ord[(o . no)]19| obj0 |1|)) + (and (= obj1 |1|)))) +(assert (let ((a!1 (exists ((x!7 univ)) + (! (and (= (|ord[(Max . no)]3| x!7) #b00110) + (exists ((x!13 univ)) + (! (and (Max x!13) (no x!13 x!7)) + :skolemid s!7 + :qid q!12))) + :qid q!13)))) + (=> (and (bvsle #b00001 #b00110) (bvsle #b00110 |#[(Max . no)]1|)) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) (|ord[(o . no)]19| obj1 obj2)) + (and (= |1| obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) (|ord[(o . no)]19| obj1 obj0)) + (and (= obj2 obj0)))) +(assert (Ints |3|)) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) #b00101) + (= (|NO[(o . no)]20| obj0 #b00101) (toInt |2|)))) +(assert (let ((a!1 (exists ((x!26 univ)) + (! (and (= (|ord[(o . no)]19| obj0 x!26) #b00011) (no obj0 x!26)) + :qid q!39)))) + (=> (and (bvsle #b00001 #b00011) (bvsle #b00011 (|#[(o . no)]17| obj0))) a!1))) +(assert (=> (or (and (Max obj2) (no obj2 |1|)) + (and (Max obj0) (no obj0 |1|)) + (and (Max obj3) (no obj3 |1|)) + (and (Max obj1) (no obj1 |1|))) + (and (bvsle #b00001 (|ord[(Max . no)]3| |1|)) + (bvsle (|ord[(Max . no)]3| |1|) |#[(Max . no)]1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) #b00001) + (= (|NO[(o . no)]20| obj2 #b00001) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) #b00101) + (= (|NO[(o . no)]20| obj3 #b00101) (toInt |4|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj2 #b00111) + (ite (bvsle #b00111 (|#[(o . no)]17| obj2)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj2 #b01000) + (|NO[(o . no)]20| obj2 #b00111)) + #b00000))) +(assert (=> (= (|ord[(Max . no)]3| obj3) (|ord[(Max . no)]3| obj0)) (and (= obj3 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) (|ord[(o . no)]19| obj2 obj0)) + (and (= obj1 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) (|ord[(o . no)]19| obj1 obj2)) + (and (= obj2 obj2)))) +(assert (let ((a!1 (exists ((x!26 univ)) + (! (and (= (|ord[(o . no)]19| obj0 x!26) #b00101) (no obj0 x!26)) + :qid q!41)))) + (=> (and (bvsle #b00001 #b00101) (bvsle #b00101 (|#[(o . no)]17| obj0))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) (|ord[(o . no)]19| obj0 |3|)) + (and (= |1| |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) #b00111) + (= (|NO[(o . no)]20| obj1 #b00111) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) (|ord[(o . no)]19| obj0 obj1)) + (and (= obj3 obj1)))) +(assert (=> (= (|ord[(Max . no)]3| |1|) #b00011) + (= (|NO[(Max . no)]4| #b00011) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) (|ord[(o . no)]19| obj1 |4|)) + (and (= |3| |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) #b00101) + (= (|NO[(o . no)]20| obj0 #b00101) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) #b00101) + (= (|NO[(o . no)]20| obj1 #b00101) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) #b00001) + (= (|NO[(o . no)]20| obj0 #b00001) (toInt |1|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj0 #b00001) + (ite (bvsle #b00001 (|#[(o . no)]17| obj0)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj0 #b00010) + (|NO[(o . no)]20| obj0 #b00001)) + #b00000))) +(assert (let ((a!1 (exists ((x!22 univ)) + (! (and (= (|ord[(o . no)]19| obj1 x!22) #b00110) (no obj1 x!22)) + :qid q!24)))) + (=> (and (bvsle #b00001 #b00110) (bvsle #b00110 (|#[(o . no)]17| obj1))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) (|ord[(o . no)]19| obj0 |3|)) + (and (= |4| |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) (|ord[(o . no)]19| obj0 obj3)) + (and (= obj2 obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) (|ord[(o . no)]19| obj0 |1|)) + (and (= obj3 |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) (|ord[(o . no)]19| obj3 |1|)) + (and (= obj0 |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) (|ord[(o . no)]19| obj2 obj3)) + (and (= |4| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) #b00101) + (= (|NO[(o . no)]20| obj3 #b00101) (toInt |1|)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) (|ord[(Max . no)]3| |3|)) (and (= obj1 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) #b00010) + (= (|NO[(o . no)]20| obj0 #b00010) (toInt |3|)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) #b00001) + (= (|NO[(Max . no)]4| #b00001) (toInt obj2)))) +(assert (=> (no obj1 |4|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj1 |4|)) + (bvsle (|ord[(o . no)]19| obj1 |4|) (|#[(o . no)]17| obj1))))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) (|ord[(o . no)]19| obj2 obj2)) + (and (= obj1 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) #b00101) + (= (|NO[(o . no)]20| obj3 #b00101) (toInt obj3)))) +(assert (=> (= (|ord[(Max . no)]3| |1|) #b00101) + (= (|NO[(Max . no)]4| #b00101) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) #b00010) + (= (|NO[(o . no)]20| obj1 #b00010) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) #b00101) + (= (|NO[(o . no)]20| obj3 #b00101) (toInt |2|)))) +(assert (=> (or (and (Max obj3) (no obj3 |4|)) + (and (Max obj0) (no obj0 |4|)) + (and (Max obj2) (no obj2 |4|)) + (and (Max obj1) (no obj1 |4|))) + (and (bvsle #b00001 (|ord[(Max . no)]3| |4|)) + (bvsle (|ord[(Max . no)]3| |4|) |#[(Max . no)]1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) (|ord[(o . no)]19| obj1 |3|)) + (and (= obj0 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) (|ord[(o . no)]19| obj3 |3|)) + (and (= |2| |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) #b01000) + (= (|NO[(o . no)]20| obj2 #b01000) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) (|ord[(o . no)]19| obj1 obj1)) + (and (= |3| obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) (|ord[(o . no)]19| obj1 obj1)) + (and (= obj0 obj1)))) +(assert (=> (no obj1 obj0) + (and (bvsle #b00001 (|ord[(o . no)]19| obj1 obj0)) + (bvsle (|ord[(o . no)]19| obj1 obj0) (|#[(o . no)]17| obj1))))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) #b00111) + (= (|NO[(o . no)]20| obj1 #b00111) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) (|ord[(o . no)]19| obj2 obj3)) + (and (= obj1 obj3)))) +(assert (let ((a!1 (exists ((x!7 univ)) + (! (and (= (|ord[(Max . no)]3| x!7) #b00010) + (exists ((x!9 univ)) + (! (and (Max x!9) (no x!9 x!7)) :skolemid s!3 :qid q!4))) + :qid q!5)))) + (=> (and (bvsle #b00001 #b00010) (bvsle #b00010 |#[(Max . no)]1|)) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) #b00010) + (= (|NO[(o . no)]20| obj1 #b00010) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) (|ord[(o . no)]19| obj0 obj0)) + (and (= |2| obj0)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj3 #b00010) + (ite (bvsle #b00010 (|#[(o . no)]17| obj3)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj3 #b00011) + (|NO[(o . no)]20| obj3 #b00010)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj2) (|ord[(o . no)]19| obj2 obj2)) + (and (= obj2 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) (|ord[(o . no)]19| obj1 obj3)) + (and (= obj2 obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) #b00110) + (= (|NO[(o . no)]20| obj1 #b00110) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) (|ord[(o . no)]19| obj3 obj0)) + (and (= |4| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) (|ord[(o . no)]19| obj1 obj2)) + (and (= |2| obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) #b00100) + (= (|NO[(o . no)]20| obj3 #b00100) (toInt obj1)))) +(assert (=> (no obj2 obj3) + (and (bvsle #b00001 (|ord[(o . no)]19| obj2 obj3)) + (bvsle (|ord[(o . no)]19| obj2 obj3) (|#[(o . no)]17| obj2))))) +(assert (=> (= (|ord[(Max . no)]3| obj0) (|ord[(Max . no)]3| |1|)) (and (= obj0 |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) #b01000) + (= (|NO[(o . no)]20| obj1 #b01000) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) (|ord[(o . no)]19| obj2 obj1)) + (and (= obj3 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) (|ord[(o . no)]19| obj3 obj1)) + (and (= |1| obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) #b00001) + (= (|NO[(o . no)]20| obj1 #b00001) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) #b00011) + (= (|NO[(o . no)]20| obj3 #b00011) (toInt obj0)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj0 #b00010) + (ite (bvsle #b00010 (|#[(o . no)]17| obj0)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj0 #b00011) + (|NO[(o . no)]20| obj0 #b00010)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) (|ord[(o . no)]19| obj3 |2|)) + (and (= obj0 |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) #b00011) + (= (|NO[(o . no)]20| obj3 #b00011) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) (|ord[(o . no)]19| obj2 |4|)) + (and (= obj0 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) #b01000) + (= (|NO[(o . no)]20| obj2 #b01000) (toInt |2|)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) #b00111) + (= (|NO[(Max . no)]4| #b00111) (toInt obj0)))) +(assert (=> (no obj1 |3|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj1 |3|)) + (bvsle (|ord[(o . no)]19| obj1 |3|) (|#[(o . no)]17| obj1))))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) (|ord[(o . no)]19| obj1 |4|)) + (and (= obj2 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) #b01000) + (= (|NO[(o . no)]20| obj1 #b01000) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) #b00011) + (= (|NO[(o . no)]20| obj1 #b00011) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) #b01000) + (= (|NO[(o . no)]20| obj2 #b01000) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) (|ord[(o . no)]19| obj3 |1|)) + (and (= obj3 |1|)))) +(assert (=> (= (|#[(o . no)]17| obj2) #b00000) + (and (not (no obj2 obj2)) + (not (no obj2 obj1)) + (not (no obj2 obj0)) + (not (no obj2 |2|)) + (not (no obj2 |4|)) + (not (no obj2 obj3)) + (not (no obj2 |1|)) + (not (no obj2 |3|))))) +(assert (=> (not (exists ((x!27 univ)) (! (no obj2 x!27) :skolemid s!13 :qid q!45))) + (= (|#[(o . no)]17| obj2) #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) (|ord[(o . no)]19| obj2 obj3)) + (and (= |2| obj3)))) +(assert (=> (= (|ord[(Max . no)]3| |3|) (|ord[(Max . no)]3| obj2)) (and (= |3| obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) (|ord[(o . no)]19| obj3 |2|)) + (and (= obj1 |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) #b01000) + (= (|NO[(o . no)]20| obj0 #b01000) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) #b00101) + (= (|NO[(o . no)]20| obj0 #b00101) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) #b00011) + (= (|NO[(o . no)]20| obj3 #b00011) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) #b01000) + (= (|NO[(o . no)]20| obj1 #b01000) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) (|ord[(o . no)]19| obj3 obj2)) + (and (= |2| obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) #b00110) + (= (|NO[(o . no)]20| obj3 #b00110) (toInt |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) #b00111) + (= (|NO[(o . no)]20| obj3 #b00111) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) #b00110) + (= (|NO[(o . no)]20| obj2 #b00110) (toInt |2|)))) +(assert (let ((a!1 (exists ((x!28 univ)) + (! (and (= (|ord[(o . no)]19| obj2 x!28) #b00011) (no obj2 x!28)) + :qid q!48)))) + (=> (and (bvsle #b00001 #b00011) (bvsle #b00011 (|#[(o . no)]17| obj2))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) (|ord[(o . no)]19| obj1 |2|)) + (and (= obj0 |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) (|ord[(o . no)]19| obj2 obj0)) + (and (= |4| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) (|ord[(o . no)]19| obj3 |2|)) + (and (= |3| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) (|ord[(o . no)]19| obj2 |2|)) + (and (= obj3 |2|)))) +(assert (=> (= (|ord[(Max . no)]3| |1|) #b00111) + (= (|NO[(Max . no)]4| #b00111) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) #b00110) + (= (|NO[(o . no)]20| obj1 #b00110) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) (|ord[(o . no)]19| obj3 |4|)) + (and (= obj3 |4|)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) #b00101) + (= (|NO[(Max . no)]4| #b00101) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) #b00010) + (= (|NO[(o . no)]20| obj1 #b00010) (toInt |2|)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) (|ord[(Max . no)]3| obj1)) (and (= obj0 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) #b00101) + (= (|NO[(o . no)]20| obj3 #b00101) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) (|ord[(o . no)]19| obj0 obj3)) + (and (= |3| obj3)))) +(assert (=> (no obj0 |2|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj0 |2|)) + (bvsle (|ord[(o . no)]19| obj0 |2|) (|#[(o . no)]17| obj0))))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) #b00011) + (= (|NO[(o . no)]20| obj1 #b00011) (toInt |4|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj3 #b00100) + (ite (bvsle #b00100 (|#[(o . no)]17| obj3)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj3 #b00101) + (|NO[(o . no)]20| obj3 #b00100)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) #b00011) + (= (|NO[(o . no)]20| obj2 #b00011) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) #b00011) + (= (|NO[(o . no)]20| obj0 #b00011) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) (|ord[(o . no)]19| obj2 obj1)) + (and (= |2| obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) #b00001) + (= (|NO[(o . no)]20| obj2 #b00001) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) (|ord[(o . no)]19| obj2 |1|)) + (and (= obj1 |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) (|ord[(o . no)]19| obj3 obj0)) + (and (= obj2 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) #b00010) + (= (|NO[(o . no)]20| obj3 #b00010) (toInt |3|)))) +(assert (=> (no obj1 |1|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj1 |1|)) + (bvsle (|ord[(o . no)]19| obj1 |1|) (|#[(o . no)]17| obj1))))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) #b00111) + (= (|NO[(o . no)]20| obj3 #b00111) (toInt |1|)))) +(assert (=> (= (|ord[(Max . no)]3| |2|) (|ord[(Max . no)]3| obj3)) (and (= |2| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) #b00100) + (= (|NO[(o . no)]20| obj0 #b00100) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) (|ord[(o . no)]19| obj0 |3|)) + (and (= |2| |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) #b00100) + (= (|NO[(o . no)]20| obj2 #b00100) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) #b00011) + (= (|NO[(o . no)]20| obj1 #b00011) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) (|ord[(o . no)]19| obj3 obj3)) + (and (= |1| obj3)))) +(assert (Ints |2|)) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) (|ord[(o . no)]19| obj3 |4|)) + (and (= obj2 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) #b00111) + (= (|NO[(o . no)]20| obj2 #b00111) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) (|ord[(o . no)]19| obj1 obj1)) + (and (= |2| obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) #b01000) + (= (|NO[(o . no)]20| obj0 #b01000) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) #b00001) + (= (|NO[(o . no)]20| obj2 #b00001) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) #b00100) + (= (|NO[(o . no)]20| obj3 #b00100) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) #b00010) + (= (|NO[(o . no)]20| obj3 #b00010) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) #b00111) + (= (|NO[(o . no)]20| obj0 #b00111) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) (|ord[(o . no)]19| obj3 |4|)) + (and (= obj0 |4|)))) +(assert (= (toInt obj3) #b00000)) +(assert (let ((a!1 (exists ((x!22 univ)) + (! (and (= (|ord[(o . no)]19| obj1 x!22) #b00101) (no obj1 x!22)) + :qid q!23)))) + (=> (and (bvsle #b00001 #b00101) (bvsle #b00101 (|#[(o . no)]17| obj1))) a!1))) +(assert (=> (= (|ord[(Max . no)]3| |1|) (|ord[(Max . no)]3| obj3)) (and (= |1| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) (|ord[(o . no)]19| obj1 obj2)) + (and (= |3| obj2)))) +(assert (=> (= (|ord[(Max . no)]3| |3|) (|ord[(Max . no)]3| |2|)) (and (= |3| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |1|) (|ord[(o . no)]19| obj1 |3|)) + (and (= |1| |3|)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) #b00110) + (= (|NO[(Max . no)]4| #b00110) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |2|) #b00110) + (= (|NO[(o . no)]20| obj1 #b00110) (toInt |2|)))) +(assert (=> (= (|ord[(Max . no)]3| |1|) #b01000) + (= (|NO[(Max . no)]4| #b01000) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) (|ord[(o . no)]19| obj0 obj1)) + (and (= obj1 obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) #b00001) + (= (|NO[(o . no)]20| obj0 #b00001) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) #b00001) + (= (|NO[(o . no)]20| obj1 #b00001) (toInt |4|)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) (|ord[(Max . no)]3| |1|)) (and (= obj1 |1|)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) #b00011) + (= (|NO[(Max . no)]4| #b00011) (toInt obj2)))) +(assert (=> (no obj0 obj3) + (and (bvsle #b00001 (|ord[(o . no)]19| obj0 obj3)) + (bvsle (|ord[(o . no)]19| obj0 obj3) (|#[(o . no)]17| obj0))))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) (|ord[(o . no)]19| obj1 |1|)) + (and (= obj1 |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |2|) #b00010) + (= (|NO[(o . no)]20| obj2 #b00010) (toInt |2|)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) #b00100) + (= (|NO[(Max . no)]4| #b00100) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) (|ord[(o . no)]19| obj3 |4|)) + (and (= obj1 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |4|) #b00010) + (= (|NO[(o . no)]20| obj2 #b00010) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |3|) (|ord[(o . no)]19| obj3 |3|)) + (and (= |3| |3|)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) #b00001) + (= (|NO[(Max . no)]4| #b00001) (toInt obj1)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) #b00110) + (= (|NO[(Max . no)]4| #b00110) (toInt obj2)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) (|ord[(Max . no)]3| |4|)) (and (= obj1 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) (|ord[(o . no)]19| obj3 obj3)) + (and (= |2| obj3)))) +(assert (let ((a!1 (exists ((x!24 univ)) + (! (and (= (|ord[(o . no)]19| obj3 x!24) #b00100) (no obj3 x!24)) + :qid q!31)))) + (=> (and (bvsle #b00001 #b00100) (bvsle #b00100 (|#[(o . no)]17| obj3))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) (|ord[(o . no)]19| obj0 |4|)) + (and (= |4| |4|)))) +(assert (=> (no obj3 obj3) + (and (bvsle #b00001 (|ord[(o . no)]19| obj3 obj3)) + (bvsle (|ord[(o . no)]19| obj3 obj3) (|#[(o . no)]17| obj3))))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) #b00010) + (= (|NO[(o . no)]20| obj2 #b00010) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) (|ord[(o . no)]19| obj0 |3|)) + (and (= |3| |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) #b00101) + (= (|NO[(o . no)]20| obj0 #b00101) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj0) #b00101) + (= (|NO[(o . no)]20| obj0 #b00101) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) (|ord[(o . no)]19| obj3 obj3)) + (and (= |4| obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj2) #b00001) + (= (|NO[(o . no)]20| obj1 #b00001) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj1) (|ord[(o . no)]19| obj3 obj0)) + (and (= obj1 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) (|ord[(o . no)]19| obj1 |3|)) + (and (= obj1 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj3) (|ord[(o . no)]19| obj3 obj2)) + (and (= obj3 obj2)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) (|ord[(Max . no)]3| |2|)) (and (= |4| |2|)))) +(assert (=> (= (|ord[(Max . no)]3| obj2) (|ord[(Max . no)]3| |3|)) (and (= obj2 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) (|ord[(o . no)]19| obj2 obj0)) + (and (= obj3 obj0)))) +(assert (let ((a!1 (exists ((x!22 univ)) + (! (and (= (|ord[(o . no)]19| obj1 x!22) #b00011) (no obj1 x!22)) + :qid q!21)))) + (=> (and (bvsle #b00001 #b00011) (bvsle #b00011 (|#[(o . no)]17| obj1))) a!1))) +(assert (let ((a!1 (exists ((x!22 univ)) + (! (and (= (|ord[(o . no)]19| obj1 x!22) #b00100) (no obj1 x!22)) + :qid q!22)))) + (=> (and (bvsle #b00001 #b00100) (bvsle #b00100 (|#[(o . no)]17| obj1))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) (|ord[(o . no)]19| obj3 obj1)) + (and (= |4| obj1)))) +(assert (=> (= (|ord[(Max . no)]3| |1|) (|ord[(Max . no)]3| obj1)) (and (= |1| obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj1) (|ord[(o . no)]19| obj2 |4|)) + (and (= obj1 |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj0) #b00101) + (= (|NO[(o . no)]20| obj1 #b00101) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) (|ord[(o . no)]19| obj1 |1|)) + (and (= |4| |1|)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) #b00100) + (= (|NO[(Max . no)]4| #b00100) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj2) #b00101) + (= (|NO[(o . no)]20| obj0 #b00101) (toInt obj2)))) +(assert (=> (= (|ord[(Max . no)]3| |4|) (|ord[(Max . no)]3| |3|)) (and (= |4| |3|)))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj3 #b00111) + (ite (bvsle #b00111 (|#[(o . no)]17| obj3)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj3 #b01000) + (|NO[(o . no)]20| obj3 #b00111)) + #b00000))) +(assert (=> (= (|ord[(o . no)]19| obj0 |2|) #b00110) + (= (|NO[(o . no)]20| obj0 #b00110) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) #b00101) + (= (|NO[(o . no)]20| obj3 #b00101) (toInt obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |4|) #b00111) + (= (|NO[(o . no)]20| obj0 #b00111) (toInt |4|)))) +(assert (=> (no obj3 obj2) + (and (bvsle #b00001 (|ord[(o . no)]19| obj3 obj2)) + (bvsle (|ord[(o . no)]19| obj3 obj2) (|#[(o . no)]17| obj3))))) +(assert (=> (= (|ord[(Max . no)]3| obj3) #b00101) + (= (|NO[(Max . no)]4| #b00101) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) #b00110) + (= (|NO[(o . no)]20| obj2 #b00110) (toInt |3|)))) +(assert (=> (no obj2 |2|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj2 |2|)) + (bvsle (|ord[(o . no)]19| obj2 |2|) (|#[(o . no)]17| obj2))))) +(assert (= (|SUM_RECURSIVE[(o . no)]18| obj2 #b01000) + (ite (bvsle #b01000 (|#[(o . no)]17| obj2)) + (bvadd (|SUM_RECURSIVE[(o . no)]18| obj2 #b01001) + (|NO[(o . no)]20| obj2 #b01000)) + #b00000))) +(assert (=> (= (|ord[(Max . no)]3| |1|) (|ord[(Max . no)]3| obj0)) (and (= |1| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |1|) #b00100) + (= (|NO[(o . no)]20| obj2 #b00100) (toInt |1|)))) +(assert (=> (= (|ord[(Max . no)]3| |1|) (|ord[(Max . no)]3| |1|)) (and (= |1| |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 |3|) #b00100) + (= (|NO[(o . no)]20| obj2 #b00100) (toInt |3|)))) +(assert (=> (or (and (Max obj1) (no obj1 obj3)) + (and (Max obj3) (no obj3 obj3)) + (and (Max obj2) (no obj2 obj3)) + (and (Max obj0) (no obj0 obj3))) + (and (bvsle #b00001 (|ord[(Max . no)]3| obj3)) + (bvsle (|ord[(Max . no)]3| obj3) |#[(Max . no)]1|)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) #b00111) + (= (|NO[(Max . no)]4| #b00111) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) (|ord[(o . no)]19| obj1 obj3)) + (and (= obj1 obj3)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) #b00011) + (= (|NO[(Max . no)]4| #b00011) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) #b00101) + (= (|NO[(o . no)]20| obj1 #b00101) (toInt |3|)))) +(assert (=> (= (|ord[(Max . no)]3| obj0) (|ord[(Max . no)]3| |3|)) (and (= obj0 |3|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 |3|) (|ord[(o . no)]19| obj0 |2|)) + (and (= |3| |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) #b00101) + (= (|NO[(o . no)]20| obj2 #b00101) (toInt obj0)))) +(assert (=> (no obj2 |4|) + (and (bvsle #b00001 (|ord[(o . no)]19| obj2 |4|)) + (bvsle (|ord[(o . no)]19| obj2 |4|) (|#[(o . no)]17| obj2))))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) #b00100) + (= (|NO[(o . no)]20| obj0 #b00100) (toInt obj3)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj2) #b00110) + (= (|NO[(o . no)]20| obj3 #b00110) (toInt obj2)))) +(assert (let ((a!1 (exists ((x!7 univ)) + (! (and (= (|ord[(Max . no)]3| x!7) #b00111) + (exists ((x!14 univ)) + (! (and (Max x!14) (no x!14 x!7)) + :skolemid s!8 + :qid q!14))) + :qid q!15)))) + (=> (and (bvsle #b00001 #b00111) (bvsle #b00111 |#[(Max . no)]1|)) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj3 |4|) #b00111) + (= (|NO[(o . no)]20| obj3 #b00111) (toInt |4|)))) +(assert (=> (= (|ord[(o . no)]19| obj2 obj3) (|ord[(o . no)]19| obj2 |1|)) + (and (= obj3 |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj3 obj0) #b00111) + (= (|NO[(o . no)]20| obj3 #b00111) (toInt obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |1|) (|ord[(o . no)]19| obj3 |2|)) + (and (= |1| |2|)))) +(assert (= (toInt |4|) #b00100)) +(assert (=> (= (|ord[(o . no)]19| obj2 obj0) (|ord[(o . no)]19| obj2 obj2)) + (and (= obj0 obj2)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj3) #b00111) + (= (|NO[(o . no)]20| obj1 #b00111) (toInt obj3)))) +(assert (=> (= (|ord[(Max . no)]3| obj1) (|ord[(Max . no)]3| obj0)) (and (= obj1 obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |4|) (|ord[(o . no)]19| obj1 obj0)) + (and (= |4| obj0)))) +(assert (let ((a!1 (exists ((x!26 univ)) + (! (and (= (|ord[(o . no)]19| obj0 x!26) #b00111) (no obj0 x!26)) + :qid q!43)))) + (=> (and (bvsle #b00001 #b00111) (bvsle #b00111 (|#[(o . no)]17| obj0))) a!1))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj1) (|ord[(o . no)]19| obj0 |4|)) + (and (= obj1 |4|)))) +(assert (=> (= (|ord[(Max . no)]3| obj3) (|ord[(Max . no)]3| |4|)) (and (= obj3 |4|)))) +(assert (= (toInt |3|) #b00011)) +(assert (=> (= (|ord[(o . no)]19| obj0 |1|) #b00010) + (= (|NO[(o . no)]20| obj0 #b00010) (toInt |1|)))) +(assert (=> (= (|ord[(o . no)]19| obj1 obj1) #b00111) + (= (|NO[(o . no)]20| obj1 #b00111) (toInt obj1)))) +(assert (=> (= (|ord[(o . no)]19| obj1 |3|) (|ord[(o . no)]19| obj1 obj0)) + (and (= |3| obj0)))) +(assert (=> (= (|ord[(o . no)]19| obj3 |2|) #b00110) + (= (|NO[(o . no)]20| obj3 #b00110) (toInt |2|)))) +(assert (=> (= (|ord[(o . no)]19| obj0 obj3) #b00110) + (= (|NO[(o . no)]20| obj0 #b00110) (toInt obj3)))) + +(check-sat) +(get-info :all-statistics) +(get-model) diff --git a/Source/kodkod/SMT/requirementsmodel.smt b/Source/kodkod/SMT/requirementsmodel.smt new file mode 100644 index 0000000..ca9df5a --- /dev/null +++ b/Source/kodkod/SMT/requirementsmodel.smt @@ -0,0 +1,8748 @@ +(declare-datatypes ((univ 0)) ((univ (r2) (r3) (r4) (r5) (r6) (r7) (r8) (r9) (name19) (name18) (name17) (name16) (r10) (name15) (name14) (r12) (name13) (r11) (name12) (r14) (name11) (r13) (name10) (r16) (r15) (r18) (r17) (r19) (name6) (name5) (name4) (name3) (name9) (name8) (name7) (name2) (name1) (r0) (name0) (r1)))) +(declare-fun Requirement (univ) Bool) +(declare-fun Name (univ) Bool) +(declare-fun name (univ univ) Bool) +(declare-fun requires (univ univ) Bool) +(declare-fun refines (univ univ) Bool) +(declare-fun contains (univ univ) Bool) +(declare-fun eq (univ univ) Bool) +(declare-fun conflicts (univ univ) Bool) +(declare-fun partiallyRefines (univ univ) Bool) +(assert (Requirement r2)) +(assert (Requirement r3)) +(assert (Requirement r4)) +(assert (Requirement r5)) +(assert (Requirement r6)) +(assert (Requirement r7)) +(assert (Requirement r8)) +(assert (Requirement r9)) +(assert (Requirement r10)) +(assert (Requirement r12)) +(assert (Requirement r11)) +(assert (Requirement r14)) +(assert (Requirement r13)) +(assert (Requirement r16)) +(assert (Requirement r15)) +(assert (Requirement r18)) +(assert (Requirement r17)) +(assert (Requirement r19)) +(assert (Requirement r0)) +(assert (Requirement r1)) +(assert (not (Requirement name19))) +(assert (not (Requirement name18))) +(assert (not (Requirement name17))) +(assert (not (Requirement name16))) +(assert (not (Requirement name15))) +(assert (not (Requirement name14))) +(assert (not (Requirement name13))) +(assert (not (Requirement name12))) +(assert (not (Requirement name11))) +(assert (not (Requirement name10))) +(assert (not (Requirement name6))) +(assert (not (Requirement name5))) +(assert (not (Requirement name4))) +(assert (not (Requirement name3))) +(assert (not (Requirement name9))) +(assert (not (Requirement name8))) +(assert (not (Requirement name7))) +(assert (not (Requirement name2))) +(assert (not (Requirement name1))) +(assert (not (Requirement name0))) +(assert (Name name19)) +(assert (Name name18)) +(assert (Name name17)) +(assert (Name name16)) +(assert (Name name15)) +(assert (Name name14)) +(assert (Name name13)) +(assert (Name name12)) +(assert (Name name11)) +(assert (Name name10)) +(assert (Name name6)) +(assert (Name name5)) +(assert (Name name4)) +(assert (Name name3)) +(assert (Name name9)) +(assert (Name name8)) +(assert (Name name7)) +(assert (Name name2)) +(assert (Name name1)) +(assert (Name name0)) +(assert (not (Name r2))) +(assert (not (Name r3))) +(assert (not (Name r4))) +(assert (not (Name r5))) +(assert (not (Name r6))) +(assert (not (Name r7))) +(assert (not (Name r8))) +(assert (not (Name r9))) +(assert (not (Name r10))) +(assert (not (Name r12))) +(assert (not (Name r11))) +(assert (not (Name r14))) +(assert (not (Name r13))) +(assert (not (Name r16))) +(assert (not (Name r15))) +(assert (not (Name r18))) +(assert (not (Name r17))) +(assert (not (Name r19))) +(assert (not (Name r0))) +(assert (not (Name r1))) +(assert (name r2 name2)) +(assert (name r3 name3)) +(assert (name r1 name1)) +(assert (not (name r2 r2))) +(assert (not (name r2 r3))) +(assert (not (name r2 r4))) +(assert (not (name r2 r5))) +(assert (not (name r2 r6))) +(assert (not (name r2 r7))) +(assert (not (name r2 r8))) +(assert (not (name r2 r9))) +(assert (not (name r2 r10))) +(assert (not (name r2 r12))) +(assert (not (name r2 r11))) +(assert (not (name r2 r14))) +(assert (not (name r2 r13))) +(assert (not (name r2 r16))) +(assert (not (name r2 r15))) +(assert (not (name r2 r18))) +(assert (not (name r2 r17))) +(assert (not (name r2 r19))) +(assert (not (name r2 r0))) +(assert (not (name r2 r1))) +(assert (not (name r3 r2))) +(assert (not (name r3 r3))) +(assert (not (name r3 r4))) +(assert (not (name r3 r5))) +(assert (not (name r3 r6))) +(assert (not (name r3 r7))) +(assert (not (name r3 r8))) +(assert (not (name r3 r9))) +(assert (not (name r3 r10))) +(assert (not (name r3 r12))) +(assert (not (name r3 r11))) +(assert (not (name r3 r14))) +(assert (not (name r3 r13))) +(assert (not (name r3 r16))) +(assert (not (name r3 r15))) +(assert (not (name r3 r18))) +(assert (not (name r3 r17))) +(assert (not (name r3 r19))) +(assert (not (name r3 r0))) +(assert (not (name r3 r1))) +(assert (not (name r4 r2))) +(assert (not (name r4 r3))) +(assert (not (name r4 r4))) +(assert (not (name r4 r5))) +(assert (not (name r4 r6))) +(assert (not (name r4 r7))) +(assert (not (name r4 r8))) +(assert (not (name r4 r9))) +(assert (not (name r4 r10))) +(assert (not (name r4 r12))) +(assert (not (name r4 r11))) +(assert (not (name r4 r14))) +(assert (not (name r4 r13))) +(assert (not (name r4 r16))) +(assert (not (name r4 r15))) +(assert (not (name r4 r18))) +(assert (not (name r4 r17))) +(assert (not (name r4 r19))) +(assert (not (name r4 r0))) +(assert (not (name r4 r1))) +(assert (not (name r5 r2))) +(assert (not (name r5 r3))) +(assert (not (name r5 r4))) +(assert (not (name r5 r5))) +(assert (not (name r5 r6))) +(assert (not (name r5 r7))) +(assert (not (name r5 r8))) +(assert (not (name r5 r9))) +(assert (not (name r5 r10))) +(assert (not (name r5 r12))) +(assert (not (name r5 r11))) +(assert (not (name r5 r14))) +(assert (not (name r5 r13))) +(assert (not (name r5 r16))) +(assert (not (name r5 r15))) +(assert (not (name r5 r18))) +(assert (not (name r5 r17))) +(assert (not (name r5 r19))) +(assert (not (name r5 r0))) +(assert (not (name r5 r1))) +(assert (not (name r6 r2))) +(assert (not (name r6 r3))) +(assert (not (name r6 r4))) +(assert (not (name r6 r5))) +(assert (not (name r6 r6))) +(assert (not (name r6 r7))) +(assert (not (name r6 r8))) +(assert (not (name r6 r9))) +(assert (not (name r6 r10))) +(assert (not (name r6 r12))) +(assert (not (name r6 r11))) +(assert (not (name r6 r14))) +(assert (not (name r6 r13))) +(assert (not (name r6 r16))) +(assert (not (name r6 r15))) +(assert (not (name r6 r18))) +(assert (not (name r6 r17))) +(assert (not (name r6 r19))) +(assert (not (name r6 r0))) +(assert (not (name r6 r1))) +(assert (not (name r7 r2))) +(assert (not (name r7 r3))) +(assert (not (name r7 r4))) +(assert (not (name r7 r5))) +(assert (not (name r7 r6))) +(assert (not (name r7 r7))) +(assert (not (name r7 r8))) +(assert (not (name r7 r9))) +(assert (not (name r7 r10))) +(assert (not (name r7 r12))) +(assert (not (name r7 r11))) +(assert (not (name r7 r14))) +(assert (not (name r7 r13))) +(assert (not (name r7 r16))) +(assert (not (name r7 r15))) +(assert (not (name r7 r18))) +(assert (not (name r7 r17))) +(assert (not (name r7 r19))) +(assert (not (name r7 r0))) +(assert (not (name r7 r1))) +(assert (not (name r8 r2))) +(assert (not (name r8 r3))) +(assert (not (name r8 r4))) +(assert (not (name r8 r5))) +(assert (not (name r8 r6))) +(assert (not (name r8 r7))) +(assert (not (name r8 r8))) +(assert (not (name r8 r9))) +(assert (not (name r8 r10))) +(assert (not (name r8 r12))) +(assert (not (name r8 r11))) +(assert (not (name r8 r14))) +(assert (not (name r8 r13))) +(assert (not (name r8 r16))) +(assert (not (name r8 r15))) +(assert (not (name r8 r18))) +(assert (not (name r8 r17))) +(assert (not (name r8 r19))) +(assert (not (name r8 r0))) +(assert (not (name r8 r1))) +(assert (not (name r9 r2))) +(assert (not (name r9 r3))) +(assert (not (name r9 r4))) +(assert (not (name r9 r5))) +(assert (not (name r9 r6))) +(assert (not (name r9 r7))) +(assert (not (name r9 r8))) +(assert (not (name r9 r9))) +(assert (not (name r9 r10))) +(assert (not (name r9 r12))) +(assert (not (name r9 r11))) +(assert (not (name r9 r14))) +(assert (not (name r9 r13))) +(assert (not (name r9 r16))) +(assert (not (name r9 r15))) +(assert (not (name r9 r18))) +(assert (not (name r9 r17))) +(assert (not (name r9 r19))) +(assert (not (name r9 r0))) +(assert (not (name r9 r1))) +(assert (not (name name19 r2))) +(assert (not (name name19 r3))) +(assert (not (name name19 r4))) +(assert (not (name name19 r5))) +(assert (not (name name19 r6))) +(assert (not (name name19 r7))) +(assert (not (name name19 r8))) +(assert (not (name name19 r9))) +(assert (not (name name19 name19))) +(assert (not (name name19 name18))) +(assert (not (name name19 name17))) +(assert (not (name name19 name16))) +(assert (not (name name19 r10))) +(assert (not (name name19 name15))) +(assert (not (name name19 name14))) +(assert (not (name name19 r12))) +(assert (not (name name19 name13))) +(assert (not (name name19 r11))) +(assert (not (name name19 name12))) +(assert (not (name name19 r14))) +(assert (not (name name19 name11))) +(assert (not (name name19 r13))) +(assert (not (name name19 name10))) +(assert (not (name name19 r16))) +(assert (not (name name19 r15))) +(assert (not (name name19 r18))) +(assert (not (name name19 r17))) +(assert (not (name name19 r19))) +(assert (not (name name19 name6))) +(assert (not (name name19 name5))) +(assert (not (name name19 name4))) +(assert (not (name name19 name3))) +(assert (not (name name19 name9))) +(assert (not (name name19 name8))) +(assert (not (name name19 name7))) +(assert (not (name name19 name2))) +(assert (not (name name19 name1))) +(assert (not (name name19 r0))) +(assert (not (name name19 name0))) +(assert (not (name name19 r1))) +(assert (not (name name18 r2))) +(assert (not (name name18 r3))) +(assert (not (name name18 r4))) +(assert (not (name name18 r5))) +(assert (not (name name18 r6))) +(assert (not (name name18 r7))) +(assert (not (name name18 r8))) +(assert (not (name name18 r9))) +(assert (not (name name18 name19))) +(assert (not (name name18 name18))) +(assert (not (name name18 name17))) +(assert (not (name name18 name16))) +(assert (not (name name18 r10))) +(assert (not (name name18 name15))) +(assert (not (name name18 name14))) +(assert (not (name name18 r12))) +(assert (not (name name18 name13))) +(assert (not (name name18 r11))) +(assert (not (name name18 name12))) +(assert (not (name name18 r14))) +(assert (not (name name18 name11))) +(assert (not (name name18 r13))) +(assert (not (name name18 name10))) +(assert (not (name name18 r16))) +(assert (not (name name18 r15))) +(assert (not (name name18 r18))) +(assert (not (name name18 r17))) +(assert (not (name name18 r19))) +(assert (not (name name18 name6))) +(assert (not (name name18 name5))) +(assert (not (name name18 name4))) +(assert (not (name name18 name3))) +(assert (not (name name18 name9))) +(assert (not (name name18 name8))) +(assert (not (name name18 name7))) +(assert (not (name name18 name2))) +(assert (not (name name18 name1))) +(assert (not (name name18 r0))) +(assert (not (name name18 name0))) +(assert (not (name name18 r1))) +(assert (not (name name17 r2))) +(assert (not (name name17 r3))) +(assert (not (name name17 r4))) +(assert (not (name name17 r5))) +(assert (not (name name17 r6))) +(assert (not (name name17 r7))) +(assert (not (name name17 r8))) +(assert (not (name name17 r9))) +(assert (not (name name17 name19))) +(assert (not (name name17 name18))) +(assert (not (name name17 name17))) +(assert (not (name name17 name16))) +(assert (not (name name17 r10))) +(assert (not (name name17 name15))) +(assert (not (name name17 name14))) +(assert (not (name name17 r12))) +(assert (not (name name17 name13))) +(assert (not (name name17 r11))) +(assert (not (name name17 name12))) +(assert (not (name name17 r14))) +(assert (not (name name17 name11))) +(assert (not (name name17 r13))) +(assert (not (name name17 name10))) +(assert (not (name name17 r16))) +(assert (not (name name17 r15))) +(assert (not (name name17 r18))) +(assert (not (name name17 r17))) +(assert (not (name name17 r19))) +(assert (not (name name17 name6))) +(assert (not (name name17 name5))) +(assert (not (name name17 name4))) +(assert (not (name name17 name3))) +(assert (not (name name17 name9))) +(assert (not (name name17 name8))) +(assert (not (name name17 name7))) +(assert (not (name name17 name2))) +(assert (not (name name17 name1))) +(assert (not (name name17 r0))) +(assert (not (name name17 name0))) +(assert (not (name name17 r1))) +(assert (not (name name16 r2))) +(assert (not (name name16 r3))) +(assert (not (name name16 r4))) +(assert (not (name name16 r5))) +(assert (not (name name16 r6))) +(assert (not (name name16 r7))) +(assert (not (name name16 r8))) +(assert (not (name name16 r9))) +(assert (not (name name16 name19))) +(assert (not (name name16 name18))) +(assert (not (name name16 name17))) +(assert (not (name name16 name16))) +(assert (not (name name16 r10))) +(assert (not (name name16 name15))) +(assert (not (name name16 name14))) +(assert (not (name name16 r12))) +(assert (not (name name16 name13))) +(assert (not (name name16 r11))) +(assert (not (name name16 name12))) +(assert (not (name name16 r14))) +(assert (not (name name16 name11))) +(assert (not (name name16 r13))) +(assert (not (name name16 name10))) +(assert (not (name name16 r16))) +(assert (not (name name16 r15))) +(assert (not (name name16 r18))) +(assert (not (name name16 r17))) +(assert (not (name name16 r19))) +(assert (not (name name16 name6))) +(assert (not (name name16 name5))) +(assert (not (name name16 name4))) +(assert (not (name name16 name3))) +(assert (not (name name16 name9))) +(assert (not (name name16 name8))) +(assert (not (name name16 name7))) +(assert (not (name name16 name2))) +(assert (not (name name16 name1))) +(assert (not (name name16 r0))) +(assert (not (name name16 name0))) +(assert (not (name name16 r1))) +(assert (not (name r10 r2))) +(assert (not (name r10 r3))) +(assert (not (name r10 r4))) +(assert (not (name r10 r5))) +(assert (not (name r10 r6))) +(assert (not (name r10 r7))) +(assert (not (name r10 r8))) +(assert (not (name r10 r9))) +(assert (not (name r10 r10))) +(assert (not (name r10 r12))) +(assert (not (name r10 r11))) +(assert (not (name r10 r14))) +(assert (not (name r10 r13))) +(assert (not (name r10 r16))) +(assert (not (name r10 r15))) +(assert (not (name r10 r18))) +(assert (not (name r10 r17))) +(assert (not (name r10 r19))) +(assert (not (name r10 r0))) +(assert (not (name r10 r1))) +(assert (not (name name15 r2))) +(assert (not (name name15 r3))) +(assert (not (name name15 r4))) +(assert (not (name name15 r5))) +(assert (not (name name15 r6))) +(assert (not (name name15 r7))) +(assert (not (name name15 r8))) +(assert (not (name name15 r9))) +(assert (not (name name15 name19))) +(assert (not (name name15 name18))) +(assert (not (name name15 name17))) +(assert (not (name name15 name16))) +(assert (not (name name15 r10))) +(assert (not (name name15 name15))) +(assert (not (name name15 name14))) +(assert (not (name name15 r12))) +(assert (not (name name15 name13))) +(assert (not (name name15 r11))) +(assert (not (name name15 name12))) +(assert (not (name name15 r14))) +(assert (not (name name15 name11))) +(assert (not (name name15 r13))) +(assert (not (name name15 name10))) +(assert (not (name name15 r16))) +(assert (not (name name15 r15))) +(assert (not (name name15 r18))) +(assert (not (name name15 r17))) +(assert (not (name name15 r19))) +(assert (not (name name15 name6))) +(assert (not (name name15 name5))) +(assert (not (name name15 name4))) +(assert (not (name name15 name3))) +(assert (not (name name15 name9))) +(assert (not (name name15 name8))) +(assert (not (name name15 name7))) +(assert (not (name name15 name2))) +(assert (not (name name15 name1))) +(assert (not (name name15 r0))) +(assert (not (name name15 name0))) +(assert (not (name name15 r1))) +(assert (not (name name14 r2))) +(assert (not (name name14 r3))) +(assert (not (name name14 r4))) +(assert (not (name name14 r5))) +(assert (not (name name14 r6))) +(assert (not (name name14 r7))) +(assert (not (name name14 r8))) +(assert (not (name name14 r9))) +(assert (not (name name14 name19))) +(assert (not (name name14 name18))) +(assert (not (name name14 name17))) +(assert (not (name name14 name16))) +(assert (not (name name14 r10))) +(assert (not (name name14 name15))) +(assert (not (name name14 name14))) +(assert (not (name name14 r12))) +(assert (not (name name14 name13))) +(assert (not (name name14 r11))) +(assert (not (name name14 name12))) +(assert (not (name name14 r14))) +(assert (not (name name14 name11))) +(assert (not (name name14 r13))) +(assert (not (name name14 name10))) +(assert (not (name name14 r16))) +(assert (not (name name14 r15))) +(assert (not (name name14 r18))) +(assert (not (name name14 r17))) +(assert (not (name name14 r19))) +(assert (not (name name14 name6))) +(assert (not (name name14 name5))) +(assert (not (name name14 name4))) +(assert (not (name name14 name3))) +(assert (not (name name14 name9))) +(assert (not (name name14 name8))) +(assert (not (name name14 name7))) +(assert (not (name name14 name2))) +(assert (not (name name14 name1))) +(assert (not (name name14 r0))) +(assert (not (name name14 name0))) +(assert (not (name name14 r1))) +(assert (not (name r12 r2))) +(assert (not (name r12 r3))) +(assert (not (name r12 r4))) +(assert (not (name r12 r5))) +(assert (not (name r12 r6))) +(assert (not (name r12 r7))) +(assert (not (name r12 r8))) +(assert (not (name r12 r9))) +(assert (not (name r12 r10))) +(assert (not (name r12 r12))) +(assert (not (name r12 r11))) +(assert (not (name r12 r14))) +(assert (not (name r12 r13))) +(assert (not (name r12 r16))) +(assert (not (name r12 r15))) +(assert (not (name r12 r18))) +(assert (not (name r12 r17))) +(assert (not (name r12 r19))) +(assert (not (name r12 r0))) +(assert (not (name r12 r1))) +(assert (not (name name13 r2))) +(assert (not (name name13 r3))) +(assert (not (name name13 r4))) +(assert (not (name name13 r5))) +(assert (not (name name13 r6))) +(assert (not (name name13 r7))) +(assert (not (name name13 r8))) +(assert (not (name name13 r9))) +(assert (not (name name13 name19))) +(assert (not (name name13 name18))) +(assert (not (name name13 name17))) +(assert (not (name name13 name16))) +(assert (not (name name13 r10))) +(assert (not (name name13 name15))) +(assert (not (name name13 name14))) +(assert (not (name name13 r12))) +(assert (not (name name13 name13))) +(assert (not (name name13 r11))) +(assert (not (name name13 name12))) +(assert (not (name name13 r14))) +(assert (not (name name13 name11))) +(assert (not (name name13 r13))) +(assert (not (name name13 name10))) +(assert (not (name name13 r16))) +(assert (not (name name13 r15))) +(assert (not (name name13 r18))) +(assert (not (name name13 r17))) +(assert (not (name name13 r19))) +(assert (not (name name13 name6))) +(assert (not (name name13 name5))) +(assert (not (name name13 name4))) +(assert (not (name name13 name3))) +(assert (not (name name13 name9))) +(assert (not (name name13 name8))) +(assert (not (name name13 name7))) +(assert (not (name name13 name2))) +(assert (not (name name13 name1))) +(assert (not (name name13 r0))) +(assert (not (name name13 name0))) +(assert (not (name name13 r1))) +(assert (not (name r11 r2))) +(assert (not (name r11 r3))) +(assert (not (name r11 r4))) +(assert (not (name r11 r5))) +(assert (not (name r11 r6))) +(assert (not (name r11 r7))) +(assert (not (name r11 r8))) +(assert (not (name r11 r9))) +(assert (not (name r11 r10))) +(assert (not (name r11 r12))) +(assert (not (name r11 r11))) +(assert (not (name r11 r14))) +(assert (not (name r11 r13))) +(assert (not (name r11 r16))) +(assert (not (name r11 r15))) +(assert (not (name r11 r18))) +(assert (not (name r11 r17))) +(assert (not (name r11 r19))) +(assert (not (name r11 r0))) +(assert (not (name r11 r1))) +(assert (not (name name12 r2))) +(assert (not (name name12 r3))) +(assert (not (name name12 r4))) +(assert (not (name name12 r5))) +(assert (not (name name12 r6))) +(assert (not (name name12 r7))) +(assert (not (name name12 r8))) +(assert (not (name name12 r9))) +(assert (not (name name12 name19))) +(assert (not (name name12 name18))) +(assert (not (name name12 name17))) +(assert (not (name name12 name16))) +(assert (not (name name12 r10))) +(assert (not (name name12 name15))) +(assert (not (name name12 name14))) +(assert (not (name name12 r12))) +(assert (not (name name12 name13))) +(assert (not (name name12 r11))) +(assert (not (name name12 name12))) +(assert (not (name name12 r14))) +(assert (not (name name12 name11))) +(assert (not (name name12 r13))) +(assert (not (name name12 name10))) +(assert (not (name name12 r16))) +(assert (not (name name12 r15))) +(assert (not (name name12 r18))) +(assert (not (name name12 r17))) +(assert (not (name name12 r19))) +(assert (not (name name12 name6))) +(assert (not (name name12 name5))) +(assert (not (name name12 name4))) +(assert (not (name name12 name3))) +(assert (not (name name12 name9))) +(assert (not (name name12 name8))) +(assert (not (name name12 name7))) +(assert (not (name name12 name2))) +(assert (not (name name12 name1))) +(assert (not (name name12 r0))) +(assert (not (name name12 name0))) +(assert (not (name name12 r1))) +(assert (not (name r14 r2))) +(assert (not (name r14 r3))) +(assert (not (name r14 r4))) +(assert (not (name r14 r5))) +(assert (not (name r14 r6))) +(assert (not (name r14 r7))) +(assert (not (name r14 r8))) +(assert (not (name r14 r9))) +(assert (not (name r14 r10))) +(assert (not (name r14 r12))) +(assert (not (name r14 r11))) +(assert (not (name r14 r14))) +(assert (not (name r14 r13))) +(assert (not (name r14 r16))) +(assert (not (name r14 r15))) +(assert (not (name r14 r18))) +(assert (not (name r14 r17))) +(assert (not (name r14 r19))) +(assert (not (name r14 r0))) +(assert (not (name r14 r1))) +(assert (not (name name11 r2))) +(assert (not (name name11 r3))) +(assert (not (name name11 r4))) +(assert (not (name name11 r5))) +(assert (not (name name11 r6))) +(assert (not (name name11 r7))) +(assert (not (name name11 r8))) +(assert (not (name name11 r9))) +(assert (not (name name11 name19))) +(assert (not (name name11 name18))) +(assert (not (name name11 name17))) +(assert (not (name name11 name16))) +(assert (not (name name11 r10))) +(assert (not (name name11 name15))) +(assert (not (name name11 name14))) +(assert (not (name name11 r12))) +(assert (not (name name11 name13))) +(assert (not (name name11 r11))) +(assert (not (name name11 name12))) +(assert (not (name name11 r14))) +(assert (not (name name11 name11))) +(assert (not (name name11 r13))) +(assert (not (name name11 name10))) +(assert (not (name name11 r16))) +(assert (not (name name11 r15))) +(assert (not (name name11 r18))) +(assert (not (name name11 r17))) +(assert (not (name name11 r19))) +(assert (not (name name11 name6))) +(assert (not (name name11 name5))) +(assert (not (name name11 name4))) +(assert (not (name name11 name3))) +(assert (not (name name11 name9))) +(assert (not (name name11 name8))) +(assert (not (name name11 name7))) +(assert (not (name name11 name2))) +(assert (not (name name11 name1))) +(assert (not (name name11 r0))) +(assert (not (name name11 name0))) +(assert (not (name name11 r1))) +(assert (not (name r13 r2))) +(assert (not (name r13 r3))) +(assert (not (name r13 r4))) +(assert (not (name r13 r5))) +(assert (not (name r13 r6))) +(assert (not (name r13 r7))) +(assert (not (name r13 r8))) +(assert (not (name r13 r9))) +(assert (not (name r13 r10))) +(assert (not (name r13 r12))) +(assert (not (name r13 r11))) +(assert (not (name r13 r14))) +(assert (not (name r13 r13))) +(assert (not (name r13 r16))) +(assert (not (name r13 r15))) +(assert (not (name r13 r18))) +(assert (not (name r13 r17))) +(assert (not (name r13 r19))) +(assert (not (name r13 r0))) +(assert (not (name r13 r1))) +(assert (not (name name10 r2))) +(assert (not (name name10 r3))) +(assert (not (name name10 r4))) +(assert (not (name name10 r5))) +(assert (not (name name10 r6))) +(assert (not (name name10 r7))) +(assert (not (name name10 r8))) +(assert (not (name name10 r9))) +(assert (not (name name10 name19))) +(assert (not (name name10 name18))) +(assert (not (name name10 name17))) +(assert (not (name name10 name16))) +(assert (not (name name10 r10))) +(assert (not (name name10 name15))) +(assert (not (name name10 name14))) +(assert (not (name name10 r12))) +(assert (not (name name10 name13))) +(assert (not (name name10 r11))) +(assert (not (name name10 name12))) +(assert (not (name name10 r14))) +(assert (not (name name10 name11))) +(assert (not (name name10 r13))) +(assert (not (name name10 name10))) +(assert (not (name name10 r16))) +(assert (not (name name10 r15))) +(assert (not (name name10 r18))) +(assert (not (name name10 r17))) +(assert (not (name name10 r19))) +(assert (not (name name10 name6))) +(assert (not (name name10 name5))) +(assert (not (name name10 name4))) +(assert (not (name name10 name3))) +(assert (not (name name10 name9))) +(assert (not (name name10 name8))) +(assert (not (name name10 name7))) +(assert (not (name name10 name2))) +(assert (not (name name10 name1))) +(assert (not (name name10 r0))) +(assert (not (name name10 name0))) +(assert (not (name name10 r1))) +(assert (not (name r16 r2))) +(assert (not (name r16 r3))) +(assert (not (name r16 r4))) +(assert (not (name r16 r5))) +(assert (not (name r16 r6))) +(assert (not (name r16 r7))) +(assert (not (name r16 r8))) +(assert (not (name r16 r9))) +(assert (not (name r16 r10))) +(assert (not (name r16 r12))) +(assert (not (name r16 r11))) +(assert (not (name r16 r14))) +(assert (not (name r16 r13))) +(assert (not (name r16 r16))) +(assert (not (name r16 r15))) +(assert (not (name r16 r18))) +(assert (not (name r16 r17))) +(assert (not (name r16 r19))) +(assert (not (name r16 r0))) +(assert (not (name r16 r1))) +(assert (not (name r15 r2))) +(assert (not (name r15 r3))) +(assert (not (name r15 r4))) +(assert (not (name r15 r5))) +(assert (not (name r15 r6))) +(assert (not (name r15 r7))) +(assert (not (name r15 r8))) +(assert (not (name r15 r9))) +(assert (not (name r15 r10))) +(assert (not (name r15 r12))) +(assert (not (name r15 r11))) +(assert (not (name r15 r14))) +(assert (not (name r15 r13))) +(assert (not (name r15 r16))) +(assert (not (name r15 r15))) +(assert (not (name r15 r18))) +(assert (not (name r15 r17))) +(assert (not (name r15 r19))) +(assert (not (name r15 r0))) +(assert (not (name r15 r1))) +(assert (not (name r18 r2))) +(assert (not (name r18 r3))) +(assert (not (name r18 r4))) +(assert (not (name r18 r5))) +(assert (not (name r18 r6))) +(assert (not (name r18 r7))) +(assert (not (name r18 r8))) +(assert (not (name r18 r9))) +(assert (not (name r18 r10))) +(assert (not (name r18 r12))) +(assert (not (name r18 r11))) +(assert (not (name r18 r14))) +(assert (not (name r18 r13))) +(assert (not (name r18 r16))) +(assert (not (name r18 r15))) +(assert (not (name r18 r18))) +(assert (not (name r18 r17))) +(assert (not (name r18 r19))) +(assert (not (name r18 r0))) +(assert (not (name r18 r1))) +(assert (not (name r17 r2))) +(assert (not (name r17 r3))) +(assert (not (name r17 r4))) +(assert (not (name r17 r5))) +(assert (not (name r17 r6))) +(assert (not (name r17 r7))) +(assert (not (name r17 r8))) +(assert (not (name r17 r9))) +(assert (not (name r17 r10))) +(assert (not (name r17 r12))) +(assert (not (name r17 r11))) +(assert (not (name r17 r14))) +(assert (not (name r17 r13))) +(assert (not (name r17 r16))) +(assert (not (name r17 r15))) +(assert (not (name r17 r18))) +(assert (not (name r17 r17))) +(assert (not (name r17 r19))) +(assert (not (name r17 r0))) +(assert (not (name r17 r1))) +(assert (not (name r19 r2))) +(assert (not (name r19 r3))) +(assert (not (name r19 r4))) +(assert (not (name r19 r5))) +(assert (not (name r19 r6))) +(assert (not (name r19 r7))) +(assert (not (name r19 r8))) +(assert (not (name r19 r9))) +(assert (not (name r19 r10))) +(assert (not (name r19 r12))) +(assert (not (name r19 r11))) +(assert (not (name r19 r14))) +(assert (not (name r19 r13))) +(assert (not (name r19 r16))) +(assert (not (name r19 r15))) +(assert (not (name r19 r18))) +(assert (not (name r19 r17))) +(assert (not (name r19 r19))) +(assert (not (name r19 r0))) +(assert (not (name r19 r1))) +(assert (not (name name6 r2))) +(assert (not (name name6 r3))) +(assert (not (name name6 r4))) +(assert (not (name name6 r5))) +(assert (not (name name6 r6))) +(assert (not (name name6 r7))) +(assert (not (name name6 r8))) +(assert (not (name name6 r9))) +(assert (not (name name6 name19))) +(assert (not (name name6 name18))) +(assert (not (name name6 name17))) +(assert (not (name name6 name16))) +(assert (not (name name6 r10))) +(assert (not (name name6 name15))) +(assert (not (name name6 name14))) +(assert (not (name name6 r12))) +(assert (not (name name6 name13))) +(assert (not (name name6 r11))) +(assert (not (name name6 name12))) +(assert (not (name name6 r14))) +(assert (not (name name6 name11))) +(assert (not (name name6 r13))) +(assert (not (name name6 name10))) +(assert (not (name name6 r16))) +(assert (not (name name6 r15))) +(assert (not (name name6 r18))) +(assert (not (name name6 r17))) +(assert (not (name name6 r19))) +(assert (not (name name6 name6))) +(assert (not (name name6 name5))) +(assert (not (name name6 name4))) +(assert (not (name name6 name3))) +(assert (not (name name6 name9))) +(assert (not (name name6 name8))) +(assert (not (name name6 name7))) +(assert (not (name name6 name2))) +(assert (not (name name6 name1))) +(assert (not (name name6 r0))) +(assert (not (name name6 name0))) +(assert (not (name name6 r1))) +(assert (not (name name5 r2))) +(assert (not (name name5 r3))) +(assert (not (name name5 r4))) +(assert (not (name name5 r5))) +(assert (not (name name5 r6))) +(assert (not (name name5 r7))) +(assert (not (name name5 r8))) +(assert (not (name name5 r9))) +(assert (not (name name5 name19))) +(assert (not (name name5 name18))) +(assert (not (name name5 name17))) +(assert (not (name name5 name16))) +(assert (not (name name5 r10))) +(assert (not (name name5 name15))) +(assert (not (name name5 name14))) +(assert (not (name name5 r12))) +(assert (not (name name5 name13))) +(assert (not (name name5 r11))) +(assert (not (name name5 name12))) +(assert (not (name name5 r14))) +(assert (not (name name5 name11))) +(assert (not (name name5 r13))) +(assert (not (name name5 name10))) +(assert (not (name name5 r16))) +(assert (not (name name5 r15))) +(assert (not (name name5 r18))) +(assert (not (name name5 r17))) +(assert (not (name name5 r19))) +(assert (not (name name5 name6))) +(assert (not (name name5 name5))) +(assert (not (name name5 name4))) +(assert (not (name name5 name3))) +(assert (not (name name5 name9))) +(assert (not (name name5 name8))) +(assert (not (name name5 name7))) +(assert (not (name name5 name2))) +(assert (not (name name5 name1))) +(assert (not (name name5 r0))) +(assert (not (name name5 name0))) +(assert (not (name name5 r1))) +(assert (not (name name4 r2))) +(assert (not (name name4 r3))) +(assert (not (name name4 r4))) +(assert (not (name name4 r5))) +(assert (not (name name4 r6))) +(assert (not (name name4 r7))) +(assert (not (name name4 r8))) +(assert (not (name name4 r9))) +(assert (not (name name4 name19))) +(assert (not (name name4 name18))) +(assert (not (name name4 name17))) +(assert (not (name name4 name16))) +(assert (not (name name4 r10))) +(assert (not (name name4 name15))) +(assert (not (name name4 name14))) +(assert (not (name name4 r12))) +(assert (not (name name4 name13))) +(assert (not (name name4 r11))) +(assert (not (name name4 name12))) +(assert (not (name name4 r14))) +(assert (not (name name4 name11))) +(assert (not (name name4 r13))) +(assert (not (name name4 name10))) +(assert (not (name name4 r16))) +(assert (not (name name4 r15))) +(assert (not (name name4 r18))) +(assert (not (name name4 r17))) +(assert (not (name name4 r19))) +(assert (not (name name4 name6))) +(assert (not (name name4 name5))) +(assert (not (name name4 name4))) +(assert (not (name name4 name3))) +(assert (not (name name4 name9))) +(assert (not (name name4 name8))) +(assert (not (name name4 name7))) +(assert (not (name name4 name2))) +(assert (not (name name4 name1))) +(assert (not (name name4 r0))) +(assert (not (name name4 name0))) +(assert (not (name name4 r1))) +(assert (not (name name3 r2))) +(assert (not (name name3 r3))) +(assert (not (name name3 r4))) +(assert (not (name name3 r5))) +(assert (not (name name3 r6))) +(assert (not (name name3 r7))) +(assert (not (name name3 r8))) +(assert (not (name name3 r9))) +(assert (not (name name3 name19))) +(assert (not (name name3 name18))) +(assert (not (name name3 name17))) +(assert (not (name name3 name16))) +(assert (not (name name3 r10))) +(assert (not (name name3 name15))) +(assert (not (name name3 name14))) +(assert (not (name name3 r12))) +(assert (not (name name3 name13))) +(assert (not (name name3 r11))) +(assert (not (name name3 name12))) +(assert (not (name name3 r14))) +(assert (not (name name3 name11))) +(assert (not (name name3 r13))) +(assert (not (name name3 name10))) +(assert (not (name name3 r16))) +(assert (not (name name3 r15))) +(assert (not (name name3 r18))) +(assert (not (name name3 r17))) +(assert (not (name name3 r19))) +(assert (not (name name3 name6))) +(assert (not (name name3 name5))) +(assert (not (name name3 name4))) +(assert (not (name name3 name3))) +(assert (not (name name3 name9))) +(assert (not (name name3 name8))) +(assert (not (name name3 name7))) +(assert (not (name name3 name2))) +(assert (not (name name3 name1))) +(assert (not (name name3 r0))) +(assert (not (name name3 name0))) +(assert (not (name name3 r1))) +(assert (not (name name9 r2))) +(assert (not (name name9 r3))) +(assert (not (name name9 r4))) +(assert (not (name name9 r5))) +(assert (not (name name9 r6))) +(assert (not (name name9 r7))) +(assert (not (name name9 r8))) +(assert (not (name name9 r9))) +(assert (not (name name9 name19))) +(assert (not (name name9 name18))) +(assert (not (name name9 name17))) +(assert (not (name name9 name16))) +(assert (not (name name9 r10))) +(assert (not (name name9 name15))) +(assert (not (name name9 name14))) +(assert (not (name name9 r12))) +(assert (not (name name9 name13))) +(assert (not (name name9 r11))) +(assert (not (name name9 name12))) +(assert (not (name name9 r14))) +(assert (not (name name9 name11))) +(assert (not (name name9 r13))) +(assert (not (name name9 name10))) +(assert (not (name name9 r16))) +(assert (not (name name9 r15))) +(assert (not (name name9 r18))) +(assert (not (name name9 r17))) +(assert (not (name name9 r19))) +(assert (not (name name9 name6))) +(assert (not (name name9 name5))) +(assert (not (name name9 name4))) +(assert (not (name name9 name3))) +(assert (not (name name9 name9))) +(assert (not (name name9 name8))) +(assert (not (name name9 name7))) +(assert (not (name name9 name2))) +(assert (not (name name9 name1))) +(assert (not (name name9 r0))) +(assert (not (name name9 name0))) +(assert (not (name name9 r1))) +(assert (not (name name8 r2))) +(assert (not (name name8 r3))) +(assert (not (name name8 r4))) +(assert (not (name name8 r5))) +(assert (not (name name8 r6))) +(assert (not (name name8 r7))) +(assert (not (name name8 r8))) +(assert (not (name name8 r9))) +(assert (not (name name8 name19))) +(assert (not (name name8 name18))) +(assert (not (name name8 name17))) +(assert (not (name name8 name16))) +(assert (not (name name8 r10))) +(assert (not (name name8 name15))) +(assert (not (name name8 name14))) +(assert (not (name name8 r12))) +(assert (not (name name8 name13))) +(assert (not (name name8 r11))) +(assert (not (name name8 name12))) +(assert (not (name name8 r14))) +(assert (not (name name8 name11))) +(assert (not (name name8 r13))) +(assert (not (name name8 name10))) +(assert (not (name name8 r16))) +(assert (not (name name8 r15))) +(assert (not (name name8 r18))) +(assert (not (name name8 r17))) +(assert (not (name name8 r19))) +(assert (not (name name8 name6))) +(assert (not (name name8 name5))) +(assert (not (name name8 name4))) +(assert (not (name name8 name3))) +(assert (not (name name8 name9))) +(assert (not (name name8 name8))) +(assert (not (name name8 name7))) +(assert (not (name name8 name2))) +(assert (not (name name8 name1))) +(assert (not (name name8 r0))) +(assert (not (name name8 name0))) +(assert (not (name name8 r1))) +(assert (not (name name7 r2))) +(assert (not (name name7 r3))) +(assert (not (name name7 r4))) +(assert (not (name name7 r5))) +(assert (not (name name7 r6))) +(assert (not (name name7 r7))) +(assert (not (name name7 r8))) +(assert (not (name name7 r9))) +(assert (not (name name7 name19))) +(assert (not (name name7 name18))) +(assert (not (name name7 name17))) +(assert (not (name name7 name16))) +(assert (not (name name7 r10))) +(assert (not (name name7 name15))) +(assert (not (name name7 name14))) +(assert (not (name name7 r12))) +(assert (not (name name7 name13))) +(assert (not (name name7 r11))) +(assert (not (name name7 name12))) +(assert (not (name name7 r14))) +(assert (not (name name7 name11))) +(assert (not (name name7 r13))) +(assert (not (name name7 name10))) +(assert (not (name name7 r16))) +(assert (not (name name7 r15))) +(assert (not (name name7 r18))) +(assert (not (name name7 r17))) +(assert (not (name name7 r19))) +(assert (not (name name7 name6))) +(assert (not (name name7 name5))) +(assert (not (name name7 name4))) +(assert (not (name name7 name3))) +(assert (not (name name7 name9))) +(assert (not (name name7 name8))) +(assert (not (name name7 name7))) +(assert (not (name name7 name2))) +(assert (not (name name7 name1))) +(assert (not (name name7 r0))) +(assert (not (name name7 name0))) +(assert (not (name name7 r1))) +(assert (not (name name2 r2))) +(assert (not (name name2 r3))) +(assert (not (name name2 r4))) +(assert (not (name name2 r5))) +(assert (not (name name2 r6))) +(assert (not (name name2 r7))) +(assert (not (name name2 r8))) +(assert (not (name name2 r9))) +(assert (not (name name2 name19))) +(assert (not (name name2 name18))) +(assert (not (name name2 name17))) +(assert (not (name name2 name16))) +(assert (not (name name2 r10))) +(assert (not (name name2 name15))) +(assert (not (name name2 name14))) +(assert (not (name name2 r12))) +(assert (not (name name2 name13))) +(assert (not (name name2 r11))) +(assert (not (name name2 name12))) +(assert (not (name name2 r14))) +(assert (not (name name2 name11))) +(assert (not (name name2 r13))) +(assert (not (name name2 name10))) +(assert (not (name name2 r16))) +(assert (not (name name2 r15))) +(assert (not (name name2 r18))) +(assert (not (name name2 r17))) +(assert (not (name name2 r19))) +(assert (not (name name2 name6))) +(assert (not (name name2 name5))) +(assert (not (name name2 name4))) +(assert (not (name name2 name3))) +(assert (not (name name2 name9))) +(assert (not (name name2 name8))) +(assert (not (name name2 name7))) +(assert (not (name name2 name2))) +(assert (not (name name2 name1))) +(assert (not (name name2 r0))) +(assert (not (name name2 name0))) +(assert (not (name name2 r1))) +(assert (not (name name1 r2))) +(assert (not (name name1 r3))) +(assert (not (name name1 r4))) +(assert (not (name name1 r5))) +(assert (not (name name1 r6))) +(assert (not (name name1 r7))) +(assert (not (name name1 r8))) +(assert (not (name name1 r9))) +(assert (not (name name1 name19))) +(assert (not (name name1 name18))) +(assert (not (name name1 name17))) +(assert (not (name name1 name16))) +(assert (not (name name1 r10))) +(assert (not (name name1 name15))) +(assert (not (name name1 name14))) +(assert (not (name name1 r12))) +(assert (not (name name1 name13))) +(assert (not (name name1 r11))) +(assert (not (name name1 name12))) +(assert (not (name name1 r14))) +(assert (not (name name1 name11))) +(assert (not (name name1 r13))) +(assert (not (name name1 name10))) +(assert (not (name name1 r16))) +(assert (not (name name1 r15))) +(assert (not (name name1 r18))) +(assert (not (name name1 r17))) +(assert (not (name name1 r19))) +(assert (not (name name1 name6))) +(assert (not (name name1 name5))) +(assert (not (name name1 name4))) +(assert (not (name name1 name3))) +(assert (not (name name1 name9))) +(assert (not (name name1 name8))) +(assert (not (name name1 name7))) +(assert (not (name name1 name2))) +(assert (not (name name1 name1))) +(assert (not (name name1 r0))) +(assert (not (name name1 name0))) +(assert (not (name name1 r1))) +(assert (not (name r0 r2))) +(assert (not (name r0 r3))) +(assert (not (name r0 r4))) +(assert (not (name r0 r5))) +(assert (not (name r0 r6))) +(assert (not (name r0 r7))) +(assert (not (name r0 r8))) +(assert (not (name r0 r9))) +(assert (not (name r0 r10))) +(assert (not (name r0 r12))) +(assert (not (name r0 r11))) +(assert (not (name r0 r14))) +(assert (not (name r0 r13))) +(assert (not (name r0 r16))) +(assert (not (name r0 r15))) +(assert (not (name r0 r18))) +(assert (not (name r0 r17))) +(assert (not (name r0 r19))) +(assert (not (name r0 r0))) +(assert (not (name r0 r1))) +(assert (not (name name0 r2))) +(assert (not (name name0 r3))) +(assert (not (name name0 r4))) +(assert (not (name name0 r5))) +(assert (not (name name0 r6))) +(assert (not (name name0 r7))) +(assert (not (name name0 r8))) +(assert (not (name name0 r9))) +(assert (not (name name0 name19))) +(assert (not (name name0 name18))) +(assert (not (name name0 name17))) +(assert (not (name name0 name16))) +(assert (not (name name0 r10))) +(assert (not (name name0 name15))) +(assert (not (name name0 name14))) +(assert (not (name name0 r12))) +(assert (not (name name0 name13))) +(assert (not (name name0 r11))) +(assert (not (name name0 name12))) +(assert (not (name name0 r14))) +(assert (not (name name0 name11))) +(assert (not (name name0 r13))) +(assert (not (name name0 name10))) +(assert (not (name name0 r16))) +(assert (not (name name0 r15))) +(assert (not (name name0 r18))) +(assert (not (name name0 r17))) +(assert (not (name name0 r19))) +(assert (not (name name0 name6))) +(assert (not (name name0 name5))) +(assert (not (name name0 name4))) +(assert (not (name name0 name3))) +(assert (not (name name0 name9))) +(assert (not (name name0 name8))) +(assert (not (name name0 name7))) +(assert (not (name name0 name2))) +(assert (not (name name0 name1))) +(assert (not (name name0 r0))) +(assert (not (name name0 name0))) +(assert (not (name name0 r1))) +(assert (not (name r1 r2))) +(assert (not (name r1 r3))) +(assert (not (name r1 r4))) +(assert (not (name r1 r5))) +(assert (not (name r1 r6))) +(assert (not (name r1 r7))) +(assert (not (name r1 r8))) +(assert (not (name r1 r9))) +(assert (not (name r1 r10))) +(assert (not (name r1 r12))) +(assert (not (name r1 r11))) +(assert (not (name r1 r14))) +(assert (not (name r1 r13))) +(assert (not (name r1 r16))) +(assert (not (name r1 r15))) +(assert (not (name r1 r18))) +(assert (not (name r1 r17))) +(assert (not (name r1 r19))) +(assert (not (name r1 r0))) +(assert (not (name r1 r1))) +(assert (requires r2 r3)) +(assert (requires r1 r2)) +(assert (not (requires r2 name19))) +(assert (not (requires r2 name18))) +(assert (not (requires r2 name17))) +(assert (not (requires r2 name16))) +(assert (not (requires r2 name15))) +(assert (not (requires r2 name14))) +(assert (not (requires r2 name13))) +(assert (not (requires r2 name12))) +(assert (not (requires r2 name11))) +(assert (not (requires r2 name10))) +(assert (not (requires r2 name6))) +(assert (not (requires r2 name5))) +(assert (not (requires r2 name4))) +(assert (not (requires r2 name3))) +(assert (not (requires r2 name9))) +(assert (not (requires r2 name8))) +(assert (not (requires r2 name7))) +(assert (not (requires r2 name2))) +(assert (not (requires r2 name1))) +(assert (not (requires r2 name0))) +(assert (not (requires r3 name19))) +(assert (not (requires r3 name18))) +(assert (not (requires r3 name17))) +(assert (not (requires r3 name16))) +(assert (not (requires r3 name15))) +(assert (not (requires r3 name14))) +(assert (not (requires r3 name13))) +(assert (not (requires r3 name12))) +(assert (not (requires r3 name11))) +(assert (not (requires r3 name10))) +(assert (not (requires r3 name6))) +(assert (not (requires r3 name5))) +(assert (not (requires r3 name4))) +(assert (not (requires r3 name3))) +(assert (not (requires r3 name9))) +(assert (not (requires r3 name8))) +(assert (not (requires r3 name7))) +(assert (not (requires r3 name2))) +(assert (not (requires r3 name1))) +(assert (not (requires r3 name0))) +(assert (not (requires r4 name19))) +(assert (not (requires r4 name18))) +(assert (not (requires r4 name17))) +(assert (not (requires r4 name16))) +(assert (not (requires r4 name15))) +(assert (not (requires r4 name14))) +(assert (not (requires r4 name13))) +(assert (not (requires r4 name12))) +(assert (not (requires r4 name11))) +(assert (not (requires r4 name10))) +(assert (not (requires r4 name6))) +(assert (not (requires r4 name5))) +(assert (not (requires r4 name4))) +(assert (not (requires r4 name3))) +(assert (not (requires r4 name9))) +(assert (not (requires r4 name8))) +(assert (not (requires r4 name7))) +(assert (not (requires r4 name2))) +(assert (not (requires r4 name1))) +(assert (not (requires r4 name0))) +(assert (not (requires r5 name19))) +(assert (not (requires r5 name18))) +(assert (not (requires r5 name17))) +(assert (not (requires r5 name16))) +(assert (not (requires r5 name15))) +(assert (not (requires r5 name14))) +(assert (not (requires r5 name13))) +(assert (not (requires r5 name12))) +(assert (not (requires r5 name11))) +(assert (not (requires r5 name10))) +(assert (not (requires r5 name6))) +(assert (not (requires r5 name5))) +(assert (not (requires r5 name4))) +(assert (not (requires r5 name3))) +(assert (not (requires r5 name9))) +(assert (not (requires r5 name8))) +(assert (not (requires r5 name7))) +(assert (not (requires r5 name2))) +(assert (not (requires r5 name1))) +(assert (not (requires r5 name0))) +(assert (not (requires r6 name19))) +(assert (not (requires r6 name18))) +(assert (not (requires r6 name17))) +(assert (not (requires r6 name16))) +(assert (not (requires r6 name15))) +(assert (not (requires r6 name14))) +(assert (not (requires r6 name13))) +(assert (not (requires r6 name12))) +(assert (not (requires r6 name11))) +(assert (not (requires r6 name10))) +(assert (not (requires r6 name6))) +(assert (not (requires r6 name5))) +(assert (not (requires r6 name4))) +(assert (not (requires r6 name3))) +(assert (not (requires r6 name9))) +(assert (not (requires r6 name8))) +(assert (not (requires r6 name7))) +(assert (not (requires r6 name2))) +(assert (not (requires r6 name1))) +(assert (not (requires r6 name0))) +(assert (not (requires r7 name19))) +(assert (not (requires r7 name18))) +(assert (not (requires r7 name17))) +(assert (not (requires r7 name16))) +(assert (not (requires r7 name15))) +(assert (not (requires r7 name14))) +(assert (not (requires r7 name13))) +(assert (not (requires r7 name12))) +(assert (not (requires r7 name11))) +(assert (not (requires r7 name10))) +(assert (not (requires r7 name6))) +(assert (not (requires r7 name5))) +(assert (not (requires r7 name4))) +(assert (not (requires r7 name3))) +(assert (not (requires r7 name9))) +(assert (not (requires r7 name8))) +(assert (not (requires r7 name7))) +(assert (not (requires r7 name2))) +(assert (not (requires r7 name1))) +(assert (not (requires r7 name0))) +(assert (not (requires r8 name19))) +(assert (not (requires r8 name18))) +(assert (not (requires r8 name17))) +(assert (not (requires r8 name16))) +(assert (not (requires r8 name15))) +(assert (not (requires r8 name14))) +(assert (not (requires r8 name13))) +(assert (not (requires r8 name12))) +(assert (not (requires r8 name11))) +(assert (not (requires r8 name10))) +(assert (not (requires r8 name6))) +(assert (not (requires r8 name5))) +(assert (not (requires r8 name4))) +(assert (not (requires r8 name3))) +(assert (not (requires r8 name9))) +(assert (not (requires r8 name8))) +(assert (not (requires r8 name7))) +(assert (not (requires r8 name2))) +(assert (not (requires r8 name1))) +(assert (not (requires r8 name0))) +(assert (not (requires r9 name19))) +(assert (not (requires r9 name18))) +(assert (not (requires r9 name17))) +(assert (not (requires r9 name16))) +(assert (not (requires r9 name15))) +(assert (not (requires r9 name14))) +(assert (not (requires r9 name13))) +(assert (not (requires r9 name12))) +(assert (not (requires r9 name11))) +(assert (not (requires r9 name10))) +(assert (not (requires r9 name6))) +(assert (not (requires r9 name5))) +(assert (not (requires r9 name4))) +(assert (not (requires r9 name3))) +(assert (not (requires r9 name9))) +(assert (not (requires r9 name8))) +(assert (not (requires r9 name7))) +(assert (not (requires r9 name2))) +(assert (not (requires r9 name1))) +(assert (not (requires r9 name0))) +(assert (not (requires name19 r2))) +(assert (not (requires name19 r3))) +(assert (not (requires name19 r4))) +(assert (not (requires name19 r5))) +(assert (not (requires name19 r6))) +(assert (not (requires name19 r7))) +(assert (not (requires name19 r8))) +(assert (not (requires name19 r9))) +(assert (not (requires name19 name19))) +(assert (not (requires name19 name18))) +(assert (not (requires name19 name17))) +(assert (not (requires name19 name16))) +(assert (not (requires name19 r10))) +(assert (not (requires name19 name15))) +(assert (not (requires name19 name14))) +(assert (not (requires name19 r12))) +(assert (not (requires name19 name13))) +(assert (not (requires name19 r11))) +(assert (not (requires name19 name12))) +(assert (not (requires name19 r14))) +(assert (not (requires name19 name11))) +(assert (not (requires name19 r13))) +(assert (not (requires name19 name10))) +(assert (not (requires name19 r16))) +(assert (not (requires name19 r15))) +(assert (not (requires name19 r18))) +(assert (not (requires name19 r17))) +(assert (not (requires name19 r19))) +(assert (not (requires name19 name6))) +(assert (not (requires name19 name5))) +(assert (not (requires name19 name4))) +(assert (not (requires name19 name3))) +(assert (not (requires name19 name9))) +(assert (not (requires name19 name8))) +(assert (not (requires name19 name7))) +(assert (not (requires name19 name2))) +(assert (not (requires name19 name1))) +(assert (not (requires name19 r0))) +(assert (not (requires name19 name0))) +(assert (not (requires name19 r1))) +(assert (not (requires name18 r2))) +(assert (not (requires name18 r3))) +(assert (not (requires name18 r4))) +(assert (not (requires name18 r5))) +(assert (not (requires name18 r6))) +(assert (not (requires name18 r7))) +(assert (not (requires name18 r8))) +(assert (not (requires name18 r9))) +(assert (not (requires name18 name19))) +(assert (not (requires name18 name18))) +(assert (not (requires name18 name17))) +(assert (not (requires name18 name16))) +(assert (not (requires name18 r10))) +(assert (not (requires name18 name15))) +(assert (not (requires name18 name14))) +(assert (not (requires name18 r12))) +(assert (not (requires name18 name13))) +(assert (not (requires name18 r11))) +(assert (not (requires name18 name12))) +(assert (not (requires name18 r14))) +(assert (not (requires name18 name11))) +(assert (not (requires name18 r13))) +(assert (not (requires name18 name10))) +(assert (not (requires name18 r16))) +(assert (not (requires name18 r15))) +(assert (not (requires name18 r18))) +(assert (not (requires name18 r17))) +(assert (not (requires name18 r19))) +(assert (not (requires name18 name6))) +(assert (not (requires name18 name5))) +(assert (not (requires name18 name4))) +(assert (not (requires name18 name3))) +(assert (not (requires name18 name9))) +(assert (not (requires name18 name8))) +(assert (not (requires name18 name7))) +(assert (not (requires name18 name2))) +(assert (not (requires name18 name1))) +(assert (not (requires name18 r0))) +(assert (not (requires name18 name0))) +(assert (not (requires name18 r1))) +(assert (not (requires name17 r2))) +(assert (not (requires name17 r3))) +(assert (not (requires name17 r4))) +(assert (not (requires name17 r5))) +(assert (not (requires name17 r6))) +(assert (not (requires name17 r7))) +(assert (not (requires name17 r8))) +(assert (not (requires name17 r9))) +(assert (not (requires name17 name19))) +(assert (not (requires name17 name18))) +(assert (not (requires name17 name17))) +(assert (not (requires name17 name16))) +(assert (not (requires name17 r10))) +(assert (not (requires name17 name15))) +(assert (not (requires name17 name14))) +(assert (not (requires name17 r12))) +(assert (not (requires name17 name13))) +(assert (not (requires name17 r11))) +(assert (not (requires name17 name12))) +(assert (not (requires name17 r14))) +(assert (not (requires name17 name11))) +(assert (not (requires name17 r13))) +(assert (not (requires name17 name10))) +(assert (not (requires name17 r16))) +(assert (not (requires name17 r15))) +(assert (not (requires name17 r18))) +(assert (not (requires name17 r17))) +(assert (not (requires name17 r19))) +(assert (not (requires name17 name6))) +(assert (not (requires name17 name5))) +(assert (not (requires name17 name4))) +(assert (not (requires name17 name3))) +(assert (not (requires name17 name9))) +(assert (not (requires name17 name8))) +(assert (not (requires name17 name7))) +(assert (not (requires name17 name2))) +(assert (not (requires name17 name1))) +(assert (not (requires name17 r0))) +(assert (not (requires name17 name0))) +(assert (not (requires name17 r1))) +(assert (not (requires name16 r2))) +(assert (not (requires name16 r3))) +(assert (not (requires name16 r4))) +(assert (not (requires name16 r5))) +(assert (not (requires name16 r6))) +(assert (not (requires name16 r7))) +(assert (not (requires name16 r8))) +(assert (not (requires name16 r9))) +(assert (not (requires name16 name19))) +(assert (not (requires name16 name18))) +(assert (not (requires name16 name17))) +(assert (not (requires name16 name16))) +(assert (not (requires name16 r10))) +(assert (not (requires name16 name15))) +(assert (not (requires name16 name14))) +(assert (not (requires name16 r12))) +(assert (not (requires name16 name13))) +(assert (not (requires name16 r11))) +(assert (not (requires name16 name12))) +(assert (not (requires name16 r14))) +(assert (not (requires name16 name11))) +(assert (not (requires name16 r13))) +(assert (not (requires name16 name10))) +(assert (not (requires name16 r16))) +(assert (not (requires name16 r15))) +(assert (not (requires name16 r18))) +(assert (not (requires name16 r17))) +(assert (not (requires name16 r19))) +(assert (not (requires name16 name6))) +(assert (not (requires name16 name5))) +(assert (not (requires name16 name4))) +(assert (not (requires name16 name3))) +(assert (not (requires name16 name9))) +(assert (not (requires name16 name8))) +(assert (not (requires name16 name7))) +(assert (not (requires name16 name2))) +(assert (not (requires name16 name1))) +(assert (not (requires name16 r0))) +(assert (not (requires name16 name0))) +(assert (not (requires name16 r1))) +(assert (not (requires r10 name19))) +(assert (not (requires r10 name18))) +(assert (not (requires r10 name17))) +(assert (not (requires r10 name16))) +(assert (not (requires r10 name15))) +(assert (not (requires r10 name14))) +(assert (not (requires r10 name13))) +(assert (not (requires r10 name12))) +(assert (not (requires r10 name11))) +(assert (not (requires r10 name10))) +(assert (not (requires r10 name6))) +(assert (not (requires r10 name5))) +(assert (not (requires r10 name4))) +(assert (not (requires r10 name3))) +(assert (not (requires r10 name9))) +(assert (not (requires r10 name8))) +(assert (not (requires r10 name7))) +(assert (not (requires r10 name2))) +(assert (not (requires r10 name1))) +(assert (not (requires r10 name0))) +(assert (not (requires name15 r2))) +(assert (not (requires name15 r3))) +(assert (not (requires name15 r4))) +(assert (not (requires name15 r5))) +(assert (not (requires name15 r6))) +(assert (not (requires name15 r7))) +(assert (not (requires name15 r8))) +(assert (not (requires name15 r9))) +(assert (not (requires name15 name19))) +(assert (not (requires name15 name18))) +(assert (not (requires name15 name17))) +(assert (not (requires name15 name16))) +(assert (not (requires name15 r10))) +(assert (not (requires name15 name15))) +(assert (not (requires name15 name14))) +(assert (not (requires name15 r12))) +(assert (not (requires name15 name13))) +(assert (not (requires name15 r11))) +(assert (not (requires name15 name12))) +(assert (not (requires name15 r14))) +(assert (not (requires name15 name11))) +(assert (not (requires name15 r13))) +(assert (not (requires name15 name10))) +(assert (not (requires name15 r16))) +(assert (not (requires name15 r15))) +(assert (not (requires name15 r18))) +(assert (not (requires name15 r17))) +(assert (not (requires name15 r19))) +(assert (not (requires name15 name6))) +(assert (not (requires name15 name5))) +(assert (not (requires name15 name4))) +(assert (not (requires name15 name3))) +(assert (not (requires name15 name9))) +(assert (not (requires name15 name8))) +(assert (not (requires name15 name7))) +(assert (not (requires name15 name2))) +(assert (not (requires name15 name1))) +(assert (not (requires name15 r0))) +(assert (not (requires name15 name0))) +(assert (not (requires name15 r1))) +(assert (not (requires name14 r2))) +(assert (not (requires name14 r3))) +(assert (not (requires name14 r4))) +(assert (not (requires name14 r5))) +(assert (not (requires name14 r6))) +(assert (not (requires name14 r7))) +(assert (not (requires name14 r8))) +(assert (not (requires name14 r9))) +(assert (not (requires name14 name19))) +(assert (not (requires name14 name18))) +(assert (not (requires name14 name17))) +(assert (not (requires name14 name16))) +(assert (not (requires name14 r10))) +(assert (not (requires name14 name15))) +(assert (not (requires name14 name14))) +(assert (not (requires name14 r12))) +(assert (not (requires name14 name13))) +(assert (not (requires name14 r11))) +(assert (not (requires name14 name12))) +(assert (not (requires name14 r14))) +(assert (not (requires name14 name11))) +(assert (not (requires name14 r13))) +(assert (not (requires name14 name10))) +(assert (not (requires name14 r16))) +(assert (not (requires name14 r15))) +(assert (not (requires name14 r18))) +(assert (not (requires name14 r17))) +(assert (not (requires name14 r19))) +(assert (not (requires name14 name6))) +(assert (not (requires name14 name5))) +(assert (not (requires name14 name4))) +(assert (not (requires name14 name3))) +(assert (not (requires name14 name9))) +(assert (not (requires name14 name8))) +(assert (not (requires name14 name7))) +(assert (not (requires name14 name2))) +(assert (not (requires name14 name1))) +(assert (not (requires name14 r0))) +(assert (not (requires name14 name0))) +(assert (not (requires name14 r1))) +(assert (not (requires r12 name19))) +(assert (not (requires r12 name18))) +(assert (not (requires r12 name17))) +(assert (not (requires r12 name16))) +(assert (not (requires r12 name15))) +(assert (not (requires r12 name14))) +(assert (not (requires r12 name13))) +(assert (not (requires r12 name12))) +(assert (not (requires r12 name11))) +(assert (not (requires r12 name10))) +(assert (not (requires r12 name6))) +(assert (not (requires r12 name5))) +(assert (not (requires r12 name4))) +(assert (not (requires r12 name3))) +(assert (not (requires r12 name9))) +(assert (not (requires r12 name8))) +(assert (not (requires r12 name7))) +(assert (not (requires r12 name2))) +(assert (not (requires r12 name1))) +(assert (not (requires r12 name0))) +(assert (not (requires name13 r2))) +(assert (not (requires name13 r3))) +(assert (not (requires name13 r4))) +(assert (not (requires name13 r5))) +(assert (not (requires name13 r6))) +(assert (not (requires name13 r7))) +(assert (not (requires name13 r8))) +(assert (not (requires name13 r9))) +(assert (not (requires name13 name19))) +(assert (not (requires name13 name18))) +(assert (not (requires name13 name17))) +(assert (not (requires name13 name16))) +(assert (not (requires name13 r10))) +(assert (not (requires name13 name15))) +(assert (not (requires name13 name14))) +(assert (not (requires name13 r12))) +(assert (not (requires name13 name13))) +(assert (not (requires name13 r11))) +(assert (not (requires name13 name12))) +(assert (not (requires name13 r14))) +(assert (not (requires name13 name11))) +(assert (not (requires name13 r13))) +(assert (not (requires name13 name10))) +(assert (not (requires name13 r16))) +(assert (not (requires name13 r15))) +(assert (not (requires name13 r18))) +(assert (not (requires name13 r17))) +(assert (not (requires name13 r19))) +(assert (not (requires name13 name6))) +(assert (not (requires name13 name5))) +(assert (not (requires name13 name4))) +(assert (not (requires name13 name3))) +(assert (not (requires name13 name9))) +(assert (not (requires name13 name8))) +(assert (not (requires name13 name7))) +(assert (not (requires name13 name2))) +(assert (not (requires name13 name1))) +(assert (not (requires name13 r0))) +(assert (not (requires name13 name0))) +(assert (not (requires name13 r1))) +(assert (not (requires r11 name19))) +(assert (not (requires r11 name18))) +(assert (not (requires r11 name17))) +(assert (not (requires r11 name16))) +(assert (not (requires r11 name15))) +(assert (not (requires r11 name14))) +(assert (not (requires r11 name13))) +(assert (not (requires r11 name12))) +(assert (not (requires r11 name11))) +(assert (not (requires r11 name10))) +(assert (not (requires r11 name6))) +(assert (not (requires r11 name5))) +(assert (not (requires r11 name4))) +(assert (not (requires r11 name3))) +(assert (not (requires r11 name9))) +(assert (not (requires r11 name8))) +(assert (not (requires r11 name7))) +(assert (not (requires r11 name2))) +(assert (not (requires r11 name1))) +(assert (not (requires r11 name0))) +(assert (not (requires name12 r2))) +(assert (not (requires name12 r3))) +(assert (not (requires name12 r4))) +(assert (not (requires name12 r5))) +(assert (not (requires name12 r6))) +(assert (not (requires name12 r7))) +(assert (not (requires name12 r8))) +(assert (not (requires name12 r9))) +(assert (not (requires name12 name19))) +(assert (not (requires name12 name18))) +(assert (not (requires name12 name17))) +(assert (not (requires name12 name16))) +(assert (not (requires name12 r10))) +(assert (not (requires name12 name15))) +(assert (not (requires name12 name14))) +(assert (not (requires name12 r12))) +(assert (not (requires name12 name13))) +(assert (not (requires name12 r11))) +(assert (not (requires name12 name12))) +(assert (not (requires name12 r14))) +(assert (not (requires name12 name11))) +(assert (not (requires name12 r13))) +(assert (not (requires name12 name10))) +(assert (not (requires name12 r16))) +(assert (not (requires name12 r15))) +(assert (not (requires name12 r18))) +(assert (not (requires name12 r17))) +(assert (not (requires name12 r19))) +(assert (not (requires name12 name6))) +(assert (not (requires name12 name5))) +(assert (not (requires name12 name4))) +(assert (not (requires name12 name3))) +(assert (not (requires name12 name9))) +(assert (not (requires name12 name8))) +(assert (not (requires name12 name7))) +(assert (not (requires name12 name2))) +(assert (not (requires name12 name1))) +(assert (not (requires name12 r0))) +(assert (not (requires name12 name0))) +(assert (not (requires name12 r1))) +(assert (not (requires r14 name19))) +(assert (not (requires r14 name18))) +(assert (not (requires r14 name17))) +(assert (not (requires r14 name16))) +(assert (not (requires r14 name15))) +(assert (not (requires r14 name14))) +(assert (not (requires r14 name13))) +(assert (not (requires r14 name12))) +(assert (not (requires r14 name11))) +(assert (not (requires r14 name10))) +(assert (not (requires r14 name6))) +(assert (not (requires r14 name5))) +(assert (not (requires r14 name4))) +(assert (not (requires r14 name3))) +(assert (not (requires r14 name9))) +(assert (not (requires r14 name8))) +(assert (not (requires r14 name7))) +(assert (not (requires r14 name2))) +(assert (not (requires r14 name1))) +(assert (not (requires r14 name0))) +(assert (not (requires name11 r2))) +(assert (not (requires name11 r3))) +(assert (not (requires name11 r4))) +(assert (not (requires name11 r5))) +(assert (not (requires name11 r6))) +(assert (not (requires name11 r7))) +(assert (not (requires name11 r8))) +(assert (not (requires name11 r9))) +(assert (not (requires name11 name19))) +(assert (not (requires name11 name18))) +(assert (not (requires name11 name17))) +(assert (not (requires name11 name16))) +(assert (not (requires name11 r10))) +(assert (not (requires name11 name15))) +(assert (not (requires name11 name14))) +(assert (not (requires name11 r12))) +(assert (not (requires name11 name13))) +(assert (not (requires name11 r11))) +(assert (not (requires name11 name12))) +(assert (not (requires name11 r14))) +(assert (not (requires name11 name11))) +(assert (not (requires name11 r13))) +(assert (not (requires name11 name10))) +(assert (not (requires name11 r16))) +(assert (not (requires name11 r15))) +(assert (not (requires name11 r18))) +(assert (not (requires name11 r17))) +(assert (not (requires name11 r19))) +(assert (not (requires name11 name6))) +(assert (not (requires name11 name5))) +(assert (not (requires name11 name4))) +(assert (not (requires name11 name3))) +(assert (not (requires name11 name9))) +(assert (not (requires name11 name8))) +(assert (not (requires name11 name7))) +(assert (not (requires name11 name2))) +(assert (not (requires name11 name1))) +(assert (not (requires name11 r0))) +(assert (not (requires name11 name0))) +(assert (not (requires name11 r1))) +(assert (not (requires r13 name19))) +(assert (not (requires r13 name18))) +(assert (not (requires r13 name17))) +(assert (not (requires r13 name16))) +(assert (not (requires r13 name15))) +(assert (not (requires r13 name14))) +(assert (not (requires r13 name13))) +(assert (not (requires r13 name12))) +(assert (not (requires r13 name11))) +(assert (not (requires r13 name10))) +(assert (not (requires r13 name6))) +(assert (not (requires r13 name5))) +(assert (not (requires r13 name4))) +(assert (not (requires r13 name3))) +(assert (not (requires r13 name9))) +(assert (not (requires r13 name8))) +(assert (not (requires r13 name7))) +(assert (not (requires r13 name2))) +(assert (not (requires r13 name1))) +(assert (not (requires r13 name0))) +(assert (not (requires name10 r2))) +(assert (not (requires name10 r3))) +(assert (not (requires name10 r4))) +(assert (not (requires name10 r5))) +(assert (not (requires name10 r6))) +(assert (not (requires name10 r7))) +(assert (not (requires name10 r8))) +(assert (not (requires name10 r9))) +(assert (not (requires name10 name19))) +(assert (not (requires name10 name18))) +(assert (not (requires name10 name17))) +(assert (not (requires name10 name16))) +(assert (not (requires name10 r10))) +(assert (not (requires name10 name15))) +(assert (not (requires name10 name14))) +(assert (not (requires name10 r12))) +(assert (not (requires name10 name13))) +(assert (not (requires name10 r11))) +(assert (not (requires name10 name12))) +(assert (not (requires name10 r14))) +(assert (not (requires name10 name11))) +(assert (not (requires name10 r13))) +(assert (not (requires name10 name10))) +(assert (not (requires name10 r16))) +(assert (not (requires name10 r15))) +(assert (not (requires name10 r18))) +(assert (not (requires name10 r17))) +(assert (not (requires name10 r19))) +(assert (not (requires name10 name6))) +(assert (not (requires name10 name5))) +(assert (not (requires name10 name4))) +(assert (not (requires name10 name3))) +(assert (not (requires name10 name9))) +(assert (not (requires name10 name8))) +(assert (not (requires name10 name7))) +(assert (not (requires name10 name2))) +(assert (not (requires name10 name1))) +(assert (not (requires name10 r0))) +(assert (not (requires name10 name0))) +(assert (not (requires name10 r1))) +(assert (not (requires r16 name19))) +(assert (not (requires r16 name18))) +(assert (not (requires r16 name17))) +(assert (not (requires r16 name16))) +(assert (not (requires r16 name15))) +(assert (not (requires r16 name14))) +(assert (not (requires r16 name13))) +(assert (not (requires r16 name12))) +(assert (not (requires r16 name11))) +(assert (not (requires r16 name10))) +(assert (not (requires r16 name6))) +(assert (not (requires r16 name5))) +(assert (not (requires r16 name4))) +(assert (not (requires r16 name3))) +(assert (not (requires r16 name9))) +(assert (not (requires r16 name8))) +(assert (not (requires r16 name7))) +(assert (not (requires r16 name2))) +(assert (not (requires r16 name1))) +(assert (not (requires r16 name0))) +(assert (not (requires r15 name19))) +(assert (not (requires r15 name18))) +(assert (not (requires r15 name17))) +(assert (not (requires r15 name16))) +(assert (not (requires r15 name15))) +(assert (not (requires r15 name14))) +(assert (not (requires r15 name13))) +(assert (not (requires r15 name12))) +(assert (not (requires r15 name11))) +(assert (not (requires r15 name10))) +(assert (not (requires r15 name6))) +(assert (not (requires r15 name5))) +(assert (not (requires r15 name4))) +(assert (not (requires r15 name3))) +(assert (not (requires r15 name9))) +(assert (not (requires r15 name8))) +(assert (not (requires r15 name7))) +(assert (not (requires r15 name2))) +(assert (not (requires r15 name1))) +(assert (not (requires r15 name0))) +(assert (not (requires r18 name19))) +(assert (not (requires r18 name18))) +(assert (not (requires r18 name17))) +(assert (not (requires r18 name16))) +(assert (not (requires r18 name15))) +(assert (not (requires r18 name14))) +(assert (not (requires r18 name13))) +(assert (not (requires r18 name12))) +(assert (not (requires r18 name11))) +(assert (not (requires r18 name10))) +(assert (not (requires r18 name6))) +(assert (not (requires r18 name5))) +(assert (not (requires r18 name4))) +(assert (not (requires r18 name3))) +(assert (not (requires r18 name9))) +(assert (not (requires r18 name8))) +(assert (not (requires r18 name7))) +(assert (not (requires r18 name2))) +(assert (not (requires r18 name1))) +(assert (not (requires r18 name0))) +(assert (not (requires r17 name19))) +(assert (not (requires r17 name18))) +(assert (not (requires r17 name17))) +(assert (not (requires r17 name16))) +(assert (not (requires r17 name15))) +(assert (not (requires r17 name14))) +(assert (not (requires r17 name13))) +(assert (not (requires r17 name12))) +(assert (not (requires r17 name11))) +(assert (not (requires r17 name10))) +(assert (not (requires r17 name6))) +(assert (not (requires r17 name5))) +(assert (not (requires r17 name4))) +(assert (not (requires r17 name3))) +(assert (not (requires r17 name9))) +(assert (not (requires r17 name8))) +(assert (not (requires r17 name7))) +(assert (not (requires r17 name2))) +(assert (not (requires r17 name1))) +(assert (not (requires r17 name0))) +(assert (not (requires r19 name19))) +(assert (not (requires r19 name18))) +(assert (not (requires r19 name17))) +(assert (not (requires r19 name16))) +(assert (not (requires r19 name15))) +(assert (not (requires r19 name14))) +(assert (not (requires r19 name13))) +(assert (not (requires r19 name12))) +(assert (not (requires r19 name11))) +(assert (not (requires r19 name10))) +(assert (not (requires r19 name6))) +(assert (not (requires r19 name5))) +(assert (not (requires r19 name4))) +(assert (not (requires r19 name3))) +(assert (not (requires r19 name9))) +(assert (not (requires r19 name8))) +(assert (not (requires r19 name7))) +(assert (not (requires r19 name2))) +(assert (not (requires r19 name1))) +(assert (not (requires r19 name0))) +(assert (not (requires name6 r2))) +(assert (not (requires name6 r3))) +(assert (not (requires name6 r4))) +(assert (not (requires name6 r5))) +(assert (not (requires name6 r6))) +(assert (not (requires name6 r7))) +(assert (not (requires name6 r8))) +(assert (not (requires name6 r9))) +(assert (not (requires name6 name19))) +(assert (not (requires name6 name18))) +(assert (not (requires name6 name17))) +(assert (not (requires name6 name16))) +(assert (not (requires name6 r10))) +(assert (not (requires name6 name15))) +(assert (not (requires name6 name14))) +(assert (not (requires name6 r12))) +(assert (not (requires name6 name13))) +(assert (not (requires name6 r11))) +(assert (not (requires name6 name12))) +(assert (not (requires name6 r14))) +(assert (not (requires name6 name11))) +(assert (not (requires name6 r13))) +(assert (not (requires name6 name10))) +(assert (not (requires name6 r16))) +(assert (not (requires name6 r15))) +(assert (not (requires name6 r18))) +(assert (not (requires name6 r17))) +(assert (not (requires name6 r19))) +(assert (not (requires name6 name6))) +(assert (not (requires name6 name5))) +(assert (not (requires name6 name4))) +(assert (not (requires name6 name3))) +(assert (not (requires name6 name9))) +(assert (not (requires name6 name8))) +(assert (not (requires name6 name7))) +(assert (not (requires name6 name2))) +(assert (not (requires name6 name1))) +(assert (not (requires name6 r0))) +(assert (not (requires name6 name0))) +(assert (not (requires name6 r1))) +(assert (not (requires name5 r2))) +(assert (not (requires name5 r3))) +(assert (not (requires name5 r4))) +(assert (not (requires name5 r5))) +(assert (not (requires name5 r6))) +(assert (not (requires name5 r7))) +(assert (not (requires name5 r8))) +(assert (not (requires name5 r9))) +(assert (not (requires name5 name19))) +(assert (not (requires name5 name18))) +(assert (not (requires name5 name17))) +(assert (not (requires name5 name16))) +(assert (not (requires name5 r10))) +(assert (not (requires name5 name15))) +(assert (not (requires name5 name14))) +(assert (not (requires name5 r12))) +(assert (not (requires name5 name13))) +(assert (not (requires name5 r11))) +(assert (not (requires name5 name12))) +(assert (not (requires name5 r14))) +(assert (not (requires name5 name11))) +(assert (not (requires name5 r13))) +(assert (not (requires name5 name10))) +(assert (not (requires name5 r16))) +(assert (not (requires name5 r15))) +(assert (not (requires name5 r18))) +(assert (not (requires name5 r17))) +(assert (not (requires name5 r19))) +(assert (not (requires name5 name6))) +(assert (not (requires name5 name5))) +(assert (not (requires name5 name4))) +(assert (not (requires name5 name3))) +(assert (not (requires name5 name9))) +(assert (not (requires name5 name8))) +(assert (not (requires name5 name7))) +(assert (not (requires name5 name2))) +(assert (not (requires name5 name1))) +(assert (not (requires name5 r0))) +(assert (not (requires name5 name0))) +(assert (not (requires name5 r1))) +(assert (not (requires name4 r2))) +(assert (not (requires name4 r3))) +(assert (not (requires name4 r4))) +(assert (not (requires name4 r5))) +(assert (not (requires name4 r6))) +(assert (not (requires name4 r7))) +(assert (not (requires name4 r8))) +(assert (not (requires name4 r9))) +(assert (not (requires name4 name19))) +(assert (not (requires name4 name18))) +(assert (not (requires name4 name17))) +(assert (not (requires name4 name16))) +(assert (not (requires name4 r10))) +(assert (not (requires name4 name15))) +(assert (not (requires name4 name14))) +(assert (not (requires name4 r12))) +(assert (not (requires name4 name13))) +(assert (not (requires name4 r11))) +(assert (not (requires name4 name12))) +(assert (not (requires name4 r14))) +(assert (not (requires name4 name11))) +(assert (not (requires name4 r13))) +(assert (not (requires name4 name10))) +(assert (not (requires name4 r16))) +(assert (not (requires name4 r15))) +(assert (not (requires name4 r18))) +(assert (not (requires name4 r17))) +(assert (not (requires name4 r19))) +(assert (not (requires name4 name6))) +(assert (not (requires name4 name5))) +(assert (not (requires name4 name4))) +(assert (not (requires name4 name3))) +(assert (not (requires name4 name9))) +(assert (not (requires name4 name8))) +(assert (not (requires name4 name7))) +(assert (not (requires name4 name2))) +(assert (not (requires name4 name1))) +(assert (not (requires name4 r0))) +(assert (not (requires name4 name0))) +(assert (not (requires name4 r1))) +(assert (not (requires name3 r2))) +(assert (not (requires name3 r3))) +(assert (not (requires name3 r4))) +(assert (not (requires name3 r5))) +(assert (not (requires name3 r6))) +(assert (not (requires name3 r7))) +(assert (not (requires name3 r8))) +(assert (not (requires name3 r9))) +(assert (not (requires name3 name19))) +(assert (not (requires name3 name18))) +(assert (not (requires name3 name17))) +(assert (not (requires name3 name16))) +(assert (not (requires name3 r10))) +(assert (not (requires name3 name15))) +(assert (not (requires name3 name14))) +(assert (not (requires name3 r12))) +(assert (not (requires name3 name13))) +(assert (not (requires name3 r11))) +(assert (not (requires name3 name12))) +(assert (not (requires name3 r14))) +(assert (not (requires name3 name11))) +(assert (not (requires name3 r13))) +(assert (not (requires name3 name10))) +(assert (not (requires name3 r16))) +(assert (not (requires name3 r15))) +(assert (not (requires name3 r18))) +(assert (not (requires name3 r17))) +(assert (not (requires name3 r19))) +(assert (not (requires name3 name6))) +(assert (not (requires name3 name5))) +(assert (not (requires name3 name4))) +(assert (not (requires name3 name3))) +(assert (not (requires name3 name9))) +(assert (not (requires name3 name8))) +(assert (not (requires name3 name7))) +(assert (not (requires name3 name2))) +(assert (not (requires name3 name1))) +(assert (not (requires name3 r0))) +(assert (not (requires name3 name0))) +(assert (not (requires name3 r1))) +(assert (not (requires name9 r2))) +(assert (not (requires name9 r3))) +(assert (not (requires name9 r4))) +(assert (not (requires name9 r5))) +(assert (not (requires name9 r6))) +(assert (not (requires name9 r7))) +(assert (not (requires name9 r8))) +(assert (not (requires name9 r9))) +(assert (not (requires name9 name19))) +(assert (not (requires name9 name18))) +(assert (not (requires name9 name17))) +(assert (not (requires name9 name16))) +(assert (not (requires name9 r10))) +(assert (not (requires name9 name15))) +(assert (not (requires name9 name14))) +(assert (not (requires name9 r12))) +(assert (not (requires name9 name13))) +(assert (not (requires name9 r11))) +(assert (not (requires name9 name12))) +(assert (not (requires name9 r14))) +(assert (not (requires name9 name11))) +(assert (not (requires name9 r13))) +(assert (not (requires name9 name10))) +(assert (not (requires name9 r16))) +(assert (not (requires name9 r15))) +(assert (not (requires name9 r18))) +(assert (not (requires name9 r17))) +(assert (not (requires name9 r19))) +(assert (not (requires name9 name6))) +(assert (not (requires name9 name5))) +(assert (not (requires name9 name4))) +(assert (not (requires name9 name3))) +(assert (not (requires name9 name9))) +(assert (not (requires name9 name8))) +(assert (not (requires name9 name7))) +(assert (not (requires name9 name2))) +(assert (not (requires name9 name1))) +(assert (not (requires name9 r0))) +(assert (not (requires name9 name0))) +(assert (not (requires name9 r1))) +(assert (not (requires name8 r2))) +(assert (not (requires name8 r3))) +(assert (not (requires name8 r4))) +(assert (not (requires name8 r5))) +(assert (not (requires name8 r6))) +(assert (not (requires name8 r7))) +(assert (not (requires name8 r8))) +(assert (not (requires name8 r9))) +(assert (not (requires name8 name19))) +(assert (not (requires name8 name18))) +(assert (not (requires name8 name17))) +(assert (not (requires name8 name16))) +(assert (not (requires name8 r10))) +(assert (not (requires name8 name15))) +(assert (not (requires name8 name14))) +(assert (not (requires name8 r12))) +(assert (not (requires name8 name13))) +(assert (not (requires name8 r11))) +(assert (not (requires name8 name12))) +(assert (not (requires name8 r14))) +(assert (not (requires name8 name11))) +(assert (not (requires name8 r13))) +(assert (not (requires name8 name10))) +(assert (not (requires name8 r16))) +(assert (not (requires name8 r15))) +(assert (not (requires name8 r18))) +(assert (not (requires name8 r17))) +(assert (not (requires name8 r19))) +(assert (not (requires name8 name6))) +(assert (not (requires name8 name5))) +(assert (not (requires name8 name4))) +(assert (not (requires name8 name3))) +(assert (not (requires name8 name9))) +(assert (not (requires name8 name8))) +(assert (not (requires name8 name7))) +(assert (not (requires name8 name2))) +(assert (not (requires name8 name1))) +(assert (not (requires name8 r0))) +(assert (not (requires name8 name0))) +(assert (not (requires name8 r1))) +(assert (not (requires name7 r2))) +(assert (not (requires name7 r3))) +(assert (not (requires name7 r4))) +(assert (not (requires name7 r5))) +(assert (not (requires name7 r6))) +(assert (not (requires name7 r7))) +(assert (not (requires name7 r8))) +(assert (not (requires name7 r9))) +(assert (not (requires name7 name19))) +(assert (not (requires name7 name18))) +(assert (not (requires name7 name17))) +(assert (not (requires name7 name16))) +(assert (not (requires name7 r10))) +(assert (not (requires name7 name15))) +(assert (not (requires name7 name14))) +(assert (not (requires name7 r12))) +(assert (not (requires name7 name13))) +(assert (not (requires name7 r11))) +(assert (not (requires name7 name12))) +(assert (not (requires name7 r14))) +(assert (not (requires name7 name11))) +(assert (not (requires name7 r13))) +(assert (not (requires name7 name10))) +(assert (not (requires name7 r16))) +(assert (not (requires name7 r15))) +(assert (not (requires name7 r18))) +(assert (not (requires name7 r17))) +(assert (not (requires name7 r19))) +(assert (not (requires name7 name6))) +(assert (not (requires name7 name5))) +(assert (not (requires name7 name4))) +(assert (not (requires name7 name3))) +(assert (not (requires name7 name9))) +(assert (not (requires name7 name8))) +(assert (not (requires name7 name7))) +(assert (not (requires name7 name2))) +(assert (not (requires name7 name1))) +(assert (not (requires name7 r0))) +(assert (not (requires name7 name0))) +(assert (not (requires name7 r1))) +(assert (not (requires name2 r2))) +(assert (not (requires name2 r3))) +(assert (not (requires name2 r4))) +(assert (not (requires name2 r5))) +(assert (not (requires name2 r6))) +(assert (not (requires name2 r7))) +(assert (not (requires name2 r8))) +(assert (not (requires name2 r9))) +(assert (not (requires name2 name19))) +(assert (not (requires name2 name18))) +(assert (not (requires name2 name17))) +(assert (not (requires name2 name16))) +(assert (not (requires name2 r10))) +(assert (not (requires name2 name15))) +(assert (not (requires name2 name14))) +(assert (not (requires name2 r12))) +(assert (not (requires name2 name13))) +(assert (not (requires name2 r11))) +(assert (not (requires name2 name12))) +(assert (not (requires name2 r14))) +(assert (not (requires name2 name11))) +(assert (not (requires name2 r13))) +(assert (not (requires name2 name10))) +(assert (not (requires name2 r16))) +(assert (not (requires name2 r15))) +(assert (not (requires name2 r18))) +(assert (not (requires name2 r17))) +(assert (not (requires name2 r19))) +(assert (not (requires name2 name6))) +(assert (not (requires name2 name5))) +(assert (not (requires name2 name4))) +(assert (not (requires name2 name3))) +(assert (not (requires name2 name9))) +(assert (not (requires name2 name8))) +(assert (not (requires name2 name7))) +(assert (not (requires name2 name2))) +(assert (not (requires name2 name1))) +(assert (not (requires name2 r0))) +(assert (not (requires name2 name0))) +(assert (not (requires name2 r1))) +(assert (not (requires name1 r2))) +(assert (not (requires name1 r3))) +(assert (not (requires name1 r4))) +(assert (not (requires name1 r5))) +(assert (not (requires name1 r6))) +(assert (not (requires name1 r7))) +(assert (not (requires name1 r8))) +(assert (not (requires name1 r9))) +(assert (not (requires name1 name19))) +(assert (not (requires name1 name18))) +(assert (not (requires name1 name17))) +(assert (not (requires name1 name16))) +(assert (not (requires name1 r10))) +(assert (not (requires name1 name15))) +(assert (not (requires name1 name14))) +(assert (not (requires name1 r12))) +(assert (not (requires name1 name13))) +(assert (not (requires name1 r11))) +(assert (not (requires name1 name12))) +(assert (not (requires name1 r14))) +(assert (not (requires name1 name11))) +(assert (not (requires name1 r13))) +(assert (not (requires name1 name10))) +(assert (not (requires name1 r16))) +(assert (not (requires name1 r15))) +(assert (not (requires name1 r18))) +(assert (not (requires name1 r17))) +(assert (not (requires name1 r19))) +(assert (not (requires name1 name6))) +(assert (not (requires name1 name5))) +(assert (not (requires name1 name4))) +(assert (not (requires name1 name3))) +(assert (not (requires name1 name9))) +(assert (not (requires name1 name8))) +(assert (not (requires name1 name7))) +(assert (not (requires name1 name2))) +(assert (not (requires name1 name1))) +(assert (not (requires name1 r0))) +(assert (not (requires name1 name0))) +(assert (not (requires name1 r1))) +(assert (not (requires r0 name19))) +(assert (not (requires r0 name18))) +(assert (not (requires r0 name17))) +(assert (not (requires r0 name16))) +(assert (not (requires r0 name15))) +(assert (not (requires r0 name14))) +(assert (not (requires r0 name13))) +(assert (not (requires r0 name12))) +(assert (not (requires r0 name11))) +(assert (not (requires r0 name10))) +(assert (not (requires r0 name6))) +(assert (not (requires r0 name5))) +(assert (not (requires r0 name4))) +(assert (not (requires r0 name3))) +(assert (not (requires r0 name9))) +(assert (not (requires r0 name8))) +(assert (not (requires r0 name7))) +(assert (not (requires r0 name2))) +(assert (not (requires r0 name1))) +(assert (not (requires r0 name0))) +(assert (not (requires name0 r2))) +(assert (not (requires name0 r3))) +(assert (not (requires name0 r4))) +(assert (not (requires name0 r5))) +(assert (not (requires name0 r6))) +(assert (not (requires name0 r7))) +(assert (not (requires name0 r8))) +(assert (not (requires name0 r9))) +(assert (not (requires name0 name19))) +(assert (not (requires name0 name18))) +(assert (not (requires name0 name17))) +(assert (not (requires name0 name16))) +(assert (not (requires name0 r10))) +(assert (not (requires name0 name15))) +(assert (not (requires name0 name14))) +(assert (not (requires name0 r12))) +(assert (not (requires name0 name13))) +(assert (not (requires name0 r11))) +(assert (not (requires name0 name12))) +(assert (not (requires name0 r14))) +(assert (not (requires name0 name11))) +(assert (not (requires name0 r13))) +(assert (not (requires name0 name10))) +(assert (not (requires name0 r16))) +(assert (not (requires name0 r15))) +(assert (not (requires name0 r18))) +(assert (not (requires name0 r17))) +(assert (not (requires name0 r19))) +(assert (not (requires name0 name6))) +(assert (not (requires name0 name5))) +(assert (not (requires name0 name4))) +(assert (not (requires name0 name3))) +(assert (not (requires name0 name9))) +(assert (not (requires name0 name8))) +(assert (not (requires name0 name7))) +(assert (not (requires name0 name2))) +(assert (not (requires name0 name1))) +(assert (not (requires name0 r0))) +(assert (not (requires name0 name0))) +(assert (not (requires name0 r1))) +(assert (not (requires r1 name19))) +(assert (not (requires r1 name18))) +(assert (not (requires r1 name17))) +(assert (not (requires r1 name16))) +(assert (not (requires r1 name15))) +(assert (not (requires r1 name14))) +(assert (not (requires r1 name13))) +(assert (not (requires r1 name12))) +(assert (not (requires r1 name11))) +(assert (not (requires r1 name10))) +(assert (not (requires r1 name6))) +(assert (not (requires r1 name5))) +(assert (not (requires r1 name4))) +(assert (not (requires r1 name3))) +(assert (not (requires r1 name9))) +(assert (not (requires r1 name8))) +(assert (not (requires r1 name7))) +(assert (not (requires r1 name2))) +(assert (not (requires r1 name1))) +(assert (not (requires r1 name0))) +(assert (not (refines r2 name19))) +(assert (not (refines r2 name18))) +(assert (not (refines r2 name17))) +(assert (not (refines r2 name16))) +(assert (not (refines r2 name15))) +(assert (not (refines r2 name14))) +(assert (not (refines r2 name13))) +(assert (not (refines r2 name12))) +(assert (not (refines r2 name11))) +(assert (not (refines r2 name10))) +(assert (not (refines r2 name6))) +(assert (not (refines r2 name5))) +(assert (not (refines r2 name4))) +(assert (not (refines r2 name3))) +(assert (not (refines r2 name9))) +(assert (not (refines r2 name8))) +(assert (not (refines r2 name7))) +(assert (not (refines r2 name2))) +(assert (not (refines r2 name1))) +(assert (not (refines r2 name0))) +(assert (not (refines r3 name19))) +(assert (not (refines r3 name18))) +(assert (not (refines r3 name17))) +(assert (not (refines r3 name16))) +(assert (not (refines r3 name15))) +(assert (not (refines r3 name14))) +(assert (not (refines r3 name13))) +(assert (not (refines r3 name12))) +(assert (not (refines r3 name11))) +(assert (not (refines r3 name10))) +(assert (not (refines r3 name6))) +(assert (not (refines r3 name5))) +(assert (not (refines r3 name4))) +(assert (not (refines r3 name3))) +(assert (not (refines r3 name9))) +(assert (not (refines r3 name8))) +(assert (not (refines r3 name7))) +(assert (not (refines r3 name2))) +(assert (not (refines r3 name1))) +(assert (not (refines r3 name0))) +(assert (not (refines r4 name19))) +(assert (not (refines r4 name18))) +(assert (not (refines r4 name17))) +(assert (not (refines r4 name16))) +(assert (not (refines r4 name15))) +(assert (not (refines r4 name14))) +(assert (not (refines r4 name13))) +(assert (not (refines r4 name12))) +(assert (not (refines r4 name11))) +(assert (not (refines r4 name10))) +(assert (not (refines r4 name6))) +(assert (not (refines r4 name5))) +(assert (not (refines r4 name4))) +(assert (not (refines r4 name3))) +(assert (not (refines r4 name9))) +(assert (not (refines r4 name8))) +(assert (not (refines r4 name7))) +(assert (not (refines r4 name2))) +(assert (not (refines r4 name1))) +(assert (not (refines r4 name0))) +(assert (not (refines r5 name19))) +(assert (not (refines r5 name18))) +(assert (not (refines r5 name17))) +(assert (not (refines r5 name16))) +(assert (not (refines r5 name15))) +(assert (not (refines r5 name14))) +(assert (not (refines r5 name13))) +(assert (not (refines r5 name12))) +(assert (not (refines r5 name11))) +(assert (not (refines r5 name10))) +(assert (not (refines r5 name6))) +(assert (not (refines r5 name5))) +(assert (not (refines r5 name4))) +(assert (not (refines r5 name3))) +(assert (not (refines r5 name9))) +(assert (not (refines r5 name8))) +(assert (not (refines r5 name7))) +(assert (not (refines r5 name2))) +(assert (not (refines r5 name1))) +(assert (not (refines r5 name0))) +(assert (not (refines r6 name19))) +(assert (not (refines r6 name18))) +(assert (not (refines r6 name17))) +(assert (not (refines r6 name16))) +(assert (not (refines r6 name15))) +(assert (not (refines r6 name14))) +(assert (not (refines r6 name13))) +(assert (not (refines r6 name12))) +(assert (not (refines r6 name11))) +(assert (not (refines r6 name10))) +(assert (not (refines r6 name6))) +(assert (not (refines r6 name5))) +(assert (not (refines r6 name4))) +(assert (not (refines r6 name3))) +(assert (not (refines r6 name9))) +(assert (not (refines r6 name8))) +(assert (not (refines r6 name7))) +(assert (not (refines r6 name2))) +(assert (not (refines r6 name1))) +(assert (not (refines r6 name0))) +(assert (not (refines r7 name19))) +(assert (not (refines r7 name18))) +(assert (not (refines r7 name17))) +(assert (not (refines r7 name16))) +(assert (not (refines r7 name15))) +(assert (not (refines r7 name14))) +(assert (not (refines r7 name13))) +(assert (not (refines r7 name12))) +(assert (not (refines r7 name11))) +(assert (not (refines r7 name10))) +(assert (not (refines r7 name6))) +(assert (not (refines r7 name5))) +(assert (not (refines r7 name4))) +(assert (not (refines r7 name3))) +(assert (not (refines r7 name9))) +(assert (not (refines r7 name8))) +(assert (not (refines r7 name7))) +(assert (not (refines r7 name2))) +(assert (not (refines r7 name1))) +(assert (not (refines r7 name0))) +(assert (not (refines r8 name19))) +(assert (not (refines r8 name18))) +(assert (not (refines r8 name17))) +(assert (not (refines r8 name16))) +(assert (not (refines r8 name15))) +(assert (not (refines r8 name14))) +(assert (not (refines r8 name13))) +(assert (not (refines r8 name12))) +(assert (not (refines r8 name11))) +(assert (not (refines r8 name10))) +(assert (not (refines r8 name6))) +(assert (not (refines r8 name5))) +(assert (not (refines r8 name4))) +(assert (not (refines r8 name3))) +(assert (not (refines r8 name9))) +(assert (not (refines r8 name8))) +(assert (not (refines r8 name7))) +(assert (not (refines r8 name2))) +(assert (not (refines r8 name1))) +(assert (not (refines r8 name0))) +(assert (not (refines r9 name19))) +(assert (not (refines r9 name18))) +(assert (not (refines r9 name17))) +(assert (not (refines r9 name16))) +(assert (not (refines r9 name15))) +(assert (not (refines r9 name14))) +(assert (not (refines r9 name13))) +(assert (not (refines r9 name12))) +(assert (not (refines r9 name11))) +(assert (not (refines r9 name10))) +(assert (not (refines r9 name6))) +(assert (not (refines r9 name5))) +(assert (not (refines r9 name4))) +(assert (not (refines r9 name3))) +(assert (not (refines r9 name9))) +(assert (not (refines r9 name8))) +(assert (not (refines r9 name7))) +(assert (not (refines r9 name2))) +(assert (not (refines r9 name1))) +(assert (not (refines r9 name0))) +(assert (not (refines name19 r2))) +(assert (not (refines name19 r3))) +(assert (not (refines name19 r4))) +(assert (not (refines name19 r5))) +(assert (not (refines name19 r6))) +(assert (not (refines name19 r7))) +(assert (not (refines name19 r8))) +(assert (not (refines name19 r9))) +(assert (not (refines name19 name19))) +(assert (not (refines name19 name18))) +(assert (not (refines name19 name17))) +(assert (not (refines name19 name16))) +(assert (not (refines name19 r10))) +(assert (not (refines name19 name15))) +(assert (not (refines name19 name14))) +(assert (not (refines name19 r12))) +(assert (not (refines name19 name13))) +(assert (not (refines name19 r11))) +(assert (not (refines name19 name12))) +(assert (not (refines name19 r14))) +(assert (not (refines name19 name11))) +(assert (not (refines name19 r13))) +(assert (not (refines name19 name10))) +(assert (not (refines name19 r16))) +(assert (not (refines name19 r15))) +(assert (not (refines name19 r18))) +(assert (not (refines name19 r17))) +(assert (not (refines name19 r19))) +(assert (not (refines name19 name6))) +(assert (not (refines name19 name5))) +(assert (not (refines name19 name4))) +(assert (not (refines name19 name3))) +(assert (not (refines name19 name9))) +(assert (not (refines name19 name8))) +(assert (not (refines name19 name7))) +(assert (not (refines name19 name2))) +(assert (not (refines name19 name1))) +(assert (not (refines name19 r0))) +(assert (not (refines name19 name0))) +(assert (not (refines name19 r1))) +(assert (not (refines name18 r2))) +(assert (not (refines name18 r3))) +(assert (not (refines name18 r4))) +(assert (not (refines name18 r5))) +(assert (not (refines name18 r6))) +(assert (not (refines name18 r7))) +(assert (not (refines name18 r8))) +(assert (not (refines name18 r9))) +(assert (not (refines name18 name19))) +(assert (not (refines name18 name18))) +(assert (not (refines name18 name17))) +(assert (not (refines name18 name16))) +(assert (not (refines name18 r10))) +(assert (not (refines name18 name15))) +(assert (not (refines name18 name14))) +(assert (not (refines name18 r12))) +(assert (not (refines name18 name13))) +(assert (not (refines name18 r11))) +(assert (not (refines name18 name12))) +(assert (not (refines name18 r14))) +(assert (not (refines name18 name11))) +(assert (not (refines name18 r13))) +(assert (not (refines name18 name10))) +(assert (not (refines name18 r16))) +(assert (not (refines name18 r15))) +(assert (not (refines name18 r18))) +(assert (not (refines name18 r17))) +(assert (not (refines name18 r19))) +(assert (not (refines name18 name6))) +(assert (not (refines name18 name5))) +(assert (not (refines name18 name4))) +(assert (not (refines name18 name3))) +(assert (not (refines name18 name9))) +(assert (not (refines name18 name8))) +(assert (not (refines name18 name7))) +(assert (not (refines name18 name2))) +(assert (not (refines name18 name1))) +(assert (not (refines name18 r0))) +(assert (not (refines name18 name0))) +(assert (not (refines name18 r1))) +(assert (not (refines name17 r2))) +(assert (not (refines name17 r3))) +(assert (not (refines name17 r4))) +(assert (not (refines name17 r5))) +(assert (not (refines name17 r6))) +(assert (not (refines name17 r7))) +(assert (not (refines name17 r8))) +(assert (not (refines name17 r9))) +(assert (not (refines name17 name19))) +(assert (not (refines name17 name18))) +(assert (not (refines name17 name17))) +(assert (not (refines name17 name16))) +(assert (not (refines name17 r10))) +(assert (not (refines name17 name15))) +(assert (not (refines name17 name14))) +(assert (not (refines name17 r12))) +(assert (not (refines name17 name13))) +(assert (not (refines name17 r11))) +(assert (not (refines name17 name12))) +(assert (not (refines name17 r14))) +(assert (not (refines name17 name11))) +(assert (not (refines name17 r13))) +(assert (not (refines name17 name10))) +(assert (not (refines name17 r16))) +(assert (not (refines name17 r15))) +(assert (not (refines name17 r18))) +(assert (not (refines name17 r17))) +(assert (not (refines name17 r19))) +(assert (not (refines name17 name6))) +(assert (not (refines name17 name5))) +(assert (not (refines name17 name4))) +(assert (not (refines name17 name3))) +(assert (not (refines name17 name9))) +(assert (not (refines name17 name8))) +(assert (not (refines name17 name7))) +(assert (not (refines name17 name2))) +(assert (not (refines name17 name1))) +(assert (not (refines name17 r0))) +(assert (not (refines name17 name0))) +(assert (not (refines name17 r1))) +(assert (not (refines name16 r2))) +(assert (not (refines name16 r3))) +(assert (not (refines name16 r4))) +(assert (not (refines name16 r5))) +(assert (not (refines name16 r6))) +(assert (not (refines name16 r7))) +(assert (not (refines name16 r8))) +(assert (not (refines name16 r9))) +(assert (not (refines name16 name19))) +(assert (not (refines name16 name18))) +(assert (not (refines name16 name17))) +(assert (not (refines name16 name16))) +(assert (not (refines name16 r10))) +(assert (not (refines name16 name15))) +(assert (not (refines name16 name14))) +(assert (not (refines name16 r12))) +(assert (not (refines name16 name13))) +(assert (not (refines name16 r11))) +(assert (not (refines name16 name12))) +(assert (not (refines name16 r14))) +(assert (not (refines name16 name11))) +(assert (not (refines name16 r13))) +(assert (not (refines name16 name10))) +(assert (not (refines name16 r16))) +(assert (not (refines name16 r15))) +(assert (not (refines name16 r18))) +(assert (not (refines name16 r17))) +(assert (not (refines name16 r19))) +(assert (not (refines name16 name6))) +(assert (not (refines name16 name5))) +(assert (not (refines name16 name4))) +(assert (not (refines name16 name3))) +(assert (not (refines name16 name9))) +(assert (not (refines name16 name8))) +(assert (not (refines name16 name7))) +(assert (not (refines name16 name2))) +(assert (not (refines name16 name1))) +(assert (not (refines name16 r0))) +(assert (not (refines name16 name0))) +(assert (not (refines name16 r1))) +(assert (not (refines r10 name19))) +(assert (not (refines r10 name18))) +(assert (not (refines r10 name17))) +(assert (not (refines r10 name16))) +(assert (not (refines r10 name15))) +(assert (not (refines r10 name14))) +(assert (not (refines r10 name13))) +(assert (not (refines r10 name12))) +(assert (not (refines r10 name11))) +(assert (not (refines r10 name10))) +(assert (not (refines r10 name6))) +(assert (not (refines r10 name5))) +(assert (not (refines r10 name4))) +(assert (not (refines r10 name3))) +(assert (not (refines r10 name9))) +(assert (not (refines r10 name8))) +(assert (not (refines r10 name7))) +(assert (not (refines r10 name2))) +(assert (not (refines r10 name1))) +(assert (not (refines r10 name0))) +(assert (not (refines name15 r2))) +(assert (not (refines name15 r3))) +(assert (not (refines name15 r4))) +(assert (not (refines name15 r5))) +(assert (not (refines name15 r6))) +(assert (not (refines name15 r7))) +(assert (not (refines name15 r8))) +(assert (not (refines name15 r9))) +(assert (not (refines name15 name19))) +(assert (not (refines name15 name18))) +(assert (not (refines name15 name17))) +(assert (not (refines name15 name16))) +(assert (not (refines name15 r10))) +(assert (not (refines name15 name15))) +(assert (not (refines name15 name14))) +(assert (not (refines name15 r12))) +(assert (not (refines name15 name13))) +(assert (not (refines name15 r11))) +(assert (not (refines name15 name12))) +(assert (not (refines name15 r14))) +(assert (not (refines name15 name11))) +(assert (not (refines name15 r13))) +(assert (not (refines name15 name10))) +(assert (not (refines name15 r16))) +(assert (not (refines name15 r15))) +(assert (not (refines name15 r18))) +(assert (not (refines name15 r17))) +(assert (not (refines name15 r19))) +(assert (not (refines name15 name6))) +(assert (not (refines name15 name5))) +(assert (not (refines name15 name4))) +(assert (not (refines name15 name3))) +(assert (not (refines name15 name9))) +(assert (not (refines name15 name8))) +(assert (not (refines name15 name7))) +(assert (not (refines name15 name2))) +(assert (not (refines name15 name1))) +(assert (not (refines name15 r0))) +(assert (not (refines name15 name0))) +(assert (not (refines name15 r1))) +(assert (not (refines name14 r2))) +(assert (not (refines name14 r3))) +(assert (not (refines name14 r4))) +(assert (not (refines name14 r5))) +(assert (not (refines name14 r6))) +(assert (not (refines name14 r7))) +(assert (not (refines name14 r8))) +(assert (not (refines name14 r9))) +(assert (not (refines name14 name19))) +(assert (not (refines name14 name18))) +(assert (not (refines name14 name17))) +(assert (not (refines name14 name16))) +(assert (not (refines name14 r10))) +(assert (not (refines name14 name15))) +(assert (not (refines name14 name14))) +(assert (not (refines name14 r12))) +(assert (not (refines name14 name13))) +(assert (not (refines name14 r11))) +(assert (not (refines name14 name12))) +(assert (not (refines name14 r14))) +(assert (not (refines name14 name11))) +(assert (not (refines name14 r13))) +(assert (not (refines name14 name10))) +(assert (not (refines name14 r16))) +(assert (not (refines name14 r15))) +(assert (not (refines name14 r18))) +(assert (not (refines name14 r17))) +(assert (not (refines name14 r19))) +(assert (not (refines name14 name6))) +(assert (not (refines name14 name5))) +(assert (not (refines name14 name4))) +(assert (not (refines name14 name3))) +(assert (not (refines name14 name9))) +(assert (not (refines name14 name8))) +(assert (not (refines name14 name7))) +(assert (not (refines name14 name2))) +(assert (not (refines name14 name1))) +(assert (not (refines name14 r0))) +(assert (not (refines name14 name0))) +(assert (not (refines name14 r1))) +(assert (not (refines r12 name19))) +(assert (not (refines r12 name18))) +(assert (not (refines r12 name17))) +(assert (not (refines r12 name16))) +(assert (not (refines r12 name15))) +(assert (not (refines r12 name14))) +(assert (not (refines r12 name13))) +(assert (not (refines r12 name12))) +(assert (not (refines r12 name11))) +(assert (not (refines r12 name10))) +(assert (not (refines r12 name6))) +(assert (not (refines r12 name5))) +(assert (not (refines r12 name4))) +(assert (not (refines r12 name3))) +(assert (not (refines r12 name9))) +(assert (not (refines r12 name8))) +(assert (not (refines r12 name7))) +(assert (not (refines r12 name2))) +(assert (not (refines r12 name1))) +(assert (not (refines r12 name0))) +(assert (not (refines name13 r2))) +(assert (not (refines name13 r3))) +(assert (not (refines name13 r4))) +(assert (not (refines name13 r5))) +(assert (not (refines name13 r6))) +(assert (not (refines name13 r7))) +(assert (not (refines name13 r8))) +(assert (not (refines name13 r9))) +(assert (not (refines name13 name19))) +(assert (not (refines name13 name18))) +(assert (not (refines name13 name17))) +(assert (not (refines name13 name16))) +(assert (not (refines name13 r10))) +(assert (not (refines name13 name15))) +(assert (not (refines name13 name14))) +(assert (not (refines name13 r12))) +(assert (not (refines name13 name13))) +(assert (not (refines name13 r11))) +(assert (not (refines name13 name12))) +(assert (not (refines name13 r14))) +(assert (not (refines name13 name11))) +(assert (not (refines name13 r13))) +(assert (not (refines name13 name10))) +(assert (not (refines name13 r16))) +(assert (not (refines name13 r15))) +(assert (not (refines name13 r18))) +(assert (not (refines name13 r17))) +(assert (not (refines name13 r19))) +(assert (not (refines name13 name6))) +(assert (not (refines name13 name5))) +(assert (not (refines name13 name4))) +(assert (not (refines name13 name3))) +(assert (not (refines name13 name9))) +(assert (not (refines name13 name8))) +(assert (not (refines name13 name7))) +(assert (not (refines name13 name2))) +(assert (not (refines name13 name1))) +(assert (not (refines name13 r0))) +(assert (not (refines name13 name0))) +(assert (not (refines name13 r1))) +(assert (not (refines r11 name19))) +(assert (not (refines r11 name18))) +(assert (not (refines r11 name17))) +(assert (not (refines r11 name16))) +(assert (not (refines r11 name15))) +(assert (not (refines r11 name14))) +(assert (not (refines r11 name13))) +(assert (not (refines r11 name12))) +(assert (not (refines r11 name11))) +(assert (not (refines r11 name10))) +(assert (not (refines r11 name6))) +(assert (not (refines r11 name5))) +(assert (not (refines r11 name4))) +(assert (not (refines r11 name3))) +(assert (not (refines r11 name9))) +(assert (not (refines r11 name8))) +(assert (not (refines r11 name7))) +(assert (not (refines r11 name2))) +(assert (not (refines r11 name1))) +(assert (not (refines r11 name0))) +(assert (not (refines name12 r2))) +(assert (not (refines name12 r3))) +(assert (not (refines name12 r4))) +(assert (not (refines name12 r5))) +(assert (not (refines name12 r6))) +(assert (not (refines name12 r7))) +(assert (not (refines name12 r8))) +(assert (not (refines name12 r9))) +(assert (not (refines name12 name19))) +(assert (not (refines name12 name18))) +(assert (not (refines name12 name17))) +(assert (not (refines name12 name16))) +(assert (not (refines name12 r10))) +(assert (not (refines name12 name15))) +(assert (not (refines name12 name14))) +(assert (not (refines name12 r12))) +(assert (not (refines name12 name13))) +(assert (not (refines name12 r11))) +(assert (not (refines name12 name12))) +(assert (not (refines name12 r14))) +(assert (not (refines name12 name11))) +(assert (not (refines name12 r13))) +(assert (not (refines name12 name10))) +(assert (not (refines name12 r16))) +(assert (not (refines name12 r15))) +(assert (not (refines name12 r18))) +(assert (not (refines name12 r17))) +(assert (not (refines name12 r19))) +(assert (not (refines name12 name6))) +(assert (not (refines name12 name5))) +(assert (not (refines name12 name4))) +(assert (not (refines name12 name3))) +(assert (not (refines name12 name9))) +(assert (not (refines name12 name8))) +(assert (not (refines name12 name7))) +(assert (not (refines name12 name2))) +(assert (not (refines name12 name1))) +(assert (not (refines name12 r0))) +(assert (not (refines name12 name0))) +(assert (not (refines name12 r1))) +(assert (not (refines r14 name19))) +(assert (not (refines r14 name18))) +(assert (not (refines r14 name17))) +(assert (not (refines r14 name16))) +(assert (not (refines r14 name15))) +(assert (not (refines r14 name14))) +(assert (not (refines r14 name13))) +(assert (not (refines r14 name12))) +(assert (not (refines r14 name11))) +(assert (not (refines r14 name10))) +(assert (not (refines r14 name6))) +(assert (not (refines r14 name5))) +(assert (not (refines r14 name4))) +(assert (not (refines r14 name3))) +(assert (not (refines r14 name9))) +(assert (not (refines r14 name8))) +(assert (not (refines r14 name7))) +(assert (not (refines r14 name2))) +(assert (not (refines r14 name1))) +(assert (not (refines r14 name0))) +(assert (not (refines name11 r2))) +(assert (not (refines name11 r3))) +(assert (not (refines name11 r4))) +(assert (not (refines name11 r5))) +(assert (not (refines name11 r6))) +(assert (not (refines name11 r7))) +(assert (not (refines name11 r8))) +(assert (not (refines name11 r9))) +(assert (not (refines name11 name19))) +(assert (not (refines name11 name18))) +(assert (not (refines name11 name17))) +(assert (not (refines name11 name16))) +(assert (not (refines name11 r10))) +(assert (not (refines name11 name15))) +(assert (not (refines name11 name14))) +(assert (not (refines name11 r12))) +(assert (not (refines name11 name13))) +(assert (not (refines name11 r11))) +(assert (not (refines name11 name12))) +(assert (not (refines name11 r14))) +(assert (not (refines name11 name11))) +(assert (not (refines name11 r13))) +(assert (not (refines name11 name10))) +(assert (not (refines name11 r16))) +(assert (not (refines name11 r15))) +(assert (not (refines name11 r18))) +(assert (not (refines name11 r17))) +(assert (not (refines name11 r19))) +(assert (not (refines name11 name6))) +(assert (not (refines name11 name5))) +(assert (not (refines name11 name4))) +(assert (not (refines name11 name3))) +(assert (not (refines name11 name9))) +(assert (not (refines name11 name8))) +(assert (not (refines name11 name7))) +(assert (not (refines name11 name2))) +(assert (not (refines name11 name1))) +(assert (not (refines name11 r0))) +(assert (not (refines name11 name0))) +(assert (not (refines name11 r1))) +(assert (not (refines r13 name19))) +(assert (not (refines r13 name18))) +(assert (not (refines r13 name17))) +(assert (not (refines r13 name16))) +(assert (not (refines r13 name15))) +(assert (not (refines r13 name14))) +(assert (not (refines r13 name13))) +(assert (not (refines r13 name12))) +(assert (not (refines r13 name11))) +(assert (not (refines r13 name10))) +(assert (not (refines r13 name6))) +(assert (not (refines r13 name5))) +(assert (not (refines r13 name4))) +(assert (not (refines r13 name3))) +(assert (not (refines r13 name9))) +(assert (not (refines r13 name8))) +(assert (not (refines r13 name7))) +(assert (not (refines r13 name2))) +(assert (not (refines r13 name1))) +(assert (not (refines r13 name0))) +(assert (not (refines name10 r2))) +(assert (not (refines name10 r3))) +(assert (not (refines name10 r4))) +(assert (not (refines name10 r5))) +(assert (not (refines name10 r6))) +(assert (not (refines name10 r7))) +(assert (not (refines name10 r8))) +(assert (not (refines name10 r9))) +(assert (not (refines name10 name19))) +(assert (not (refines name10 name18))) +(assert (not (refines name10 name17))) +(assert (not (refines name10 name16))) +(assert (not (refines name10 r10))) +(assert (not (refines name10 name15))) +(assert (not (refines name10 name14))) +(assert (not (refines name10 r12))) +(assert (not (refines name10 name13))) +(assert (not (refines name10 r11))) +(assert (not (refines name10 name12))) +(assert (not (refines name10 r14))) +(assert (not (refines name10 name11))) +(assert (not (refines name10 r13))) +(assert (not (refines name10 name10))) +(assert (not (refines name10 r16))) +(assert (not (refines name10 r15))) +(assert (not (refines name10 r18))) +(assert (not (refines name10 r17))) +(assert (not (refines name10 r19))) +(assert (not (refines name10 name6))) +(assert (not (refines name10 name5))) +(assert (not (refines name10 name4))) +(assert (not (refines name10 name3))) +(assert (not (refines name10 name9))) +(assert (not (refines name10 name8))) +(assert (not (refines name10 name7))) +(assert (not (refines name10 name2))) +(assert (not (refines name10 name1))) +(assert (not (refines name10 r0))) +(assert (not (refines name10 name0))) +(assert (not (refines name10 r1))) +(assert (not (refines r16 name19))) +(assert (not (refines r16 name18))) +(assert (not (refines r16 name17))) +(assert (not (refines r16 name16))) +(assert (not (refines r16 name15))) +(assert (not (refines r16 name14))) +(assert (not (refines r16 name13))) +(assert (not (refines r16 name12))) +(assert (not (refines r16 name11))) +(assert (not (refines r16 name10))) +(assert (not (refines r16 name6))) +(assert (not (refines r16 name5))) +(assert (not (refines r16 name4))) +(assert (not (refines r16 name3))) +(assert (not (refines r16 name9))) +(assert (not (refines r16 name8))) +(assert (not (refines r16 name7))) +(assert (not (refines r16 name2))) +(assert (not (refines r16 name1))) +(assert (not (refines r16 name0))) +(assert (not (refines r15 name19))) +(assert (not (refines r15 name18))) +(assert (not (refines r15 name17))) +(assert (not (refines r15 name16))) +(assert (not (refines r15 name15))) +(assert (not (refines r15 name14))) +(assert (not (refines r15 name13))) +(assert (not (refines r15 name12))) +(assert (not (refines r15 name11))) +(assert (not (refines r15 name10))) +(assert (not (refines r15 name6))) +(assert (not (refines r15 name5))) +(assert (not (refines r15 name4))) +(assert (not (refines r15 name3))) +(assert (not (refines r15 name9))) +(assert (not (refines r15 name8))) +(assert (not (refines r15 name7))) +(assert (not (refines r15 name2))) +(assert (not (refines r15 name1))) +(assert (not (refines r15 name0))) +(assert (not (refines r18 name19))) +(assert (not (refines r18 name18))) +(assert (not (refines r18 name17))) +(assert (not (refines r18 name16))) +(assert (not (refines r18 name15))) +(assert (not (refines r18 name14))) +(assert (not (refines r18 name13))) +(assert (not (refines r18 name12))) +(assert (not (refines r18 name11))) +(assert (not (refines r18 name10))) +(assert (not (refines r18 name6))) +(assert (not (refines r18 name5))) +(assert (not (refines r18 name4))) +(assert (not (refines r18 name3))) +(assert (not (refines r18 name9))) +(assert (not (refines r18 name8))) +(assert (not (refines r18 name7))) +(assert (not (refines r18 name2))) +(assert (not (refines r18 name1))) +(assert (not (refines r18 name0))) +(assert (not (refines r17 name19))) +(assert (not (refines r17 name18))) +(assert (not (refines r17 name17))) +(assert (not (refines r17 name16))) +(assert (not (refines r17 name15))) +(assert (not (refines r17 name14))) +(assert (not (refines r17 name13))) +(assert (not (refines r17 name12))) +(assert (not (refines r17 name11))) +(assert (not (refines r17 name10))) +(assert (not (refines r17 name6))) +(assert (not (refines r17 name5))) +(assert (not (refines r17 name4))) +(assert (not (refines r17 name3))) +(assert (not (refines r17 name9))) +(assert (not (refines r17 name8))) +(assert (not (refines r17 name7))) +(assert (not (refines r17 name2))) +(assert (not (refines r17 name1))) +(assert (not (refines r17 name0))) +(assert (not (refines r19 name19))) +(assert (not (refines r19 name18))) +(assert (not (refines r19 name17))) +(assert (not (refines r19 name16))) +(assert (not (refines r19 name15))) +(assert (not (refines r19 name14))) +(assert (not (refines r19 name13))) +(assert (not (refines r19 name12))) +(assert (not (refines r19 name11))) +(assert (not (refines r19 name10))) +(assert (not (refines r19 name6))) +(assert (not (refines r19 name5))) +(assert (not (refines r19 name4))) +(assert (not (refines r19 name3))) +(assert (not (refines r19 name9))) +(assert (not (refines r19 name8))) +(assert (not (refines r19 name7))) +(assert (not (refines r19 name2))) +(assert (not (refines r19 name1))) +(assert (not (refines r19 name0))) +(assert (not (refines name6 r2))) +(assert (not (refines name6 r3))) +(assert (not (refines name6 r4))) +(assert (not (refines name6 r5))) +(assert (not (refines name6 r6))) +(assert (not (refines name6 r7))) +(assert (not (refines name6 r8))) +(assert (not (refines name6 r9))) +(assert (not (refines name6 name19))) +(assert (not (refines name6 name18))) +(assert (not (refines name6 name17))) +(assert (not (refines name6 name16))) +(assert (not (refines name6 r10))) +(assert (not (refines name6 name15))) +(assert (not (refines name6 name14))) +(assert (not (refines name6 r12))) +(assert (not (refines name6 name13))) +(assert (not (refines name6 r11))) +(assert (not (refines name6 name12))) +(assert (not (refines name6 r14))) +(assert (not (refines name6 name11))) +(assert (not (refines name6 r13))) +(assert (not (refines name6 name10))) +(assert (not (refines name6 r16))) +(assert (not (refines name6 r15))) +(assert (not (refines name6 r18))) +(assert (not (refines name6 r17))) +(assert (not (refines name6 r19))) +(assert (not (refines name6 name6))) +(assert (not (refines name6 name5))) +(assert (not (refines name6 name4))) +(assert (not (refines name6 name3))) +(assert (not (refines name6 name9))) +(assert (not (refines name6 name8))) +(assert (not (refines name6 name7))) +(assert (not (refines name6 name2))) +(assert (not (refines name6 name1))) +(assert (not (refines name6 r0))) +(assert (not (refines name6 name0))) +(assert (not (refines name6 r1))) +(assert (not (refines name5 r2))) +(assert (not (refines name5 r3))) +(assert (not (refines name5 r4))) +(assert (not (refines name5 r5))) +(assert (not (refines name5 r6))) +(assert (not (refines name5 r7))) +(assert (not (refines name5 r8))) +(assert (not (refines name5 r9))) +(assert (not (refines name5 name19))) +(assert (not (refines name5 name18))) +(assert (not (refines name5 name17))) +(assert (not (refines name5 name16))) +(assert (not (refines name5 r10))) +(assert (not (refines name5 name15))) +(assert (not (refines name5 name14))) +(assert (not (refines name5 r12))) +(assert (not (refines name5 name13))) +(assert (not (refines name5 r11))) +(assert (not (refines name5 name12))) +(assert (not (refines name5 r14))) +(assert (not (refines name5 name11))) +(assert (not (refines name5 r13))) +(assert (not (refines name5 name10))) +(assert (not (refines name5 r16))) +(assert (not (refines name5 r15))) +(assert (not (refines name5 r18))) +(assert (not (refines name5 r17))) +(assert (not (refines name5 r19))) +(assert (not (refines name5 name6))) +(assert (not (refines name5 name5))) +(assert (not (refines name5 name4))) +(assert (not (refines name5 name3))) +(assert (not (refines name5 name9))) +(assert (not (refines name5 name8))) +(assert (not (refines name5 name7))) +(assert (not (refines name5 name2))) +(assert (not (refines name5 name1))) +(assert (not (refines name5 r0))) +(assert (not (refines name5 name0))) +(assert (not (refines name5 r1))) +(assert (not (refines name4 r2))) +(assert (not (refines name4 r3))) +(assert (not (refines name4 r4))) +(assert (not (refines name4 r5))) +(assert (not (refines name4 r6))) +(assert (not (refines name4 r7))) +(assert (not (refines name4 r8))) +(assert (not (refines name4 r9))) +(assert (not (refines name4 name19))) +(assert (not (refines name4 name18))) +(assert (not (refines name4 name17))) +(assert (not (refines name4 name16))) +(assert (not (refines name4 r10))) +(assert (not (refines name4 name15))) +(assert (not (refines name4 name14))) +(assert (not (refines name4 r12))) +(assert (not (refines name4 name13))) +(assert (not (refines name4 r11))) +(assert (not (refines name4 name12))) +(assert (not (refines name4 r14))) +(assert (not (refines name4 name11))) +(assert (not (refines name4 r13))) +(assert (not (refines name4 name10))) +(assert (not (refines name4 r16))) +(assert (not (refines name4 r15))) +(assert (not (refines name4 r18))) +(assert (not (refines name4 r17))) +(assert (not (refines name4 r19))) +(assert (not (refines name4 name6))) +(assert (not (refines name4 name5))) +(assert (not (refines name4 name4))) +(assert (not (refines name4 name3))) +(assert (not (refines name4 name9))) +(assert (not (refines name4 name8))) +(assert (not (refines name4 name7))) +(assert (not (refines name4 name2))) +(assert (not (refines name4 name1))) +(assert (not (refines name4 r0))) +(assert (not (refines name4 name0))) +(assert (not (refines name4 r1))) +(assert (not (refines name3 r2))) +(assert (not (refines name3 r3))) +(assert (not (refines name3 r4))) +(assert (not (refines name3 r5))) +(assert (not (refines name3 r6))) +(assert (not (refines name3 r7))) +(assert (not (refines name3 r8))) +(assert (not (refines name3 r9))) +(assert (not (refines name3 name19))) +(assert (not (refines name3 name18))) +(assert (not (refines name3 name17))) +(assert (not (refines name3 name16))) +(assert (not (refines name3 r10))) +(assert (not (refines name3 name15))) +(assert (not (refines name3 name14))) +(assert (not (refines name3 r12))) +(assert (not (refines name3 name13))) +(assert (not (refines name3 r11))) +(assert (not (refines name3 name12))) +(assert (not (refines name3 r14))) +(assert (not (refines name3 name11))) +(assert (not (refines name3 r13))) +(assert (not (refines name3 name10))) +(assert (not (refines name3 r16))) +(assert (not (refines name3 r15))) +(assert (not (refines name3 r18))) +(assert (not (refines name3 r17))) +(assert (not (refines name3 r19))) +(assert (not (refines name3 name6))) +(assert (not (refines name3 name5))) +(assert (not (refines name3 name4))) +(assert (not (refines name3 name3))) +(assert (not (refines name3 name9))) +(assert (not (refines name3 name8))) +(assert (not (refines name3 name7))) +(assert (not (refines name3 name2))) +(assert (not (refines name3 name1))) +(assert (not (refines name3 r0))) +(assert (not (refines name3 name0))) +(assert (not (refines name3 r1))) +(assert (not (refines name9 r2))) +(assert (not (refines name9 r3))) +(assert (not (refines name9 r4))) +(assert (not (refines name9 r5))) +(assert (not (refines name9 r6))) +(assert (not (refines name9 r7))) +(assert (not (refines name9 r8))) +(assert (not (refines name9 r9))) +(assert (not (refines name9 name19))) +(assert (not (refines name9 name18))) +(assert (not (refines name9 name17))) +(assert (not (refines name9 name16))) +(assert (not (refines name9 r10))) +(assert (not (refines name9 name15))) +(assert (not (refines name9 name14))) +(assert (not (refines name9 r12))) +(assert (not (refines name9 name13))) +(assert (not (refines name9 r11))) +(assert (not (refines name9 name12))) +(assert (not (refines name9 r14))) +(assert (not (refines name9 name11))) +(assert (not (refines name9 r13))) +(assert (not (refines name9 name10))) +(assert (not (refines name9 r16))) +(assert (not (refines name9 r15))) +(assert (not (refines name9 r18))) +(assert (not (refines name9 r17))) +(assert (not (refines name9 r19))) +(assert (not (refines name9 name6))) +(assert (not (refines name9 name5))) +(assert (not (refines name9 name4))) +(assert (not (refines name9 name3))) +(assert (not (refines name9 name9))) +(assert (not (refines name9 name8))) +(assert (not (refines name9 name7))) +(assert (not (refines name9 name2))) +(assert (not (refines name9 name1))) +(assert (not (refines name9 r0))) +(assert (not (refines name9 name0))) +(assert (not (refines name9 r1))) +(assert (not (refines name8 r2))) +(assert (not (refines name8 r3))) +(assert (not (refines name8 r4))) +(assert (not (refines name8 r5))) +(assert (not (refines name8 r6))) +(assert (not (refines name8 r7))) +(assert (not (refines name8 r8))) +(assert (not (refines name8 r9))) +(assert (not (refines name8 name19))) +(assert (not (refines name8 name18))) +(assert (not (refines name8 name17))) +(assert (not (refines name8 name16))) +(assert (not (refines name8 r10))) +(assert (not (refines name8 name15))) +(assert (not (refines name8 name14))) +(assert (not (refines name8 r12))) +(assert (not (refines name8 name13))) +(assert (not (refines name8 r11))) +(assert (not (refines name8 name12))) +(assert (not (refines name8 r14))) +(assert (not (refines name8 name11))) +(assert (not (refines name8 r13))) +(assert (not (refines name8 name10))) +(assert (not (refines name8 r16))) +(assert (not (refines name8 r15))) +(assert (not (refines name8 r18))) +(assert (not (refines name8 r17))) +(assert (not (refines name8 r19))) +(assert (not (refines name8 name6))) +(assert (not (refines name8 name5))) +(assert (not (refines name8 name4))) +(assert (not (refines name8 name3))) +(assert (not (refines name8 name9))) +(assert (not (refines name8 name8))) +(assert (not (refines name8 name7))) +(assert (not (refines name8 name2))) +(assert (not (refines name8 name1))) +(assert (not (refines name8 r0))) +(assert (not (refines name8 name0))) +(assert (not (refines name8 r1))) +(assert (not (refines name7 r2))) +(assert (not (refines name7 r3))) +(assert (not (refines name7 r4))) +(assert (not (refines name7 r5))) +(assert (not (refines name7 r6))) +(assert (not (refines name7 r7))) +(assert (not (refines name7 r8))) +(assert (not (refines name7 r9))) +(assert (not (refines name7 name19))) +(assert (not (refines name7 name18))) +(assert (not (refines name7 name17))) +(assert (not (refines name7 name16))) +(assert (not (refines name7 r10))) +(assert (not (refines name7 name15))) +(assert (not (refines name7 name14))) +(assert (not (refines name7 r12))) +(assert (not (refines name7 name13))) +(assert (not (refines name7 r11))) +(assert (not (refines name7 name12))) +(assert (not (refines name7 r14))) +(assert (not (refines name7 name11))) +(assert (not (refines name7 r13))) +(assert (not (refines name7 name10))) +(assert (not (refines name7 r16))) +(assert (not (refines name7 r15))) +(assert (not (refines name7 r18))) +(assert (not (refines name7 r17))) +(assert (not (refines name7 r19))) +(assert (not (refines name7 name6))) +(assert (not (refines name7 name5))) +(assert (not (refines name7 name4))) +(assert (not (refines name7 name3))) +(assert (not (refines name7 name9))) +(assert (not (refines name7 name8))) +(assert (not (refines name7 name7))) +(assert (not (refines name7 name2))) +(assert (not (refines name7 name1))) +(assert (not (refines name7 r0))) +(assert (not (refines name7 name0))) +(assert (not (refines name7 r1))) +(assert (not (refines name2 r2))) +(assert (not (refines name2 r3))) +(assert (not (refines name2 r4))) +(assert (not (refines name2 r5))) +(assert (not (refines name2 r6))) +(assert (not (refines name2 r7))) +(assert (not (refines name2 r8))) +(assert (not (refines name2 r9))) +(assert (not (refines name2 name19))) +(assert (not (refines name2 name18))) +(assert (not (refines name2 name17))) +(assert (not (refines name2 name16))) +(assert (not (refines name2 r10))) +(assert (not (refines name2 name15))) +(assert (not (refines name2 name14))) +(assert (not (refines name2 r12))) +(assert (not (refines name2 name13))) +(assert (not (refines name2 r11))) +(assert (not (refines name2 name12))) +(assert (not (refines name2 r14))) +(assert (not (refines name2 name11))) +(assert (not (refines name2 r13))) +(assert (not (refines name2 name10))) +(assert (not (refines name2 r16))) +(assert (not (refines name2 r15))) +(assert (not (refines name2 r18))) +(assert (not (refines name2 r17))) +(assert (not (refines name2 r19))) +(assert (not (refines name2 name6))) +(assert (not (refines name2 name5))) +(assert (not (refines name2 name4))) +(assert (not (refines name2 name3))) +(assert (not (refines name2 name9))) +(assert (not (refines name2 name8))) +(assert (not (refines name2 name7))) +(assert (not (refines name2 name2))) +(assert (not (refines name2 name1))) +(assert (not (refines name2 r0))) +(assert (not (refines name2 name0))) +(assert (not (refines name2 r1))) +(assert (not (refines name1 r2))) +(assert (not (refines name1 r3))) +(assert (not (refines name1 r4))) +(assert (not (refines name1 r5))) +(assert (not (refines name1 r6))) +(assert (not (refines name1 r7))) +(assert (not (refines name1 r8))) +(assert (not (refines name1 r9))) +(assert (not (refines name1 name19))) +(assert (not (refines name1 name18))) +(assert (not (refines name1 name17))) +(assert (not (refines name1 name16))) +(assert (not (refines name1 r10))) +(assert (not (refines name1 name15))) +(assert (not (refines name1 name14))) +(assert (not (refines name1 r12))) +(assert (not (refines name1 name13))) +(assert (not (refines name1 r11))) +(assert (not (refines name1 name12))) +(assert (not (refines name1 r14))) +(assert (not (refines name1 name11))) +(assert (not (refines name1 r13))) +(assert (not (refines name1 name10))) +(assert (not (refines name1 r16))) +(assert (not (refines name1 r15))) +(assert (not (refines name1 r18))) +(assert (not (refines name1 r17))) +(assert (not (refines name1 r19))) +(assert (not (refines name1 name6))) +(assert (not (refines name1 name5))) +(assert (not (refines name1 name4))) +(assert (not (refines name1 name3))) +(assert (not (refines name1 name9))) +(assert (not (refines name1 name8))) +(assert (not (refines name1 name7))) +(assert (not (refines name1 name2))) +(assert (not (refines name1 name1))) +(assert (not (refines name1 r0))) +(assert (not (refines name1 name0))) +(assert (not (refines name1 r1))) +(assert (not (refines r0 name19))) +(assert (not (refines r0 name18))) +(assert (not (refines r0 name17))) +(assert (not (refines r0 name16))) +(assert (not (refines r0 name15))) +(assert (not (refines r0 name14))) +(assert (not (refines r0 name13))) +(assert (not (refines r0 name12))) +(assert (not (refines r0 name11))) +(assert (not (refines r0 name10))) +(assert (not (refines r0 name6))) +(assert (not (refines r0 name5))) +(assert (not (refines r0 name4))) +(assert (not (refines r0 name3))) +(assert (not (refines r0 name9))) +(assert (not (refines r0 name8))) +(assert (not (refines r0 name7))) +(assert (not (refines r0 name2))) +(assert (not (refines r0 name1))) +(assert (not (refines r0 name0))) +(assert (not (refines name0 r2))) +(assert (not (refines name0 r3))) +(assert (not (refines name0 r4))) +(assert (not (refines name0 r5))) +(assert (not (refines name0 r6))) +(assert (not (refines name0 r7))) +(assert (not (refines name0 r8))) +(assert (not (refines name0 r9))) +(assert (not (refines name0 name19))) +(assert (not (refines name0 name18))) +(assert (not (refines name0 name17))) +(assert (not (refines name0 name16))) +(assert (not (refines name0 r10))) +(assert (not (refines name0 name15))) +(assert (not (refines name0 name14))) +(assert (not (refines name0 r12))) +(assert (not (refines name0 name13))) +(assert (not (refines name0 r11))) +(assert (not (refines name0 name12))) +(assert (not (refines name0 r14))) +(assert (not (refines name0 name11))) +(assert (not (refines name0 r13))) +(assert (not (refines name0 name10))) +(assert (not (refines name0 r16))) +(assert (not (refines name0 r15))) +(assert (not (refines name0 r18))) +(assert (not (refines name0 r17))) +(assert (not (refines name0 r19))) +(assert (not (refines name0 name6))) +(assert (not (refines name0 name5))) +(assert (not (refines name0 name4))) +(assert (not (refines name0 name3))) +(assert (not (refines name0 name9))) +(assert (not (refines name0 name8))) +(assert (not (refines name0 name7))) +(assert (not (refines name0 name2))) +(assert (not (refines name0 name1))) +(assert (not (refines name0 r0))) +(assert (not (refines name0 name0))) +(assert (not (refines name0 r1))) +(assert (not (refines r1 name19))) +(assert (not (refines r1 name18))) +(assert (not (refines r1 name17))) +(assert (not (refines r1 name16))) +(assert (not (refines r1 name15))) +(assert (not (refines r1 name14))) +(assert (not (refines r1 name13))) +(assert (not (refines r1 name12))) +(assert (not (refines r1 name11))) +(assert (not (refines r1 name10))) +(assert (not (refines r1 name6))) +(assert (not (refines r1 name5))) +(assert (not (refines r1 name4))) +(assert (not (refines r1 name3))) +(assert (not (refines r1 name9))) +(assert (not (refines r1 name8))) +(assert (not (refines r1 name7))) +(assert (not (refines r1 name2))) +(assert (not (refines r1 name1))) +(assert (not (refines r1 name0))) +(assert (not (contains r2 name19))) +(assert (not (contains r2 name18))) +(assert (not (contains r2 name17))) +(assert (not (contains r2 name16))) +(assert (not (contains r2 name15))) +(assert (not (contains r2 name14))) +(assert (not (contains r2 name13))) +(assert (not (contains r2 name12))) +(assert (not (contains r2 name11))) +(assert (not (contains r2 name10))) +(assert (not (contains r2 name6))) +(assert (not (contains r2 name5))) +(assert (not (contains r2 name4))) +(assert (not (contains r2 name3))) +(assert (not (contains r2 name9))) +(assert (not (contains r2 name8))) +(assert (not (contains r2 name7))) +(assert (not (contains r2 name2))) +(assert (not (contains r2 name1))) +(assert (not (contains r2 name0))) +(assert (not (contains r3 name19))) +(assert (not (contains r3 name18))) +(assert (not (contains r3 name17))) +(assert (not (contains r3 name16))) +(assert (not (contains r3 name15))) +(assert (not (contains r3 name14))) +(assert (not (contains r3 name13))) +(assert (not (contains r3 name12))) +(assert (not (contains r3 name11))) +(assert (not (contains r3 name10))) +(assert (not (contains r3 name6))) +(assert (not (contains r3 name5))) +(assert (not (contains r3 name4))) +(assert (not (contains r3 name3))) +(assert (not (contains r3 name9))) +(assert (not (contains r3 name8))) +(assert (not (contains r3 name7))) +(assert (not (contains r3 name2))) +(assert (not (contains r3 name1))) +(assert (not (contains r3 name0))) +(assert (not (contains r4 name19))) +(assert (not (contains r4 name18))) +(assert (not (contains r4 name17))) +(assert (not (contains r4 name16))) +(assert (not (contains r4 name15))) +(assert (not (contains r4 name14))) +(assert (not (contains r4 name13))) +(assert (not (contains r4 name12))) +(assert (not (contains r4 name11))) +(assert (not (contains r4 name10))) +(assert (not (contains r4 name6))) +(assert (not (contains r4 name5))) +(assert (not (contains r4 name4))) +(assert (not (contains r4 name3))) +(assert (not (contains r4 name9))) +(assert (not (contains r4 name8))) +(assert (not (contains r4 name7))) +(assert (not (contains r4 name2))) +(assert (not (contains r4 name1))) +(assert (not (contains r4 name0))) +(assert (not (contains r5 name19))) +(assert (not (contains r5 name18))) +(assert (not (contains r5 name17))) +(assert (not (contains r5 name16))) +(assert (not (contains r5 name15))) +(assert (not (contains r5 name14))) +(assert (not (contains r5 name13))) +(assert (not (contains r5 name12))) +(assert (not (contains r5 name11))) +(assert (not (contains r5 name10))) +(assert (not (contains r5 name6))) +(assert (not (contains r5 name5))) +(assert (not (contains r5 name4))) +(assert (not (contains r5 name3))) +(assert (not (contains r5 name9))) +(assert (not (contains r5 name8))) +(assert (not (contains r5 name7))) +(assert (not (contains r5 name2))) +(assert (not (contains r5 name1))) +(assert (not (contains r5 name0))) +(assert (not (contains r6 name19))) +(assert (not (contains r6 name18))) +(assert (not (contains r6 name17))) +(assert (not (contains r6 name16))) +(assert (not (contains r6 name15))) +(assert (not (contains r6 name14))) +(assert (not (contains r6 name13))) +(assert (not (contains r6 name12))) +(assert (not (contains r6 name11))) +(assert (not (contains r6 name10))) +(assert (not (contains r6 name6))) +(assert (not (contains r6 name5))) +(assert (not (contains r6 name4))) +(assert (not (contains r6 name3))) +(assert (not (contains r6 name9))) +(assert (not (contains r6 name8))) +(assert (not (contains r6 name7))) +(assert (not (contains r6 name2))) +(assert (not (contains r6 name1))) +(assert (not (contains r6 name0))) +(assert (not (contains r7 name19))) +(assert (not (contains r7 name18))) +(assert (not (contains r7 name17))) +(assert (not (contains r7 name16))) +(assert (not (contains r7 name15))) +(assert (not (contains r7 name14))) +(assert (not (contains r7 name13))) +(assert (not (contains r7 name12))) +(assert (not (contains r7 name11))) +(assert (not (contains r7 name10))) +(assert (not (contains r7 name6))) +(assert (not (contains r7 name5))) +(assert (not (contains r7 name4))) +(assert (not (contains r7 name3))) +(assert (not (contains r7 name9))) +(assert (not (contains r7 name8))) +(assert (not (contains r7 name7))) +(assert (not (contains r7 name2))) +(assert (not (contains r7 name1))) +(assert (not (contains r7 name0))) +(assert (not (contains r8 name19))) +(assert (not (contains r8 name18))) +(assert (not (contains r8 name17))) +(assert (not (contains r8 name16))) +(assert (not (contains r8 name15))) +(assert (not (contains r8 name14))) +(assert (not (contains r8 name13))) +(assert (not (contains r8 name12))) +(assert (not (contains r8 name11))) +(assert (not (contains r8 name10))) +(assert (not (contains r8 name6))) +(assert (not (contains r8 name5))) +(assert (not (contains r8 name4))) +(assert (not (contains r8 name3))) +(assert (not (contains r8 name9))) +(assert (not (contains r8 name8))) +(assert (not (contains r8 name7))) +(assert (not (contains r8 name2))) +(assert (not (contains r8 name1))) +(assert (not (contains r8 name0))) +(assert (not (contains r9 name19))) +(assert (not (contains r9 name18))) +(assert (not (contains r9 name17))) +(assert (not (contains r9 name16))) +(assert (not (contains r9 name15))) +(assert (not (contains r9 name14))) +(assert (not (contains r9 name13))) +(assert (not (contains r9 name12))) +(assert (not (contains r9 name11))) +(assert (not (contains r9 name10))) +(assert (not (contains r9 name6))) +(assert (not (contains r9 name5))) +(assert (not (contains r9 name4))) +(assert (not (contains r9 name3))) +(assert (not (contains r9 name9))) +(assert (not (contains r9 name8))) +(assert (not (contains r9 name7))) +(assert (not (contains r9 name2))) +(assert (not (contains r9 name1))) +(assert (not (contains r9 name0))) +(assert (not (contains name19 r2))) +(assert (not (contains name19 r3))) +(assert (not (contains name19 r4))) +(assert (not (contains name19 r5))) +(assert (not (contains name19 r6))) +(assert (not (contains name19 r7))) +(assert (not (contains name19 r8))) +(assert (not (contains name19 r9))) +(assert (not (contains name19 name19))) +(assert (not (contains name19 name18))) +(assert (not (contains name19 name17))) +(assert (not (contains name19 name16))) +(assert (not (contains name19 r10))) +(assert (not (contains name19 name15))) +(assert (not (contains name19 name14))) +(assert (not (contains name19 r12))) +(assert (not (contains name19 name13))) +(assert (not (contains name19 r11))) +(assert (not (contains name19 name12))) +(assert (not (contains name19 r14))) +(assert (not (contains name19 name11))) +(assert (not (contains name19 r13))) +(assert (not (contains name19 name10))) +(assert (not (contains name19 r16))) +(assert (not (contains name19 r15))) +(assert (not (contains name19 r18))) +(assert (not (contains name19 r17))) +(assert (not (contains name19 r19))) +(assert (not (contains name19 name6))) +(assert (not (contains name19 name5))) +(assert (not (contains name19 name4))) +(assert (not (contains name19 name3))) +(assert (not (contains name19 name9))) +(assert (not (contains name19 name8))) +(assert (not (contains name19 name7))) +(assert (not (contains name19 name2))) +(assert (not (contains name19 name1))) +(assert (not (contains name19 r0))) +(assert (not (contains name19 name0))) +(assert (not (contains name19 r1))) +(assert (not (contains name18 r2))) +(assert (not (contains name18 r3))) +(assert (not (contains name18 r4))) +(assert (not (contains name18 r5))) +(assert (not (contains name18 r6))) +(assert (not (contains name18 r7))) +(assert (not (contains name18 r8))) +(assert (not (contains name18 r9))) +(assert (not (contains name18 name19))) +(assert (not (contains name18 name18))) +(assert (not (contains name18 name17))) +(assert (not (contains name18 name16))) +(assert (not (contains name18 r10))) +(assert (not (contains name18 name15))) +(assert (not (contains name18 name14))) +(assert (not (contains name18 r12))) +(assert (not (contains name18 name13))) +(assert (not (contains name18 r11))) +(assert (not (contains name18 name12))) +(assert (not (contains name18 r14))) +(assert (not (contains name18 name11))) +(assert (not (contains name18 r13))) +(assert (not (contains name18 name10))) +(assert (not (contains name18 r16))) +(assert (not (contains name18 r15))) +(assert (not (contains name18 r18))) +(assert (not (contains name18 r17))) +(assert (not (contains name18 r19))) +(assert (not (contains name18 name6))) +(assert (not (contains name18 name5))) +(assert (not (contains name18 name4))) +(assert (not (contains name18 name3))) +(assert (not (contains name18 name9))) +(assert (not (contains name18 name8))) +(assert (not (contains name18 name7))) +(assert (not (contains name18 name2))) +(assert (not (contains name18 name1))) +(assert (not (contains name18 r0))) +(assert (not (contains name18 name0))) +(assert (not (contains name18 r1))) +(assert (not (contains name17 r2))) +(assert (not (contains name17 r3))) +(assert (not (contains name17 r4))) +(assert (not (contains name17 r5))) +(assert (not (contains name17 r6))) +(assert (not (contains name17 r7))) +(assert (not (contains name17 r8))) +(assert (not (contains name17 r9))) +(assert (not (contains name17 name19))) +(assert (not (contains name17 name18))) +(assert (not (contains name17 name17))) +(assert (not (contains name17 name16))) +(assert (not (contains name17 r10))) +(assert (not (contains name17 name15))) +(assert (not (contains name17 name14))) +(assert (not (contains name17 r12))) +(assert (not (contains name17 name13))) +(assert (not (contains name17 r11))) +(assert (not (contains name17 name12))) +(assert (not (contains name17 r14))) +(assert (not (contains name17 name11))) +(assert (not (contains name17 r13))) +(assert (not (contains name17 name10))) +(assert (not (contains name17 r16))) +(assert (not (contains name17 r15))) +(assert (not (contains name17 r18))) +(assert (not (contains name17 r17))) +(assert (not (contains name17 r19))) +(assert (not (contains name17 name6))) +(assert (not (contains name17 name5))) +(assert (not (contains name17 name4))) +(assert (not (contains name17 name3))) +(assert (not (contains name17 name9))) +(assert (not (contains name17 name8))) +(assert (not (contains name17 name7))) +(assert (not (contains name17 name2))) +(assert (not (contains name17 name1))) +(assert (not (contains name17 r0))) +(assert (not (contains name17 name0))) +(assert (not (contains name17 r1))) +(assert (not (contains name16 r2))) +(assert (not (contains name16 r3))) +(assert (not (contains name16 r4))) +(assert (not (contains name16 r5))) +(assert (not (contains name16 r6))) +(assert (not (contains name16 r7))) +(assert (not (contains name16 r8))) +(assert (not (contains name16 r9))) +(assert (not (contains name16 name19))) +(assert (not (contains name16 name18))) +(assert (not (contains name16 name17))) +(assert (not (contains name16 name16))) +(assert (not (contains name16 r10))) +(assert (not (contains name16 name15))) +(assert (not (contains name16 name14))) +(assert (not (contains name16 r12))) +(assert (not (contains name16 name13))) +(assert (not (contains name16 r11))) +(assert (not (contains name16 name12))) +(assert (not (contains name16 r14))) +(assert (not (contains name16 name11))) +(assert (not (contains name16 r13))) +(assert (not (contains name16 name10))) +(assert (not (contains name16 r16))) +(assert (not (contains name16 r15))) +(assert (not (contains name16 r18))) +(assert (not (contains name16 r17))) +(assert (not (contains name16 r19))) +(assert (not (contains name16 name6))) +(assert (not (contains name16 name5))) +(assert (not (contains name16 name4))) +(assert (not (contains name16 name3))) +(assert (not (contains name16 name9))) +(assert (not (contains name16 name8))) +(assert (not (contains name16 name7))) +(assert (not (contains name16 name2))) +(assert (not (contains name16 name1))) +(assert (not (contains name16 r0))) +(assert (not (contains name16 name0))) +(assert (not (contains name16 r1))) +(assert (not (contains r10 name19))) +(assert (not (contains r10 name18))) +(assert (not (contains r10 name17))) +(assert (not (contains r10 name16))) +(assert (not (contains r10 name15))) +(assert (not (contains r10 name14))) +(assert (not (contains r10 name13))) +(assert (not (contains r10 name12))) +(assert (not (contains r10 name11))) +(assert (not (contains r10 name10))) +(assert (not (contains r10 name6))) +(assert (not (contains r10 name5))) +(assert (not (contains r10 name4))) +(assert (not (contains r10 name3))) +(assert (not (contains r10 name9))) +(assert (not (contains r10 name8))) +(assert (not (contains r10 name7))) +(assert (not (contains r10 name2))) +(assert (not (contains r10 name1))) +(assert (not (contains r10 name0))) +(assert (not (contains name15 r2))) +(assert (not (contains name15 r3))) +(assert (not (contains name15 r4))) +(assert (not (contains name15 r5))) +(assert (not (contains name15 r6))) +(assert (not (contains name15 r7))) +(assert (not (contains name15 r8))) +(assert (not (contains name15 r9))) +(assert (not (contains name15 name19))) +(assert (not (contains name15 name18))) +(assert (not (contains name15 name17))) +(assert (not (contains name15 name16))) +(assert (not (contains name15 r10))) +(assert (not (contains name15 name15))) +(assert (not (contains name15 name14))) +(assert (not (contains name15 r12))) +(assert (not (contains name15 name13))) +(assert (not (contains name15 r11))) +(assert (not (contains name15 name12))) +(assert (not (contains name15 r14))) +(assert (not (contains name15 name11))) +(assert (not (contains name15 r13))) +(assert (not (contains name15 name10))) +(assert (not (contains name15 r16))) +(assert (not (contains name15 r15))) +(assert (not (contains name15 r18))) +(assert (not (contains name15 r17))) +(assert (not (contains name15 r19))) +(assert (not (contains name15 name6))) +(assert (not (contains name15 name5))) +(assert (not (contains name15 name4))) +(assert (not (contains name15 name3))) +(assert (not (contains name15 name9))) +(assert (not (contains name15 name8))) +(assert (not (contains name15 name7))) +(assert (not (contains name15 name2))) +(assert (not (contains name15 name1))) +(assert (not (contains name15 r0))) +(assert (not (contains name15 name0))) +(assert (not (contains name15 r1))) +(assert (not (contains name14 r2))) +(assert (not (contains name14 r3))) +(assert (not (contains name14 r4))) +(assert (not (contains name14 r5))) +(assert (not (contains name14 r6))) +(assert (not (contains name14 r7))) +(assert (not (contains name14 r8))) +(assert (not (contains name14 r9))) +(assert (not (contains name14 name19))) +(assert (not (contains name14 name18))) +(assert (not (contains name14 name17))) +(assert (not (contains name14 name16))) +(assert (not (contains name14 r10))) +(assert (not (contains name14 name15))) +(assert (not (contains name14 name14))) +(assert (not (contains name14 r12))) +(assert (not (contains name14 name13))) +(assert (not (contains name14 r11))) +(assert (not (contains name14 name12))) +(assert (not (contains name14 r14))) +(assert (not (contains name14 name11))) +(assert (not (contains name14 r13))) +(assert (not (contains name14 name10))) +(assert (not (contains name14 r16))) +(assert (not (contains name14 r15))) +(assert (not (contains name14 r18))) +(assert (not (contains name14 r17))) +(assert (not (contains name14 r19))) +(assert (not (contains name14 name6))) +(assert (not (contains name14 name5))) +(assert (not (contains name14 name4))) +(assert (not (contains name14 name3))) +(assert (not (contains name14 name9))) +(assert (not (contains name14 name8))) +(assert (not (contains name14 name7))) +(assert (not (contains name14 name2))) +(assert (not (contains name14 name1))) +(assert (not (contains name14 r0))) +(assert (not (contains name14 name0))) +(assert (not (contains name14 r1))) +(assert (not (contains r12 name19))) +(assert (not (contains r12 name18))) +(assert (not (contains r12 name17))) +(assert (not (contains r12 name16))) +(assert (not (contains r12 name15))) +(assert (not (contains r12 name14))) +(assert (not (contains r12 name13))) +(assert (not (contains r12 name12))) +(assert (not (contains r12 name11))) +(assert (not (contains r12 name10))) +(assert (not (contains r12 name6))) +(assert (not (contains r12 name5))) +(assert (not (contains r12 name4))) +(assert (not (contains r12 name3))) +(assert (not (contains r12 name9))) +(assert (not (contains r12 name8))) +(assert (not (contains r12 name7))) +(assert (not (contains r12 name2))) +(assert (not (contains r12 name1))) +(assert (not (contains r12 name0))) +(assert (not (contains name13 r2))) +(assert (not (contains name13 r3))) +(assert (not (contains name13 r4))) +(assert (not (contains name13 r5))) +(assert (not (contains name13 r6))) +(assert (not (contains name13 r7))) +(assert (not (contains name13 r8))) +(assert (not (contains name13 r9))) +(assert (not (contains name13 name19))) +(assert (not (contains name13 name18))) +(assert (not (contains name13 name17))) +(assert (not (contains name13 name16))) +(assert (not (contains name13 r10))) +(assert (not (contains name13 name15))) +(assert (not (contains name13 name14))) +(assert (not (contains name13 r12))) +(assert (not (contains name13 name13))) +(assert (not (contains name13 r11))) +(assert (not (contains name13 name12))) +(assert (not (contains name13 r14))) +(assert (not (contains name13 name11))) +(assert (not (contains name13 r13))) +(assert (not (contains name13 name10))) +(assert (not (contains name13 r16))) +(assert (not (contains name13 r15))) +(assert (not (contains name13 r18))) +(assert (not (contains name13 r17))) +(assert (not (contains name13 r19))) +(assert (not (contains name13 name6))) +(assert (not (contains name13 name5))) +(assert (not (contains name13 name4))) +(assert (not (contains name13 name3))) +(assert (not (contains name13 name9))) +(assert (not (contains name13 name8))) +(assert (not (contains name13 name7))) +(assert (not (contains name13 name2))) +(assert (not (contains name13 name1))) +(assert (not (contains name13 r0))) +(assert (not (contains name13 name0))) +(assert (not (contains name13 r1))) +(assert (not (contains r11 name19))) +(assert (not (contains r11 name18))) +(assert (not (contains r11 name17))) +(assert (not (contains r11 name16))) +(assert (not (contains r11 name15))) +(assert (not (contains r11 name14))) +(assert (not (contains r11 name13))) +(assert (not (contains r11 name12))) +(assert (not (contains r11 name11))) +(assert (not (contains r11 name10))) +(assert (not (contains r11 name6))) +(assert (not (contains r11 name5))) +(assert (not (contains r11 name4))) +(assert (not (contains r11 name3))) +(assert (not (contains r11 name9))) +(assert (not (contains r11 name8))) +(assert (not (contains r11 name7))) +(assert (not (contains r11 name2))) +(assert (not (contains r11 name1))) +(assert (not (contains r11 name0))) +(assert (not (contains name12 r2))) +(assert (not (contains name12 r3))) +(assert (not (contains name12 r4))) +(assert (not (contains name12 r5))) +(assert (not (contains name12 r6))) +(assert (not (contains name12 r7))) +(assert (not (contains name12 r8))) +(assert (not (contains name12 r9))) +(assert (not (contains name12 name19))) +(assert (not (contains name12 name18))) +(assert (not (contains name12 name17))) +(assert (not (contains name12 name16))) +(assert (not (contains name12 r10))) +(assert (not (contains name12 name15))) +(assert (not (contains name12 name14))) +(assert (not (contains name12 r12))) +(assert (not (contains name12 name13))) +(assert (not (contains name12 r11))) +(assert (not (contains name12 name12))) +(assert (not (contains name12 r14))) +(assert (not (contains name12 name11))) +(assert (not (contains name12 r13))) +(assert (not (contains name12 name10))) +(assert (not (contains name12 r16))) +(assert (not (contains name12 r15))) +(assert (not (contains name12 r18))) +(assert (not (contains name12 r17))) +(assert (not (contains name12 r19))) +(assert (not (contains name12 name6))) +(assert (not (contains name12 name5))) +(assert (not (contains name12 name4))) +(assert (not (contains name12 name3))) +(assert (not (contains name12 name9))) +(assert (not (contains name12 name8))) +(assert (not (contains name12 name7))) +(assert (not (contains name12 name2))) +(assert (not (contains name12 name1))) +(assert (not (contains name12 r0))) +(assert (not (contains name12 name0))) +(assert (not (contains name12 r1))) +(assert (not (contains r14 name19))) +(assert (not (contains r14 name18))) +(assert (not (contains r14 name17))) +(assert (not (contains r14 name16))) +(assert (not (contains r14 name15))) +(assert (not (contains r14 name14))) +(assert (not (contains r14 name13))) +(assert (not (contains r14 name12))) +(assert (not (contains r14 name11))) +(assert (not (contains r14 name10))) +(assert (not (contains r14 name6))) +(assert (not (contains r14 name5))) +(assert (not (contains r14 name4))) +(assert (not (contains r14 name3))) +(assert (not (contains r14 name9))) +(assert (not (contains r14 name8))) +(assert (not (contains r14 name7))) +(assert (not (contains r14 name2))) +(assert (not (contains r14 name1))) +(assert (not (contains r14 name0))) +(assert (not (contains name11 r2))) +(assert (not (contains name11 r3))) +(assert (not (contains name11 r4))) +(assert (not (contains name11 r5))) +(assert (not (contains name11 r6))) +(assert (not (contains name11 r7))) +(assert (not (contains name11 r8))) +(assert (not (contains name11 r9))) +(assert (not (contains name11 name19))) +(assert (not (contains name11 name18))) +(assert (not (contains name11 name17))) +(assert (not (contains name11 name16))) +(assert (not (contains name11 r10))) +(assert (not (contains name11 name15))) +(assert (not (contains name11 name14))) +(assert (not (contains name11 r12))) +(assert (not (contains name11 name13))) +(assert (not (contains name11 r11))) +(assert (not (contains name11 name12))) +(assert (not (contains name11 r14))) +(assert (not (contains name11 name11))) +(assert (not (contains name11 r13))) +(assert (not (contains name11 name10))) +(assert (not (contains name11 r16))) +(assert (not (contains name11 r15))) +(assert (not (contains name11 r18))) +(assert (not (contains name11 r17))) +(assert (not (contains name11 r19))) +(assert (not (contains name11 name6))) +(assert (not (contains name11 name5))) +(assert (not (contains name11 name4))) +(assert (not (contains name11 name3))) +(assert (not (contains name11 name9))) +(assert (not (contains name11 name8))) +(assert (not (contains name11 name7))) +(assert (not (contains name11 name2))) +(assert (not (contains name11 name1))) +(assert (not (contains name11 r0))) +(assert (not (contains name11 name0))) +(assert (not (contains name11 r1))) +(assert (not (contains r13 name19))) +(assert (not (contains r13 name18))) +(assert (not (contains r13 name17))) +(assert (not (contains r13 name16))) +(assert (not (contains r13 name15))) +(assert (not (contains r13 name14))) +(assert (not (contains r13 name13))) +(assert (not (contains r13 name12))) +(assert (not (contains r13 name11))) +(assert (not (contains r13 name10))) +(assert (not (contains r13 name6))) +(assert (not (contains r13 name5))) +(assert (not (contains r13 name4))) +(assert (not (contains r13 name3))) +(assert (not (contains r13 name9))) +(assert (not (contains r13 name8))) +(assert (not (contains r13 name7))) +(assert (not (contains r13 name2))) +(assert (not (contains r13 name1))) +(assert (not (contains r13 name0))) +(assert (not (contains name10 r2))) +(assert (not (contains name10 r3))) +(assert (not (contains name10 r4))) +(assert (not (contains name10 r5))) +(assert (not (contains name10 r6))) +(assert (not (contains name10 r7))) +(assert (not (contains name10 r8))) +(assert (not (contains name10 r9))) +(assert (not (contains name10 name19))) +(assert (not (contains name10 name18))) +(assert (not (contains name10 name17))) +(assert (not (contains name10 name16))) +(assert (not (contains name10 r10))) +(assert (not (contains name10 name15))) +(assert (not (contains name10 name14))) +(assert (not (contains name10 r12))) +(assert (not (contains name10 name13))) +(assert (not (contains name10 r11))) +(assert (not (contains name10 name12))) +(assert (not (contains name10 r14))) +(assert (not (contains name10 name11))) +(assert (not (contains name10 r13))) +(assert (not (contains name10 name10))) +(assert (not (contains name10 r16))) +(assert (not (contains name10 r15))) +(assert (not (contains name10 r18))) +(assert (not (contains name10 r17))) +(assert (not (contains name10 r19))) +(assert (not (contains name10 name6))) +(assert (not (contains name10 name5))) +(assert (not (contains name10 name4))) +(assert (not (contains name10 name3))) +(assert (not (contains name10 name9))) +(assert (not (contains name10 name8))) +(assert (not (contains name10 name7))) +(assert (not (contains name10 name2))) +(assert (not (contains name10 name1))) +(assert (not (contains name10 r0))) +(assert (not (contains name10 name0))) +(assert (not (contains name10 r1))) +(assert (not (contains r16 name19))) +(assert (not (contains r16 name18))) +(assert (not (contains r16 name17))) +(assert (not (contains r16 name16))) +(assert (not (contains r16 name15))) +(assert (not (contains r16 name14))) +(assert (not (contains r16 name13))) +(assert (not (contains r16 name12))) +(assert (not (contains r16 name11))) +(assert (not (contains r16 name10))) +(assert (not (contains r16 name6))) +(assert (not (contains r16 name5))) +(assert (not (contains r16 name4))) +(assert (not (contains r16 name3))) +(assert (not (contains r16 name9))) +(assert (not (contains r16 name8))) +(assert (not (contains r16 name7))) +(assert (not (contains r16 name2))) +(assert (not (contains r16 name1))) +(assert (not (contains r16 name0))) +(assert (not (contains r15 name19))) +(assert (not (contains r15 name18))) +(assert (not (contains r15 name17))) +(assert (not (contains r15 name16))) +(assert (not (contains r15 name15))) +(assert (not (contains r15 name14))) +(assert (not (contains r15 name13))) +(assert (not (contains r15 name12))) +(assert (not (contains r15 name11))) +(assert (not (contains r15 name10))) +(assert (not (contains r15 name6))) +(assert (not (contains r15 name5))) +(assert (not (contains r15 name4))) +(assert (not (contains r15 name3))) +(assert (not (contains r15 name9))) +(assert (not (contains r15 name8))) +(assert (not (contains r15 name7))) +(assert (not (contains r15 name2))) +(assert (not (contains r15 name1))) +(assert (not (contains r15 name0))) +(assert (not (contains r18 name19))) +(assert (not (contains r18 name18))) +(assert (not (contains r18 name17))) +(assert (not (contains r18 name16))) +(assert (not (contains r18 name15))) +(assert (not (contains r18 name14))) +(assert (not (contains r18 name13))) +(assert (not (contains r18 name12))) +(assert (not (contains r18 name11))) +(assert (not (contains r18 name10))) +(assert (not (contains r18 name6))) +(assert (not (contains r18 name5))) +(assert (not (contains r18 name4))) +(assert (not (contains r18 name3))) +(assert (not (contains r18 name9))) +(assert (not (contains r18 name8))) +(assert (not (contains r18 name7))) +(assert (not (contains r18 name2))) +(assert (not (contains r18 name1))) +(assert (not (contains r18 name0))) +(assert (not (contains r17 name19))) +(assert (not (contains r17 name18))) +(assert (not (contains r17 name17))) +(assert (not (contains r17 name16))) +(assert (not (contains r17 name15))) +(assert (not (contains r17 name14))) +(assert (not (contains r17 name13))) +(assert (not (contains r17 name12))) +(assert (not (contains r17 name11))) +(assert (not (contains r17 name10))) +(assert (not (contains r17 name6))) +(assert (not (contains r17 name5))) +(assert (not (contains r17 name4))) +(assert (not (contains r17 name3))) +(assert (not (contains r17 name9))) +(assert (not (contains r17 name8))) +(assert (not (contains r17 name7))) +(assert (not (contains r17 name2))) +(assert (not (contains r17 name1))) +(assert (not (contains r17 name0))) +(assert (not (contains r19 name19))) +(assert (not (contains r19 name18))) +(assert (not (contains r19 name17))) +(assert (not (contains r19 name16))) +(assert (not (contains r19 name15))) +(assert (not (contains r19 name14))) +(assert (not (contains r19 name13))) +(assert (not (contains r19 name12))) +(assert (not (contains r19 name11))) +(assert (not (contains r19 name10))) +(assert (not (contains r19 name6))) +(assert (not (contains r19 name5))) +(assert (not (contains r19 name4))) +(assert (not (contains r19 name3))) +(assert (not (contains r19 name9))) +(assert (not (contains r19 name8))) +(assert (not (contains r19 name7))) +(assert (not (contains r19 name2))) +(assert (not (contains r19 name1))) +(assert (not (contains r19 name0))) +(assert (not (contains name6 r2))) +(assert (not (contains name6 r3))) +(assert (not (contains name6 r4))) +(assert (not (contains name6 r5))) +(assert (not (contains name6 r6))) +(assert (not (contains name6 r7))) +(assert (not (contains name6 r8))) +(assert (not (contains name6 r9))) +(assert (not (contains name6 name19))) +(assert (not (contains name6 name18))) +(assert (not (contains name6 name17))) +(assert (not (contains name6 name16))) +(assert (not (contains name6 r10))) +(assert (not (contains name6 name15))) +(assert (not (contains name6 name14))) +(assert (not (contains name6 r12))) +(assert (not (contains name6 name13))) +(assert (not (contains name6 r11))) +(assert (not (contains name6 name12))) +(assert (not (contains name6 r14))) +(assert (not (contains name6 name11))) +(assert (not (contains name6 r13))) +(assert (not (contains name6 name10))) +(assert (not (contains name6 r16))) +(assert (not (contains name6 r15))) +(assert (not (contains name6 r18))) +(assert (not (contains name6 r17))) +(assert (not (contains name6 r19))) +(assert (not (contains name6 name6))) +(assert (not (contains name6 name5))) +(assert (not (contains name6 name4))) +(assert (not (contains name6 name3))) +(assert (not (contains name6 name9))) +(assert (not (contains name6 name8))) +(assert (not (contains name6 name7))) +(assert (not (contains name6 name2))) +(assert (not (contains name6 name1))) +(assert (not (contains name6 r0))) +(assert (not (contains name6 name0))) +(assert (not (contains name6 r1))) +(assert (not (contains name5 r2))) +(assert (not (contains name5 r3))) +(assert (not (contains name5 r4))) +(assert (not (contains name5 r5))) +(assert (not (contains name5 r6))) +(assert (not (contains name5 r7))) +(assert (not (contains name5 r8))) +(assert (not (contains name5 r9))) +(assert (not (contains name5 name19))) +(assert (not (contains name5 name18))) +(assert (not (contains name5 name17))) +(assert (not (contains name5 name16))) +(assert (not (contains name5 r10))) +(assert (not (contains name5 name15))) +(assert (not (contains name5 name14))) +(assert (not (contains name5 r12))) +(assert (not (contains name5 name13))) +(assert (not (contains name5 r11))) +(assert (not (contains name5 name12))) +(assert (not (contains name5 r14))) +(assert (not (contains name5 name11))) +(assert (not (contains name5 r13))) +(assert (not (contains name5 name10))) +(assert (not (contains name5 r16))) +(assert (not (contains name5 r15))) +(assert (not (contains name5 r18))) +(assert (not (contains name5 r17))) +(assert (not (contains name5 r19))) +(assert (not (contains name5 name6))) +(assert (not (contains name5 name5))) +(assert (not (contains name5 name4))) +(assert (not (contains name5 name3))) +(assert (not (contains name5 name9))) +(assert (not (contains name5 name8))) +(assert (not (contains name5 name7))) +(assert (not (contains name5 name2))) +(assert (not (contains name5 name1))) +(assert (not (contains name5 r0))) +(assert (not (contains name5 name0))) +(assert (not (contains name5 r1))) +(assert (not (contains name4 r2))) +(assert (not (contains name4 r3))) +(assert (not (contains name4 r4))) +(assert (not (contains name4 r5))) +(assert (not (contains name4 r6))) +(assert (not (contains name4 r7))) +(assert (not (contains name4 r8))) +(assert (not (contains name4 r9))) +(assert (not (contains name4 name19))) +(assert (not (contains name4 name18))) +(assert (not (contains name4 name17))) +(assert (not (contains name4 name16))) +(assert (not (contains name4 r10))) +(assert (not (contains name4 name15))) +(assert (not (contains name4 name14))) +(assert (not (contains name4 r12))) +(assert (not (contains name4 name13))) +(assert (not (contains name4 r11))) +(assert (not (contains name4 name12))) +(assert (not (contains name4 r14))) +(assert (not (contains name4 name11))) +(assert (not (contains name4 r13))) +(assert (not (contains name4 name10))) +(assert (not (contains name4 r16))) +(assert (not (contains name4 r15))) +(assert (not (contains name4 r18))) +(assert (not (contains name4 r17))) +(assert (not (contains name4 r19))) +(assert (not (contains name4 name6))) +(assert (not (contains name4 name5))) +(assert (not (contains name4 name4))) +(assert (not (contains name4 name3))) +(assert (not (contains name4 name9))) +(assert (not (contains name4 name8))) +(assert (not (contains name4 name7))) +(assert (not (contains name4 name2))) +(assert (not (contains name4 name1))) +(assert (not (contains name4 r0))) +(assert (not (contains name4 name0))) +(assert (not (contains name4 r1))) +(assert (not (contains name3 r2))) +(assert (not (contains name3 r3))) +(assert (not (contains name3 r4))) +(assert (not (contains name3 r5))) +(assert (not (contains name3 r6))) +(assert (not (contains name3 r7))) +(assert (not (contains name3 r8))) +(assert (not (contains name3 r9))) +(assert (not (contains name3 name19))) +(assert (not (contains name3 name18))) +(assert (not (contains name3 name17))) +(assert (not (contains name3 name16))) +(assert (not (contains name3 r10))) +(assert (not (contains name3 name15))) +(assert (not (contains name3 name14))) +(assert (not (contains name3 r12))) +(assert (not (contains name3 name13))) +(assert (not (contains name3 r11))) +(assert (not (contains name3 name12))) +(assert (not (contains name3 r14))) +(assert (not (contains name3 name11))) +(assert (not (contains name3 r13))) +(assert (not (contains name3 name10))) +(assert (not (contains name3 r16))) +(assert (not (contains name3 r15))) +(assert (not (contains name3 r18))) +(assert (not (contains name3 r17))) +(assert (not (contains name3 r19))) +(assert (not (contains name3 name6))) +(assert (not (contains name3 name5))) +(assert (not (contains name3 name4))) +(assert (not (contains name3 name3))) +(assert (not (contains name3 name9))) +(assert (not (contains name3 name8))) +(assert (not (contains name3 name7))) +(assert (not (contains name3 name2))) +(assert (not (contains name3 name1))) +(assert (not (contains name3 r0))) +(assert (not (contains name3 name0))) +(assert (not (contains name3 r1))) +(assert (not (contains name9 r2))) +(assert (not (contains name9 r3))) +(assert (not (contains name9 r4))) +(assert (not (contains name9 r5))) +(assert (not (contains name9 r6))) +(assert (not (contains name9 r7))) +(assert (not (contains name9 r8))) +(assert (not (contains name9 r9))) +(assert (not (contains name9 name19))) +(assert (not (contains name9 name18))) +(assert (not (contains name9 name17))) +(assert (not (contains name9 name16))) +(assert (not (contains name9 r10))) +(assert (not (contains name9 name15))) +(assert (not (contains name9 name14))) +(assert (not (contains name9 r12))) +(assert (not (contains name9 name13))) +(assert (not (contains name9 r11))) +(assert (not (contains name9 name12))) +(assert (not (contains name9 r14))) +(assert (not (contains name9 name11))) +(assert (not (contains name9 r13))) +(assert (not (contains name9 name10))) +(assert (not (contains name9 r16))) +(assert (not (contains name9 r15))) +(assert (not (contains name9 r18))) +(assert (not (contains name9 r17))) +(assert (not (contains name9 r19))) +(assert (not (contains name9 name6))) +(assert (not (contains name9 name5))) +(assert (not (contains name9 name4))) +(assert (not (contains name9 name3))) +(assert (not (contains name9 name9))) +(assert (not (contains name9 name8))) +(assert (not (contains name9 name7))) +(assert (not (contains name9 name2))) +(assert (not (contains name9 name1))) +(assert (not (contains name9 r0))) +(assert (not (contains name9 name0))) +(assert (not (contains name9 r1))) +(assert (not (contains name8 r2))) +(assert (not (contains name8 r3))) +(assert (not (contains name8 r4))) +(assert (not (contains name8 r5))) +(assert (not (contains name8 r6))) +(assert (not (contains name8 r7))) +(assert (not (contains name8 r8))) +(assert (not (contains name8 r9))) +(assert (not (contains name8 name19))) +(assert (not (contains name8 name18))) +(assert (not (contains name8 name17))) +(assert (not (contains name8 name16))) +(assert (not (contains name8 r10))) +(assert (not (contains name8 name15))) +(assert (not (contains name8 name14))) +(assert (not (contains name8 r12))) +(assert (not (contains name8 name13))) +(assert (not (contains name8 r11))) +(assert (not (contains name8 name12))) +(assert (not (contains name8 r14))) +(assert (not (contains name8 name11))) +(assert (not (contains name8 r13))) +(assert (not (contains name8 name10))) +(assert (not (contains name8 r16))) +(assert (not (contains name8 r15))) +(assert (not (contains name8 r18))) +(assert (not (contains name8 r17))) +(assert (not (contains name8 r19))) +(assert (not (contains name8 name6))) +(assert (not (contains name8 name5))) +(assert (not (contains name8 name4))) +(assert (not (contains name8 name3))) +(assert (not (contains name8 name9))) +(assert (not (contains name8 name8))) +(assert (not (contains name8 name7))) +(assert (not (contains name8 name2))) +(assert (not (contains name8 name1))) +(assert (not (contains name8 r0))) +(assert (not (contains name8 name0))) +(assert (not (contains name8 r1))) +(assert (not (contains name7 r2))) +(assert (not (contains name7 r3))) +(assert (not (contains name7 r4))) +(assert (not (contains name7 r5))) +(assert (not (contains name7 r6))) +(assert (not (contains name7 r7))) +(assert (not (contains name7 r8))) +(assert (not (contains name7 r9))) +(assert (not (contains name7 name19))) +(assert (not (contains name7 name18))) +(assert (not (contains name7 name17))) +(assert (not (contains name7 name16))) +(assert (not (contains name7 r10))) +(assert (not (contains name7 name15))) +(assert (not (contains name7 name14))) +(assert (not (contains name7 r12))) +(assert (not (contains name7 name13))) +(assert (not (contains name7 r11))) +(assert (not (contains name7 name12))) +(assert (not (contains name7 r14))) +(assert (not (contains name7 name11))) +(assert (not (contains name7 r13))) +(assert (not (contains name7 name10))) +(assert (not (contains name7 r16))) +(assert (not (contains name7 r15))) +(assert (not (contains name7 r18))) +(assert (not (contains name7 r17))) +(assert (not (contains name7 r19))) +(assert (not (contains name7 name6))) +(assert (not (contains name7 name5))) +(assert (not (contains name7 name4))) +(assert (not (contains name7 name3))) +(assert (not (contains name7 name9))) +(assert (not (contains name7 name8))) +(assert (not (contains name7 name7))) +(assert (not (contains name7 name2))) +(assert (not (contains name7 name1))) +(assert (not (contains name7 r0))) +(assert (not (contains name7 name0))) +(assert (not (contains name7 r1))) +(assert (not (contains name2 r2))) +(assert (not (contains name2 r3))) +(assert (not (contains name2 r4))) +(assert (not (contains name2 r5))) +(assert (not (contains name2 r6))) +(assert (not (contains name2 r7))) +(assert (not (contains name2 r8))) +(assert (not (contains name2 r9))) +(assert (not (contains name2 name19))) +(assert (not (contains name2 name18))) +(assert (not (contains name2 name17))) +(assert (not (contains name2 name16))) +(assert (not (contains name2 r10))) +(assert (not (contains name2 name15))) +(assert (not (contains name2 name14))) +(assert (not (contains name2 r12))) +(assert (not (contains name2 name13))) +(assert (not (contains name2 r11))) +(assert (not (contains name2 name12))) +(assert (not (contains name2 r14))) +(assert (not (contains name2 name11))) +(assert (not (contains name2 r13))) +(assert (not (contains name2 name10))) +(assert (not (contains name2 r16))) +(assert (not (contains name2 r15))) +(assert (not (contains name2 r18))) +(assert (not (contains name2 r17))) +(assert (not (contains name2 r19))) +(assert (not (contains name2 name6))) +(assert (not (contains name2 name5))) +(assert (not (contains name2 name4))) +(assert (not (contains name2 name3))) +(assert (not (contains name2 name9))) +(assert (not (contains name2 name8))) +(assert (not (contains name2 name7))) +(assert (not (contains name2 name2))) +(assert (not (contains name2 name1))) +(assert (not (contains name2 r0))) +(assert (not (contains name2 name0))) +(assert (not (contains name2 r1))) +(assert (not (contains name1 r2))) +(assert (not (contains name1 r3))) +(assert (not (contains name1 r4))) +(assert (not (contains name1 r5))) +(assert (not (contains name1 r6))) +(assert (not (contains name1 r7))) +(assert (not (contains name1 r8))) +(assert (not (contains name1 r9))) +(assert (not (contains name1 name19))) +(assert (not (contains name1 name18))) +(assert (not (contains name1 name17))) +(assert (not (contains name1 name16))) +(assert (not (contains name1 r10))) +(assert (not (contains name1 name15))) +(assert (not (contains name1 name14))) +(assert (not (contains name1 r12))) +(assert (not (contains name1 name13))) +(assert (not (contains name1 r11))) +(assert (not (contains name1 name12))) +(assert (not (contains name1 r14))) +(assert (not (contains name1 name11))) +(assert (not (contains name1 r13))) +(assert (not (contains name1 name10))) +(assert (not (contains name1 r16))) +(assert (not (contains name1 r15))) +(assert (not (contains name1 r18))) +(assert (not (contains name1 r17))) +(assert (not (contains name1 r19))) +(assert (not (contains name1 name6))) +(assert (not (contains name1 name5))) +(assert (not (contains name1 name4))) +(assert (not (contains name1 name3))) +(assert (not (contains name1 name9))) +(assert (not (contains name1 name8))) +(assert (not (contains name1 name7))) +(assert (not (contains name1 name2))) +(assert (not (contains name1 name1))) +(assert (not (contains name1 r0))) +(assert (not (contains name1 name0))) +(assert (not (contains name1 r1))) +(assert (not (contains r0 name19))) +(assert (not (contains r0 name18))) +(assert (not (contains r0 name17))) +(assert (not (contains r0 name16))) +(assert (not (contains r0 name15))) +(assert (not (contains r0 name14))) +(assert (not (contains r0 name13))) +(assert (not (contains r0 name12))) +(assert (not (contains r0 name11))) +(assert (not (contains r0 name10))) +(assert (not (contains r0 name6))) +(assert (not (contains r0 name5))) +(assert (not (contains r0 name4))) +(assert (not (contains r0 name3))) +(assert (not (contains r0 name9))) +(assert (not (contains r0 name8))) +(assert (not (contains r0 name7))) +(assert (not (contains r0 name2))) +(assert (not (contains r0 name1))) +(assert (not (contains r0 name0))) +(assert (not (contains name0 r2))) +(assert (not (contains name0 r3))) +(assert (not (contains name0 r4))) +(assert (not (contains name0 r5))) +(assert (not (contains name0 r6))) +(assert (not (contains name0 r7))) +(assert (not (contains name0 r8))) +(assert (not (contains name0 r9))) +(assert (not (contains name0 name19))) +(assert (not (contains name0 name18))) +(assert (not (contains name0 name17))) +(assert (not (contains name0 name16))) +(assert (not (contains name0 r10))) +(assert (not (contains name0 name15))) +(assert (not (contains name0 name14))) +(assert (not (contains name0 r12))) +(assert (not (contains name0 name13))) +(assert (not (contains name0 r11))) +(assert (not (contains name0 name12))) +(assert (not (contains name0 r14))) +(assert (not (contains name0 name11))) +(assert (not (contains name0 r13))) +(assert (not (contains name0 name10))) +(assert (not (contains name0 r16))) +(assert (not (contains name0 r15))) +(assert (not (contains name0 r18))) +(assert (not (contains name0 r17))) +(assert (not (contains name0 r19))) +(assert (not (contains name0 name6))) +(assert (not (contains name0 name5))) +(assert (not (contains name0 name4))) +(assert (not (contains name0 name3))) +(assert (not (contains name0 name9))) +(assert (not (contains name0 name8))) +(assert (not (contains name0 name7))) +(assert (not (contains name0 name2))) +(assert (not (contains name0 name1))) +(assert (not (contains name0 r0))) +(assert (not (contains name0 name0))) +(assert (not (contains name0 r1))) +(assert (not (contains r1 name19))) +(assert (not (contains r1 name18))) +(assert (not (contains r1 name17))) +(assert (not (contains r1 name16))) +(assert (not (contains r1 name15))) +(assert (not (contains r1 name14))) +(assert (not (contains r1 name13))) +(assert (not (contains r1 name12))) +(assert (not (contains r1 name11))) +(assert (not (contains r1 name10))) +(assert (not (contains r1 name6))) +(assert (not (contains r1 name5))) +(assert (not (contains r1 name4))) +(assert (not (contains r1 name3))) +(assert (not (contains r1 name9))) +(assert (not (contains r1 name8))) +(assert (not (contains r1 name7))) +(assert (not (contains r1 name2))) +(assert (not (contains r1 name1))) +(assert (not (contains r1 name0))) +(assert (not (eq r2 name19))) +(assert (not (eq r2 name18))) +(assert (not (eq r2 name17))) +(assert (not (eq r2 name16))) +(assert (not (eq r2 name15))) +(assert (not (eq r2 name14))) +(assert (not (eq r2 name13))) +(assert (not (eq r2 name12))) +(assert (not (eq r2 name11))) +(assert (not (eq r2 name10))) +(assert (not (eq r2 name6))) +(assert (not (eq r2 name5))) +(assert (not (eq r2 name4))) +(assert (not (eq r2 name3))) +(assert (not (eq r2 name9))) +(assert (not (eq r2 name8))) +(assert (not (eq r2 name7))) +(assert (not (eq r2 name2))) +(assert (not (eq r2 name1))) +(assert (not (eq r2 name0))) +(assert (not (eq r3 name19))) +(assert (not (eq r3 name18))) +(assert (not (eq r3 name17))) +(assert (not (eq r3 name16))) +(assert (not (eq r3 name15))) +(assert (not (eq r3 name14))) +(assert (not (eq r3 name13))) +(assert (not (eq r3 name12))) +(assert (not (eq r3 name11))) +(assert (not (eq r3 name10))) +(assert (not (eq r3 name6))) +(assert (not (eq r3 name5))) +(assert (not (eq r3 name4))) +(assert (not (eq r3 name3))) +(assert (not (eq r3 name9))) +(assert (not (eq r3 name8))) +(assert (not (eq r3 name7))) +(assert (not (eq r3 name2))) +(assert (not (eq r3 name1))) +(assert (not (eq r3 name0))) +(assert (not (eq r4 name19))) +(assert (not (eq r4 name18))) +(assert (not (eq r4 name17))) +(assert (not (eq r4 name16))) +(assert (not (eq r4 name15))) +(assert (not (eq r4 name14))) +(assert (not (eq r4 name13))) +(assert (not (eq r4 name12))) +(assert (not (eq r4 name11))) +(assert (not (eq r4 name10))) +(assert (not (eq r4 name6))) +(assert (not (eq r4 name5))) +(assert (not (eq r4 name4))) +(assert (not (eq r4 name3))) +(assert (not (eq r4 name9))) +(assert (not (eq r4 name8))) +(assert (not (eq r4 name7))) +(assert (not (eq r4 name2))) +(assert (not (eq r4 name1))) +(assert (not (eq r4 name0))) +(assert (not (eq r5 name19))) +(assert (not (eq r5 name18))) +(assert (not (eq r5 name17))) +(assert (not (eq r5 name16))) +(assert (not (eq r5 name15))) +(assert (not (eq r5 name14))) +(assert (not (eq r5 name13))) +(assert (not (eq r5 name12))) +(assert (not (eq r5 name11))) +(assert (not (eq r5 name10))) +(assert (not (eq r5 name6))) +(assert (not (eq r5 name5))) +(assert (not (eq r5 name4))) +(assert (not (eq r5 name3))) +(assert (not (eq r5 name9))) +(assert (not (eq r5 name8))) +(assert (not (eq r5 name7))) +(assert (not (eq r5 name2))) +(assert (not (eq r5 name1))) +(assert (not (eq r5 name0))) +(assert (not (eq r6 name19))) +(assert (not (eq r6 name18))) +(assert (not (eq r6 name17))) +(assert (not (eq r6 name16))) +(assert (not (eq r6 name15))) +(assert (not (eq r6 name14))) +(assert (not (eq r6 name13))) +(assert (not (eq r6 name12))) +(assert (not (eq r6 name11))) +(assert (not (eq r6 name10))) +(assert (not (eq r6 name6))) +(assert (not (eq r6 name5))) +(assert (not (eq r6 name4))) +(assert (not (eq r6 name3))) +(assert (not (eq r6 name9))) +(assert (not (eq r6 name8))) +(assert (not (eq r6 name7))) +(assert (not (eq r6 name2))) +(assert (not (eq r6 name1))) +(assert (not (eq r6 name0))) +(assert (not (eq r7 name19))) +(assert (not (eq r7 name18))) +(assert (not (eq r7 name17))) +(assert (not (eq r7 name16))) +(assert (not (eq r7 name15))) +(assert (not (eq r7 name14))) +(assert (not (eq r7 name13))) +(assert (not (eq r7 name12))) +(assert (not (eq r7 name11))) +(assert (not (eq r7 name10))) +(assert (not (eq r7 name6))) +(assert (not (eq r7 name5))) +(assert (not (eq r7 name4))) +(assert (not (eq r7 name3))) +(assert (not (eq r7 name9))) +(assert (not (eq r7 name8))) +(assert (not (eq r7 name7))) +(assert (not (eq r7 name2))) +(assert (not (eq r7 name1))) +(assert (not (eq r7 name0))) +(assert (not (eq r8 name19))) +(assert (not (eq r8 name18))) +(assert (not (eq r8 name17))) +(assert (not (eq r8 name16))) +(assert (not (eq r8 name15))) +(assert (not (eq r8 name14))) +(assert (not (eq r8 name13))) +(assert (not (eq r8 name12))) +(assert (not (eq r8 name11))) +(assert (not (eq r8 name10))) +(assert (not (eq r8 name6))) +(assert (not (eq r8 name5))) +(assert (not (eq r8 name4))) +(assert (not (eq r8 name3))) +(assert (not (eq r8 name9))) +(assert (not (eq r8 name8))) +(assert (not (eq r8 name7))) +(assert (not (eq r8 name2))) +(assert (not (eq r8 name1))) +(assert (not (eq r8 name0))) +(assert (not (eq r9 name19))) +(assert (not (eq r9 name18))) +(assert (not (eq r9 name17))) +(assert (not (eq r9 name16))) +(assert (not (eq r9 name15))) +(assert (not (eq r9 name14))) +(assert (not (eq r9 name13))) +(assert (not (eq r9 name12))) +(assert (not (eq r9 name11))) +(assert (not (eq r9 name10))) +(assert (not (eq r9 name6))) +(assert (not (eq r9 name5))) +(assert (not (eq r9 name4))) +(assert (not (eq r9 name3))) +(assert (not (eq r9 name9))) +(assert (not (eq r9 name8))) +(assert (not (eq r9 name7))) +(assert (not (eq r9 name2))) +(assert (not (eq r9 name1))) +(assert (not (eq r9 name0))) +(assert (not (eq name19 r2))) +(assert (not (eq name19 r3))) +(assert (not (eq name19 r4))) +(assert (not (eq name19 r5))) +(assert (not (eq name19 r6))) +(assert (not (eq name19 r7))) +(assert (not (eq name19 r8))) +(assert (not (eq name19 r9))) +(assert (not (eq name19 name19))) +(assert (not (eq name19 name18))) +(assert (not (eq name19 name17))) +(assert (not (eq name19 name16))) +(assert (not (eq name19 r10))) +(assert (not (eq name19 name15))) +(assert (not (eq name19 name14))) +(assert (not (eq name19 r12))) +(assert (not (eq name19 name13))) +(assert (not (eq name19 r11))) +(assert (not (eq name19 name12))) +(assert (not (eq name19 r14))) +(assert (not (eq name19 name11))) +(assert (not (eq name19 r13))) +(assert (not (eq name19 name10))) +(assert (not (eq name19 r16))) +(assert (not (eq name19 r15))) +(assert (not (eq name19 r18))) +(assert (not (eq name19 r17))) +(assert (not (eq name19 r19))) +(assert (not (eq name19 name6))) +(assert (not (eq name19 name5))) +(assert (not (eq name19 name4))) +(assert (not (eq name19 name3))) +(assert (not (eq name19 name9))) +(assert (not (eq name19 name8))) +(assert (not (eq name19 name7))) +(assert (not (eq name19 name2))) +(assert (not (eq name19 name1))) +(assert (not (eq name19 r0))) +(assert (not (eq name19 name0))) +(assert (not (eq name19 r1))) +(assert (not (eq name18 r2))) +(assert (not (eq name18 r3))) +(assert (not (eq name18 r4))) +(assert (not (eq name18 r5))) +(assert (not (eq name18 r6))) +(assert (not (eq name18 r7))) +(assert (not (eq name18 r8))) +(assert (not (eq name18 r9))) +(assert (not (eq name18 name19))) +(assert (not (eq name18 name18))) +(assert (not (eq name18 name17))) +(assert (not (eq name18 name16))) +(assert (not (eq name18 r10))) +(assert (not (eq name18 name15))) +(assert (not (eq name18 name14))) +(assert (not (eq name18 r12))) +(assert (not (eq name18 name13))) +(assert (not (eq name18 r11))) +(assert (not (eq name18 name12))) +(assert (not (eq name18 r14))) +(assert (not (eq name18 name11))) +(assert (not (eq name18 r13))) +(assert (not (eq name18 name10))) +(assert (not (eq name18 r16))) +(assert (not (eq name18 r15))) +(assert (not (eq name18 r18))) +(assert (not (eq name18 r17))) +(assert (not (eq name18 r19))) +(assert (not (eq name18 name6))) +(assert (not (eq name18 name5))) +(assert (not (eq name18 name4))) +(assert (not (eq name18 name3))) +(assert (not (eq name18 name9))) +(assert (not (eq name18 name8))) +(assert (not (eq name18 name7))) +(assert (not (eq name18 name2))) +(assert (not (eq name18 name1))) +(assert (not (eq name18 r0))) +(assert (not (eq name18 name0))) +(assert (not (eq name18 r1))) +(assert (not (eq name17 r2))) +(assert (not (eq name17 r3))) +(assert (not (eq name17 r4))) +(assert (not (eq name17 r5))) +(assert (not (eq name17 r6))) +(assert (not (eq name17 r7))) +(assert (not (eq name17 r8))) +(assert (not (eq name17 r9))) +(assert (not (eq name17 name19))) +(assert (not (eq name17 name18))) +(assert (not (eq name17 name17))) +(assert (not (eq name17 name16))) +(assert (not (eq name17 r10))) +(assert (not (eq name17 name15))) +(assert (not (eq name17 name14))) +(assert (not (eq name17 r12))) +(assert (not (eq name17 name13))) +(assert (not (eq name17 r11))) +(assert (not (eq name17 name12))) +(assert (not (eq name17 r14))) +(assert (not (eq name17 name11))) +(assert (not (eq name17 r13))) +(assert (not (eq name17 name10))) +(assert (not (eq name17 r16))) +(assert (not (eq name17 r15))) +(assert (not (eq name17 r18))) +(assert (not (eq name17 r17))) +(assert (not (eq name17 r19))) +(assert (not (eq name17 name6))) +(assert (not (eq name17 name5))) +(assert (not (eq name17 name4))) +(assert (not (eq name17 name3))) +(assert (not (eq name17 name9))) +(assert (not (eq name17 name8))) +(assert (not (eq name17 name7))) +(assert (not (eq name17 name2))) +(assert (not (eq name17 name1))) +(assert (not (eq name17 r0))) +(assert (not (eq name17 name0))) +(assert (not (eq name17 r1))) +(assert (not (eq name16 r2))) +(assert (not (eq name16 r3))) +(assert (not (eq name16 r4))) +(assert (not (eq name16 r5))) +(assert (not (eq name16 r6))) +(assert (not (eq name16 r7))) +(assert (not (eq name16 r8))) +(assert (not (eq name16 r9))) +(assert (not (eq name16 name19))) +(assert (not (eq name16 name18))) +(assert (not (eq name16 name17))) +(assert (not (eq name16 name16))) +(assert (not (eq name16 r10))) +(assert (not (eq name16 name15))) +(assert (not (eq name16 name14))) +(assert (not (eq name16 r12))) +(assert (not (eq name16 name13))) +(assert (not (eq name16 r11))) +(assert (not (eq name16 name12))) +(assert (not (eq name16 r14))) +(assert (not (eq name16 name11))) +(assert (not (eq name16 r13))) +(assert (not (eq name16 name10))) +(assert (not (eq name16 r16))) +(assert (not (eq name16 r15))) +(assert (not (eq name16 r18))) +(assert (not (eq name16 r17))) +(assert (not (eq name16 r19))) +(assert (not (eq name16 name6))) +(assert (not (eq name16 name5))) +(assert (not (eq name16 name4))) +(assert (not (eq name16 name3))) +(assert (not (eq name16 name9))) +(assert (not (eq name16 name8))) +(assert (not (eq name16 name7))) +(assert (not (eq name16 name2))) +(assert (not (eq name16 name1))) +(assert (not (eq name16 r0))) +(assert (not (eq name16 name0))) +(assert (not (eq name16 r1))) +(assert (not (eq r10 name19))) +(assert (not (eq r10 name18))) +(assert (not (eq r10 name17))) +(assert (not (eq r10 name16))) +(assert (not (eq r10 name15))) +(assert (not (eq r10 name14))) +(assert (not (eq r10 name13))) +(assert (not (eq r10 name12))) +(assert (not (eq r10 name11))) +(assert (not (eq r10 name10))) +(assert (not (eq r10 name6))) +(assert (not (eq r10 name5))) +(assert (not (eq r10 name4))) +(assert (not (eq r10 name3))) +(assert (not (eq r10 name9))) +(assert (not (eq r10 name8))) +(assert (not (eq r10 name7))) +(assert (not (eq r10 name2))) +(assert (not (eq r10 name1))) +(assert (not (eq r10 name0))) +(assert (not (eq name15 r2))) +(assert (not (eq name15 r3))) +(assert (not (eq name15 r4))) +(assert (not (eq name15 r5))) +(assert (not (eq name15 r6))) +(assert (not (eq name15 r7))) +(assert (not (eq name15 r8))) +(assert (not (eq name15 r9))) +(assert (not (eq name15 name19))) +(assert (not (eq name15 name18))) +(assert (not (eq name15 name17))) +(assert (not (eq name15 name16))) +(assert (not (eq name15 r10))) +(assert (not (eq name15 name15))) +(assert (not (eq name15 name14))) +(assert (not (eq name15 r12))) +(assert (not (eq name15 name13))) +(assert (not (eq name15 r11))) +(assert (not (eq name15 name12))) +(assert (not (eq name15 r14))) +(assert (not (eq name15 name11))) +(assert (not (eq name15 r13))) +(assert (not (eq name15 name10))) +(assert (not (eq name15 r16))) +(assert (not (eq name15 r15))) +(assert (not (eq name15 r18))) +(assert (not (eq name15 r17))) +(assert (not (eq name15 r19))) +(assert (not (eq name15 name6))) +(assert (not (eq name15 name5))) +(assert (not (eq name15 name4))) +(assert (not (eq name15 name3))) +(assert (not (eq name15 name9))) +(assert (not (eq name15 name8))) +(assert (not (eq name15 name7))) +(assert (not (eq name15 name2))) +(assert (not (eq name15 name1))) +(assert (not (eq name15 r0))) +(assert (not (eq name15 name0))) +(assert (not (eq name15 r1))) +(assert (not (eq name14 r2))) +(assert (not (eq name14 r3))) +(assert (not (eq name14 r4))) +(assert (not (eq name14 r5))) +(assert (not (eq name14 r6))) +(assert (not (eq name14 r7))) +(assert (not (eq name14 r8))) +(assert (not (eq name14 r9))) +(assert (not (eq name14 name19))) +(assert (not (eq name14 name18))) +(assert (not (eq name14 name17))) +(assert (not (eq name14 name16))) +(assert (not (eq name14 r10))) +(assert (not (eq name14 name15))) +(assert (not (eq name14 name14))) +(assert (not (eq name14 r12))) +(assert (not (eq name14 name13))) +(assert (not (eq name14 r11))) +(assert (not (eq name14 name12))) +(assert (not (eq name14 r14))) +(assert (not (eq name14 name11))) +(assert (not (eq name14 r13))) +(assert (not (eq name14 name10))) +(assert (not (eq name14 r16))) +(assert (not (eq name14 r15))) +(assert (not (eq name14 r18))) +(assert (not (eq name14 r17))) +(assert (not (eq name14 r19))) +(assert (not (eq name14 name6))) +(assert (not (eq name14 name5))) +(assert (not (eq name14 name4))) +(assert (not (eq name14 name3))) +(assert (not (eq name14 name9))) +(assert (not (eq name14 name8))) +(assert (not (eq name14 name7))) +(assert (not (eq name14 name2))) +(assert (not (eq name14 name1))) +(assert (not (eq name14 r0))) +(assert (not (eq name14 name0))) +(assert (not (eq name14 r1))) +(assert (not (eq r12 name19))) +(assert (not (eq r12 name18))) +(assert (not (eq r12 name17))) +(assert (not (eq r12 name16))) +(assert (not (eq r12 name15))) +(assert (not (eq r12 name14))) +(assert (not (eq r12 name13))) +(assert (not (eq r12 name12))) +(assert (not (eq r12 name11))) +(assert (not (eq r12 name10))) +(assert (not (eq r12 name6))) +(assert (not (eq r12 name5))) +(assert (not (eq r12 name4))) +(assert (not (eq r12 name3))) +(assert (not (eq r12 name9))) +(assert (not (eq r12 name8))) +(assert (not (eq r12 name7))) +(assert (not (eq r12 name2))) +(assert (not (eq r12 name1))) +(assert (not (eq r12 name0))) +(assert (not (eq name13 r2))) +(assert (not (eq name13 r3))) +(assert (not (eq name13 r4))) +(assert (not (eq name13 r5))) +(assert (not (eq name13 r6))) +(assert (not (eq name13 r7))) +(assert (not (eq name13 r8))) +(assert (not (eq name13 r9))) +(assert (not (eq name13 name19))) +(assert (not (eq name13 name18))) +(assert (not (eq name13 name17))) +(assert (not (eq name13 name16))) +(assert (not (eq name13 r10))) +(assert (not (eq name13 name15))) +(assert (not (eq name13 name14))) +(assert (not (eq name13 r12))) +(assert (not (eq name13 name13))) +(assert (not (eq name13 r11))) +(assert (not (eq name13 name12))) +(assert (not (eq name13 r14))) +(assert (not (eq name13 name11))) +(assert (not (eq name13 r13))) +(assert (not (eq name13 name10))) +(assert (not (eq name13 r16))) +(assert (not (eq name13 r15))) +(assert (not (eq name13 r18))) +(assert (not (eq name13 r17))) +(assert (not (eq name13 r19))) +(assert (not (eq name13 name6))) +(assert (not (eq name13 name5))) +(assert (not (eq name13 name4))) +(assert (not (eq name13 name3))) +(assert (not (eq name13 name9))) +(assert (not (eq name13 name8))) +(assert (not (eq name13 name7))) +(assert (not (eq name13 name2))) +(assert (not (eq name13 name1))) +(assert (not (eq name13 r0))) +(assert (not (eq name13 name0))) +(assert (not (eq name13 r1))) +(assert (not (eq r11 name19))) +(assert (not (eq r11 name18))) +(assert (not (eq r11 name17))) +(assert (not (eq r11 name16))) +(assert (not (eq r11 name15))) +(assert (not (eq r11 name14))) +(assert (not (eq r11 name13))) +(assert (not (eq r11 name12))) +(assert (not (eq r11 name11))) +(assert (not (eq r11 name10))) +(assert (not (eq r11 name6))) +(assert (not (eq r11 name5))) +(assert (not (eq r11 name4))) +(assert (not (eq r11 name3))) +(assert (not (eq r11 name9))) +(assert (not (eq r11 name8))) +(assert (not (eq r11 name7))) +(assert (not (eq r11 name2))) +(assert (not (eq r11 name1))) +(assert (not (eq r11 name0))) +(assert (not (eq name12 r2))) +(assert (not (eq name12 r3))) +(assert (not (eq name12 r4))) +(assert (not (eq name12 r5))) +(assert (not (eq name12 r6))) +(assert (not (eq name12 r7))) +(assert (not (eq name12 r8))) +(assert (not (eq name12 r9))) +(assert (not (eq name12 name19))) +(assert (not (eq name12 name18))) +(assert (not (eq name12 name17))) +(assert (not (eq name12 name16))) +(assert (not (eq name12 r10))) +(assert (not (eq name12 name15))) +(assert (not (eq name12 name14))) +(assert (not (eq name12 r12))) +(assert (not (eq name12 name13))) +(assert (not (eq name12 r11))) +(assert (not (eq name12 name12))) +(assert (not (eq name12 r14))) +(assert (not (eq name12 name11))) +(assert (not (eq name12 r13))) +(assert (not (eq name12 name10))) +(assert (not (eq name12 r16))) +(assert (not (eq name12 r15))) +(assert (not (eq name12 r18))) +(assert (not (eq name12 r17))) +(assert (not (eq name12 r19))) +(assert (not (eq name12 name6))) +(assert (not (eq name12 name5))) +(assert (not (eq name12 name4))) +(assert (not (eq name12 name3))) +(assert (not (eq name12 name9))) +(assert (not (eq name12 name8))) +(assert (not (eq name12 name7))) +(assert (not (eq name12 name2))) +(assert (not (eq name12 name1))) +(assert (not (eq name12 r0))) +(assert (not (eq name12 name0))) +(assert (not (eq name12 r1))) +(assert (not (eq r14 name19))) +(assert (not (eq r14 name18))) +(assert (not (eq r14 name17))) +(assert (not (eq r14 name16))) +(assert (not (eq r14 name15))) +(assert (not (eq r14 name14))) +(assert (not (eq r14 name13))) +(assert (not (eq r14 name12))) +(assert (not (eq r14 name11))) +(assert (not (eq r14 name10))) +(assert (not (eq r14 name6))) +(assert (not (eq r14 name5))) +(assert (not (eq r14 name4))) +(assert (not (eq r14 name3))) +(assert (not (eq r14 name9))) +(assert (not (eq r14 name8))) +(assert (not (eq r14 name7))) +(assert (not (eq r14 name2))) +(assert (not (eq r14 name1))) +(assert (not (eq r14 name0))) +(assert (not (eq name11 r2))) +(assert (not (eq name11 r3))) +(assert (not (eq name11 r4))) +(assert (not (eq name11 r5))) +(assert (not (eq name11 r6))) +(assert (not (eq name11 r7))) +(assert (not (eq name11 r8))) +(assert (not (eq name11 r9))) +(assert (not (eq name11 name19))) +(assert (not (eq name11 name18))) +(assert (not (eq name11 name17))) +(assert (not (eq name11 name16))) +(assert (not (eq name11 r10))) +(assert (not (eq name11 name15))) +(assert (not (eq name11 name14))) +(assert (not (eq name11 r12))) +(assert (not (eq name11 name13))) +(assert (not (eq name11 r11))) +(assert (not (eq name11 name12))) +(assert (not (eq name11 r14))) +(assert (not (eq name11 name11))) +(assert (not (eq name11 r13))) +(assert (not (eq name11 name10))) +(assert (not (eq name11 r16))) +(assert (not (eq name11 r15))) +(assert (not (eq name11 r18))) +(assert (not (eq name11 r17))) +(assert (not (eq name11 r19))) +(assert (not (eq name11 name6))) +(assert (not (eq name11 name5))) +(assert (not (eq name11 name4))) +(assert (not (eq name11 name3))) +(assert (not (eq name11 name9))) +(assert (not (eq name11 name8))) +(assert (not (eq name11 name7))) +(assert (not (eq name11 name2))) +(assert (not (eq name11 name1))) +(assert (not (eq name11 r0))) +(assert (not (eq name11 name0))) +(assert (not (eq name11 r1))) +(assert (not (eq r13 name19))) +(assert (not (eq r13 name18))) +(assert (not (eq r13 name17))) +(assert (not (eq r13 name16))) +(assert (not (eq r13 name15))) +(assert (not (eq r13 name14))) +(assert (not (eq r13 name13))) +(assert (not (eq r13 name12))) +(assert (not (eq r13 name11))) +(assert (not (eq r13 name10))) +(assert (not (eq r13 name6))) +(assert (not (eq r13 name5))) +(assert (not (eq r13 name4))) +(assert (not (eq r13 name3))) +(assert (not (eq r13 name9))) +(assert (not (eq r13 name8))) +(assert (not (eq r13 name7))) +(assert (not (eq r13 name2))) +(assert (not (eq r13 name1))) +(assert (not (eq r13 name0))) +(assert (not (eq name10 r2))) +(assert (not (eq name10 r3))) +(assert (not (eq name10 r4))) +(assert (not (eq name10 r5))) +(assert (not (eq name10 r6))) +(assert (not (eq name10 r7))) +(assert (not (eq name10 r8))) +(assert (not (eq name10 r9))) +(assert (not (eq name10 name19))) +(assert (not (eq name10 name18))) +(assert (not (eq name10 name17))) +(assert (not (eq name10 name16))) +(assert (not (eq name10 r10))) +(assert (not (eq name10 name15))) +(assert (not (eq name10 name14))) +(assert (not (eq name10 r12))) +(assert (not (eq name10 name13))) +(assert (not (eq name10 r11))) +(assert (not (eq name10 name12))) +(assert (not (eq name10 r14))) +(assert (not (eq name10 name11))) +(assert (not (eq name10 r13))) +(assert (not (eq name10 name10))) +(assert (not (eq name10 r16))) +(assert (not (eq name10 r15))) +(assert (not (eq name10 r18))) +(assert (not (eq name10 r17))) +(assert (not (eq name10 r19))) +(assert (not (eq name10 name6))) +(assert (not (eq name10 name5))) +(assert (not (eq name10 name4))) +(assert (not (eq name10 name3))) +(assert (not (eq name10 name9))) +(assert (not (eq name10 name8))) +(assert (not (eq name10 name7))) +(assert (not (eq name10 name2))) +(assert (not (eq name10 name1))) +(assert (not (eq name10 r0))) +(assert (not (eq name10 name0))) +(assert (not (eq name10 r1))) +(assert (not (eq r16 name19))) +(assert (not (eq r16 name18))) +(assert (not (eq r16 name17))) +(assert (not (eq r16 name16))) +(assert (not (eq r16 name15))) +(assert (not (eq r16 name14))) +(assert (not (eq r16 name13))) +(assert (not (eq r16 name12))) +(assert (not (eq r16 name11))) +(assert (not (eq r16 name10))) +(assert (not (eq r16 name6))) +(assert (not (eq r16 name5))) +(assert (not (eq r16 name4))) +(assert (not (eq r16 name3))) +(assert (not (eq r16 name9))) +(assert (not (eq r16 name8))) +(assert (not (eq r16 name7))) +(assert (not (eq r16 name2))) +(assert (not (eq r16 name1))) +(assert (not (eq r16 name0))) +(assert (not (eq r15 name19))) +(assert (not (eq r15 name18))) +(assert (not (eq r15 name17))) +(assert (not (eq r15 name16))) +(assert (not (eq r15 name15))) +(assert (not (eq r15 name14))) +(assert (not (eq r15 name13))) +(assert (not (eq r15 name12))) +(assert (not (eq r15 name11))) +(assert (not (eq r15 name10))) +(assert (not (eq r15 name6))) +(assert (not (eq r15 name5))) +(assert (not (eq r15 name4))) +(assert (not (eq r15 name3))) +(assert (not (eq r15 name9))) +(assert (not (eq r15 name8))) +(assert (not (eq r15 name7))) +(assert (not (eq r15 name2))) +(assert (not (eq r15 name1))) +(assert (not (eq r15 name0))) +(assert (not (eq r18 name19))) +(assert (not (eq r18 name18))) +(assert (not (eq r18 name17))) +(assert (not (eq r18 name16))) +(assert (not (eq r18 name15))) +(assert (not (eq r18 name14))) +(assert (not (eq r18 name13))) +(assert (not (eq r18 name12))) +(assert (not (eq r18 name11))) +(assert (not (eq r18 name10))) +(assert (not (eq r18 name6))) +(assert (not (eq r18 name5))) +(assert (not (eq r18 name4))) +(assert (not (eq r18 name3))) +(assert (not (eq r18 name9))) +(assert (not (eq r18 name8))) +(assert (not (eq r18 name7))) +(assert (not (eq r18 name2))) +(assert (not (eq r18 name1))) +(assert (not (eq r18 name0))) +(assert (not (eq r17 name19))) +(assert (not (eq r17 name18))) +(assert (not (eq r17 name17))) +(assert (not (eq r17 name16))) +(assert (not (eq r17 name15))) +(assert (not (eq r17 name14))) +(assert (not (eq r17 name13))) +(assert (not (eq r17 name12))) +(assert (not (eq r17 name11))) +(assert (not (eq r17 name10))) +(assert (not (eq r17 name6))) +(assert (not (eq r17 name5))) +(assert (not (eq r17 name4))) +(assert (not (eq r17 name3))) +(assert (not (eq r17 name9))) +(assert (not (eq r17 name8))) +(assert (not (eq r17 name7))) +(assert (not (eq r17 name2))) +(assert (not (eq r17 name1))) +(assert (not (eq r17 name0))) +(assert (not (eq r19 name19))) +(assert (not (eq r19 name18))) +(assert (not (eq r19 name17))) +(assert (not (eq r19 name16))) +(assert (not (eq r19 name15))) +(assert (not (eq r19 name14))) +(assert (not (eq r19 name13))) +(assert (not (eq r19 name12))) +(assert (not (eq r19 name11))) +(assert (not (eq r19 name10))) +(assert (not (eq r19 name6))) +(assert (not (eq r19 name5))) +(assert (not (eq r19 name4))) +(assert (not (eq r19 name3))) +(assert (not (eq r19 name9))) +(assert (not (eq r19 name8))) +(assert (not (eq r19 name7))) +(assert (not (eq r19 name2))) +(assert (not (eq r19 name1))) +(assert (not (eq r19 name0))) +(assert (not (eq name6 r2))) +(assert (not (eq name6 r3))) +(assert (not (eq name6 r4))) +(assert (not (eq name6 r5))) +(assert (not (eq name6 r6))) +(assert (not (eq name6 r7))) +(assert (not (eq name6 r8))) +(assert (not (eq name6 r9))) +(assert (not (eq name6 name19))) +(assert (not (eq name6 name18))) +(assert (not (eq name6 name17))) +(assert (not (eq name6 name16))) +(assert (not (eq name6 r10))) +(assert (not (eq name6 name15))) +(assert (not (eq name6 name14))) +(assert (not (eq name6 r12))) +(assert (not (eq name6 name13))) +(assert (not (eq name6 r11))) +(assert (not (eq name6 name12))) +(assert (not (eq name6 r14))) +(assert (not (eq name6 name11))) +(assert (not (eq name6 r13))) +(assert (not (eq name6 name10))) +(assert (not (eq name6 r16))) +(assert (not (eq name6 r15))) +(assert (not (eq name6 r18))) +(assert (not (eq name6 r17))) +(assert (not (eq name6 r19))) +(assert (not (eq name6 name6))) +(assert (not (eq name6 name5))) +(assert (not (eq name6 name4))) +(assert (not (eq name6 name3))) +(assert (not (eq name6 name9))) +(assert (not (eq name6 name8))) +(assert (not (eq name6 name7))) +(assert (not (eq name6 name2))) +(assert (not (eq name6 name1))) +(assert (not (eq name6 r0))) +(assert (not (eq name6 name0))) +(assert (not (eq name6 r1))) +(assert (not (eq name5 r2))) +(assert (not (eq name5 r3))) +(assert (not (eq name5 r4))) +(assert (not (eq name5 r5))) +(assert (not (eq name5 r6))) +(assert (not (eq name5 r7))) +(assert (not (eq name5 r8))) +(assert (not (eq name5 r9))) +(assert (not (eq name5 name19))) +(assert (not (eq name5 name18))) +(assert (not (eq name5 name17))) +(assert (not (eq name5 name16))) +(assert (not (eq name5 r10))) +(assert (not (eq name5 name15))) +(assert (not (eq name5 name14))) +(assert (not (eq name5 r12))) +(assert (not (eq name5 name13))) +(assert (not (eq name5 r11))) +(assert (not (eq name5 name12))) +(assert (not (eq name5 r14))) +(assert (not (eq name5 name11))) +(assert (not (eq name5 r13))) +(assert (not (eq name5 name10))) +(assert (not (eq name5 r16))) +(assert (not (eq name5 r15))) +(assert (not (eq name5 r18))) +(assert (not (eq name5 r17))) +(assert (not (eq name5 r19))) +(assert (not (eq name5 name6))) +(assert (not (eq name5 name5))) +(assert (not (eq name5 name4))) +(assert (not (eq name5 name3))) +(assert (not (eq name5 name9))) +(assert (not (eq name5 name8))) +(assert (not (eq name5 name7))) +(assert (not (eq name5 name2))) +(assert (not (eq name5 name1))) +(assert (not (eq name5 r0))) +(assert (not (eq name5 name0))) +(assert (not (eq name5 r1))) +(assert (not (eq name4 r2))) +(assert (not (eq name4 r3))) +(assert (not (eq name4 r4))) +(assert (not (eq name4 r5))) +(assert (not (eq name4 r6))) +(assert (not (eq name4 r7))) +(assert (not (eq name4 r8))) +(assert (not (eq name4 r9))) +(assert (not (eq name4 name19))) +(assert (not (eq name4 name18))) +(assert (not (eq name4 name17))) +(assert (not (eq name4 name16))) +(assert (not (eq name4 r10))) +(assert (not (eq name4 name15))) +(assert (not (eq name4 name14))) +(assert (not (eq name4 r12))) +(assert (not (eq name4 name13))) +(assert (not (eq name4 r11))) +(assert (not (eq name4 name12))) +(assert (not (eq name4 r14))) +(assert (not (eq name4 name11))) +(assert (not (eq name4 r13))) +(assert (not (eq name4 name10))) +(assert (not (eq name4 r16))) +(assert (not (eq name4 r15))) +(assert (not (eq name4 r18))) +(assert (not (eq name4 r17))) +(assert (not (eq name4 r19))) +(assert (not (eq name4 name6))) +(assert (not (eq name4 name5))) +(assert (not (eq name4 name4))) +(assert (not (eq name4 name3))) +(assert (not (eq name4 name9))) +(assert (not (eq name4 name8))) +(assert (not (eq name4 name7))) +(assert (not (eq name4 name2))) +(assert (not (eq name4 name1))) +(assert (not (eq name4 r0))) +(assert (not (eq name4 name0))) +(assert (not (eq name4 r1))) +(assert (not (eq name3 r2))) +(assert (not (eq name3 r3))) +(assert (not (eq name3 r4))) +(assert (not (eq name3 r5))) +(assert (not (eq name3 r6))) +(assert (not (eq name3 r7))) +(assert (not (eq name3 r8))) +(assert (not (eq name3 r9))) +(assert (not (eq name3 name19))) +(assert (not (eq name3 name18))) +(assert (not (eq name3 name17))) +(assert (not (eq name3 name16))) +(assert (not (eq name3 r10))) +(assert (not (eq name3 name15))) +(assert (not (eq name3 name14))) +(assert (not (eq name3 r12))) +(assert (not (eq name3 name13))) +(assert (not (eq name3 r11))) +(assert (not (eq name3 name12))) +(assert (not (eq name3 r14))) +(assert (not (eq name3 name11))) +(assert (not (eq name3 r13))) +(assert (not (eq name3 name10))) +(assert (not (eq name3 r16))) +(assert (not (eq name3 r15))) +(assert (not (eq name3 r18))) +(assert (not (eq name3 r17))) +(assert (not (eq name3 r19))) +(assert (not (eq name3 name6))) +(assert (not (eq name3 name5))) +(assert (not (eq name3 name4))) +(assert (not (eq name3 name3))) +(assert (not (eq name3 name9))) +(assert (not (eq name3 name8))) +(assert (not (eq name3 name7))) +(assert (not (eq name3 name2))) +(assert (not (eq name3 name1))) +(assert (not (eq name3 r0))) +(assert (not (eq name3 name0))) +(assert (not (eq name3 r1))) +(assert (not (eq name9 r2))) +(assert (not (eq name9 r3))) +(assert (not (eq name9 r4))) +(assert (not (eq name9 r5))) +(assert (not (eq name9 r6))) +(assert (not (eq name9 r7))) +(assert (not (eq name9 r8))) +(assert (not (eq name9 r9))) +(assert (not (eq name9 name19))) +(assert (not (eq name9 name18))) +(assert (not (eq name9 name17))) +(assert (not (eq name9 name16))) +(assert (not (eq name9 r10))) +(assert (not (eq name9 name15))) +(assert (not (eq name9 name14))) +(assert (not (eq name9 r12))) +(assert (not (eq name9 name13))) +(assert (not (eq name9 r11))) +(assert (not (eq name9 name12))) +(assert (not (eq name9 r14))) +(assert (not (eq name9 name11))) +(assert (not (eq name9 r13))) +(assert (not (eq name9 name10))) +(assert (not (eq name9 r16))) +(assert (not (eq name9 r15))) +(assert (not (eq name9 r18))) +(assert (not (eq name9 r17))) +(assert (not (eq name9 r19))) +(assert (not (eq name9 name6))) +(assert (not (eq name9 name5))) +(assert (not (eq name9 name4))) +(assert (not (eq name9 name3))) +(assert (not (eq name9 name9))) +(assert (not (eq name9 name8))) +(assert (not (eq name9 name7))) +(assert (not (eq name9 name2))) +(assert (not (eq name9 name1))) +(assert (not (eq name9 r0))) +(assert (not (eq name9 name0))) +(assert (not (eq name9 r1))) +(assert (not (eq name8 r2))) +(assert (not (eq name8 r3))) +(assert (not (eq name8 r4))) +(assert (not (eq name8 r5))) +(assert (not (eq name8 r6))) +(assert (not (eq name8 r7))) +(assert (not (eq name8 r8))) +(assert (not (eq name8 r9))) +(assert (not (eq name8 name19))) +(assert (not (eq name8 name18))) +(assert (not (eq name8 name17))) +(assert (not (eq name8 name16))) +(assert (not (eq name8 r10))) +(assert (not (eq name8 name15))) +(assert (not (eq name8 name14))) +(assert (not (eq name8 r12))) +(assert (not (eq name8 name13))) +(assert (not (eq name8 r11))) +(assert (not (eq name8 name12))) +(assert (not (eq name8 r14))) +(assert (not (eq name8 name11))) +(assert (not (eq name8 r13))) +(assert (not (eq name8 name10))) +(assert (not (eq name8 r16))) +(assert (not (eq name8 r15))) +(assert (not (eq name8 r18))) +(assert (not (eq name8 r17))) +(assert (not (eq name8 r19))) +(assert (not (eq name8 name6))) +(assert (not (eq name8 name5))) +(assert (not (eq name8 name4))) +(assert (not (eq name8 name3))) +(assert (not (eq name8 name9))) +(assert (not (eq name8 name8))) +(assert (not (eq name8 name7))) +(assert (not (eq name8 name2))) +(assert (not (eq name8 name1))) +(assert (not (eq name8 r0))) +(assert (not (eq name8 name0))) +(assert (not (eq name8 r1))) +(assert (not (eq name7 r2))) +(assert (not (eq name7 r3))) +(assert (not (eq name7 r4))) +(assert (not (eq name7 r5))) +(assert (not (eq name7 r6))) +(assert (not (eq name7 r7))) +(assert (not (eq name7 r8))) +(assert (not (eq name7 r9))) +(assert (not (eq name7 name19))) +(assert (not (eq name7 name18))) +(assert (not (eq name7 name17))) +(assert (not (eq name7 name16))) +(assert (not (eq name7 r10))) +(assert (not (eq name7 name15))) +(assert (not (eq name7 name14))) +(assert (not (eq name7 r12))) +(assert (not (eq name7 name13))) +(assert (not (eq name7 r11))) +(assert (not (eq name7 name12))) +(assert (not (eq name7 r14))) +(assert (not (eq name7 name11))) +(assert (not (eq name7 r13))) +(assert (not (eq name7 name10))) +(assert (not (eq name7 r16))) +(assert (not (eq name7 r15))) +(assert (not (eq name7 r18))) +(assert (not (eq name7 r17))) +(assert (not (eq name7 r19))) +(assert (not (eq name7 name6))) +(assert (not (eq name7 name5))) +(assert (not (eq name7 name4))) +(assert (not (eq name7 name3))) +(assert (not (eq name7 name9))) +(assert (not (eq name7 name8))) +(assert (not (eq name7 name7))) +(assert (not (eq name7 name2))) +(assert (not (eq name7 name1))) +(assert (not (eq name7 r0))) +(assert (not (eq name7 name0))) +(assert (not (eq name7 r1))) +(assert (not (eq name2 r2))) +(assert (not (eq name2 r3))) +(assert (not (eq name2 r4))) +(assert (not (eq name2 r5))) +(assert (not (eq name2 r6))) +(assert (not (eq name2 r7))) +(assert (not (eq name2 r8))) +(assert (not (eq name2 r9))) +(assert (not (eq name2 name19))) +(assert (not (eq name2 name18))) +(assert (not (eq name2 name17))) +(assert (not (eq name2 name16))) +(assert (not (eq name2 r10))) +(assert (not (eq name2 name15))) +(assert (not (eq name2 name14))) +(assert (not (eq name2 r12))) +(assert (not (eq name2 name13))) +(assert (not (eq name2 r11))) +(assert (not (eq name2 name12))) +(assert (not (eq name2 r14))) +(assert (not (eq name2 name11))) +(assert (not (eq name2 r13))) +(assert (not (eq name2 name10))) +(assert (not (eq name2 r16))) +(assert (not (eq name2 r15))) +(assert (not (eq name2 r18))) +(assert (not (eq name2 r17))) +(assert (not (eq name2 r19))) +(assert (not (eq name2 name6))) +(assert (not (eq name2 name5))) +(assert (not (eq name2 name4))) +(assert (not (eq name2 name3))) +(assert (not (eq name2 name9))) +(assert (not (eq name2 name8))) +(assert (not (eq name2 name7))) +(assert (not (eq name2 name2))) +(assert (not (eq name2 name1))) +(assert (not (eq name2 r0))) +(assert (not (eq name2 name0))) +(assert (not (eq name2 r1))) +(assert (not (eq name1 r2))) +(assert (not (eq name1 r3))) +(assert (not (eq name1 r4))) +(assert (not (eq name1 r5))) +(assert (not (eq name1 r6))) +(assert (not (eq name1 r7))) +(assert (not (eq name1 r8))) +(assert (not (eq name1 r9))) +(assert (not (eq name1 name19))) +(assert (not (eq name1 name18))) +(assert (not (eq name1 name17))) +(assert (not (eq name1 name16))) +(assert (not (eq name1 r10))) +(assert (not (eq name1 name15))) +(assert (not (eq name1 name14))) +(assert (not (eq name1 r12))) +(assert (not (eq name1 name13))) +(assert (not (eq name1 r11))) +(assert (not (eq name1 name12))) +(assert (not (eq name1 r14))) +(assert (not (eq name1 name11))) +(assert (not (eq name1 r13))) +(assert (not (eq name1 name10))) +(assert (not (eq name1 r16))) +(assert (not (eq name1 r15))) +(assert (not (eq name1 r18))) +(assert (not (eq name1 r17))) +(assert (not (eq name1 r19))) +(assert (not (eq name1 name6))) +(assert (not (eq name1 name5))) +(assert (not (eq name1 name4))) +(assert (not (eq name1 name3))) +(assert (not (eq name1 name9))) +(assert (not (eq name1 name8))) +(assert (not (eq name1 name7))) +(assert (not (eq name1 name2))) +(assert (not (eq name1 name1))) +(assert (not (eq name1 r0))) +(assert (not (eq name1 name0))) +(assert (not (eq name1 r1))) +(assert (not (eq r0 name19))) +(assert (not (eq r0 name18))) +(assert (not (eq r0 name17))) +(assert (not (eq r0 name16))) +(assert (not (eq r0 name15))) +(assert (not (eq r0 name14))) +(assert (not (eq r0 name13))) +(assert (not (eq r0 name12))) +(assert (not (eq r0 name11))) +(assert (not (eq r0 name10))) +(assert (not (eq r0 name6))) +(assert (not (eq r0 name5))) +(assert (not (eq r0 name4))) +(assert (not (eq r0 name3))) +(assert (not (eq r0 name9))) +(assert (not (eq r0 name8))) +(assert (not (eq r0 name7))) +(assert (not (eq r0 name2))) +(assert (not (eq r0 name1))) +(assert (not (eq r0 name0))) +(assert (not (eq name0 r2))) +(assert (not (eq name0 r3))) +(assert (not (eq name0 r4))) +(assert (not (eq name0 r5))) +(assert (not (eq name0 r6))) +(assert (not (eq name0 r7))) +(assert (not (eq name0 r8))) +(assert (not (eq name0 r9))) +(assert (not (eq name0 name19))) +(assert (not (eq name0 name18))) +(assert (not (eq name0 name17))) +(assert (not (eq name0 name16))) +(assert (not (eq name0 r10))) +(assert (not (eq name0 name15))) +(assert (not (eq name0 name14))) +(assert (not (eq name0 r12))) +(assert (not (eq name0 name13))) +(assert (not (eq name0 r11))) +(assert (not (eq name0 name12))) +(assert (not (eq name0 r14))) +(assert (not (eq name0 name11))) +(assert (not (eq name0 r13))) +(assert (not (eq name0 name10))) +(assert (not (eq name0 r16))) +(assert (not (eq name0 r15))) +(assert (not (eq name0 r18))) +(assert (not (eq name0 r17))) +(assert (not (eq name0 r19))) +(assert (not (eq name0 name6))) +(assert (not (eq name0 name5))) +(assert (not (eq name0 name4))) +(assert (not (eq name0 name3))) +(assert (not (eq name0 name9))) +(assert (not (eq name0 name8))) +(assert (not (eq name0 name7))) +(assert (not (eq name0 name2))) +(assert (not (eq name0 name1))) +(assert (not (eq name0 r0))) +(assert (not (eq name0 name0))) +(assert (not (eq name0 r1))) +(assert (not (eq r1 name19))) +(assert (not (eq r1 name18))) +(assert (not (eq r1 name17))) +(assert (not (eq r1 name16))) +(assert (not (eq r1 name15))) +(assert (not (eq r1 name14))) +(assert (not (eq r1 name13))) +(assert (not (eq r1 name12))) +(assert (not (eq r1 name11))) +(assert (not (eq r1 name10))) +(assert (not (eq r1 name6))) +(assert (not (eq r1 name5))) +(assert (not (eq r1 name4))) +(assert (not (eq r1 name3))) +(assert (not (eq r1 name9))) +(assert (not (eq r1 name8))) +(assert (not (eq r1 name7))) +(assert (not (eq r1 name2))) +(assert (not (eq r1 name1))) +(assert (not (eq r1 name0))) +(assert (not (conflicts r2 name19))) +(assert (not (conflicts r2 name18))) +(assert (not (conflicts r2 name17))) +(assert (not (conflicts r2 name16))) +(assert (not (conflicts r2 name15))) +(assert (not (conflicts r2 name14))) +(assert (not (conflicts r2 name13))) +(assert (not (conflicts r2 name12))) +(assert (not (conflicts r2 name11))) +(assert (not (conflicts r2 name10))) +(assert (not (conflicts r2 name6))) +(assert (not (conflicts r2 name5))) +(assert (not (conflicts r2 name4))) +(assert (not (conflicts r2 name3))) +(assert (not (conflicts r2 name9))) +(assert (not (conflicts r2 name8))) +(assert (not (conflicts r2 name7))) +(assert (not (conflicts r2 name2))) +(assert (not (conflicts r2 name1))) +(assert (not (conflicts r2 name0))) +(assert (not (conflicts r3 name19))) +(assert (not (conflicts r3 name18))) +(assert (not (conflicts r3 name17))) +(assert (not (conflicts r3 name16))) +(assert (not (conflicts r3 name15))) +(assert (not (conflicts r3 name14))) +(assert (not (conflicts r3 name13))) +(assert (not (conflicts r3 name12))) +(assert (not (conflicts r3 name11))) +(assert (not (conflicts r3 name10))) +(assert (not (conflicts r3 name6))) +(assert (not (conflicts r3 name5))) +(assert (not (conflicts r3 name4))) +(assert (not (conflicts r3 name3))) +(assert (not (conflicts r3 name9))) +(assert (not (conflicts r3 name8))) +(assert (not (conflicts r3 name7))) +(assert (not (conflicts r3 name2))) +(assert (not (conflicts r3 name1))) +(assert (not (conflicts r3 name0))) +(assert (not (conflicts r4 name19))) +(assert (not (conflicts r4 name18))) +(assert (not (conflicts r4 name17))) +(assert (not (conflicts r4 name16))) +(assert (not (conflicts r4 name15))) +(assert (not (conflicts r4 name14))) +(assert (not (conflicts r4 name13))) +(assert (not (conflicts r4 name12))) +(assert (not (conflicts r4 name11))) +(assert (not (conflicts r4 name10))) +(assert (not (conflicts r4 name6))) +(assert (not (conflicts r4 name5))) +(assert (not (conflicts r4 name4))) +(assert (not (conflicts r4 name3))) +(assert (not (conflicts r4 name9))) +(assert (not (conflicts r4 name8))) +(assert (not (conflicts r4 name7))) +(assert (not (conflicts r4 name2))) +(assert (not (conflicts r4 name1))) +(assert (not (conflicts r4 name0))) +(assert (not (conflicts r5 name19))) +(assert (not (conflicts r5 name18))) +(assert (not (conflicts r5 name17))) +(assert (not (conflicts r5 name16))) +(assert (not (conflicts r5 name15))) +(assert (not (conflicts r5 name14))) +(assert (not (conflicts r5 name13))) +(assert (not (conflicts r5 name12))) +(assert (not (conflicts r5 name11))) +(assert (not (conflicts r5 name10))) +(assert (not (conflicts r5 name6))) +(assert (not (conflicts r5 name5))) +(assert (not (conflicts r5 name4))) +(assert (not (conflicts r5 name3))) +(assert (not (conflicts r5 name9))) +(assert (not (conflicts r5 name8))) +(assert (not (conflicts r5 name7))) +(assert (not (conflicts r5 name2))) +(assert (not (conflicts r5 name1))) +(assert (not (conflicts r5 name0))) +(assert (not (conflicts r6 name19))) +(assert (not (conflicts r6 name18))) +(assert (not (conflicts r6 name17))) +(assert (not (conflicts r6 name16))) +(assert (not (conflicts r6 name15))) +(assert (not (conflicts r6 name14))) +(assert (not (conflicts r6 name13))) +(assert (not (conflicts r6 name12))) +(assert (not (conflicts r6 name11))) +(assert (not (conflicts r6 name10))) +(assert (not (conflicts r6 name6))) +(assert (not (conflicts r6 name5))) +(assert (not (conflicts r6 name4))) +(assert (not (conflicts r6 name3))) +(assert (not (conflicts r6 name9))) +(assert (not (conflicts r6 name8))) +(assert (not (conflicts r6 name7))) +(assert (not (conflicts r6 name2))) +(assert (not (conflicts r6 name1))) +(assert (not (conflicts r6 name0))) +(assert (not (conflicts r7 name19))) +(assert (not (conflicts r7 name18))) +(assert (not (conflicts r7 name17))) +(assert (not (conflicts r7 name16))) +(assert (not (conflicts r7 name15))) +(assert (not (conflicts r7 name14))) +(assert (not (conflicts r7 name13))) +(assert (not (conflicts r7 name12))) +(assert (not (conflicts r7 name11))) +(assert (not (conflicts r7 name10))) +(assert (not (conflicts r7 name6))) +(assert (not (conflicts r7 name5))) +(assert (not (conflicts r7 name4))) +(assert (not (conflicts r7 name3))) +(assert (not (conflicts r7 name9))) +(assert (not (conflicts r7 name8))) +(assert (not (conflicts r7 name7))) +(assert (not (conflicts r7 name2))) +(assert (not (conflicts r7 name1))) +(assert (not (conflicts r7 name0))) +(assert (not (conflicts r8 name19))) +(assert (not (conflicts r8 name18))) +(assert (not (conflicts r8 name17))) +(assert (not (conflicts r8 name16))) +(assert (not (conflicts r8 name15))) +(assert (not (conflicts r8 name14))) +(assert (not (conflicts r8 name13))) +(assert (not (conflicts r8 name12))) +(assert (not (conflicts r8 name11))) +(assert (not (conflicts r8 name10))) +(assert (not (conflicts r8 name6))) +(assert (not (conflicts r8 name5))) +(assert (not (conflicts r8 name4))) +(assert (not (conflicts r8 name3))) +(assert (not (conflicts r8 name9))) +(assert (not (conflicts r8 name8))) +(assert (not (conflicts r8 name7))) +(assert (not (conflicts r8 name2))) +(assert (not (conflicts r8 name1))) +(assert (not (conflicts r8 name0))) +(assert (not (conflicts r9 name19))) +(assert (not (conflicts r9 name18))) +(assert (not (conflicts r9 name17))) +(assert (not (conflicts r9 name16))) +(assert (not (conflicts r9 name15))) +(assert (not (conflicts r9 name14))) +(assert (not (conflicts r9 name13))) +(assert (not (conflicts r9 name12))) +(assert (not (conflicts r9 name11))) +(assert (not (conflicts r9 name10))) +(assert (not (conflicts r9 name6))) +(assert (not (conflicts r9 name5))) +(assert (not (conflicts r9 name4))) +(assert (not (conflicts r9 name3))) +(assert (not (conflicts r9 name9))) +(assert (not (conflicts r9 name8))) +(assert (not (conflicts r9 name7))) +(assert (not (conflicts r9 name2))) +(assert (not (conflicts r9 name1))) +(assert (not (conflicts r9 name0))) +(assert (not (conflicts name19 r2))) +(assert (not (conflicts name19 r3))) +(assert (not (conflicts name19 r4))) +(assert (not (conflicts name19 r5))) +(assert (not (conflicts name19 r6))) +(assert (not (conflicts name19 r7))) +(assert (not (conflicts name19 r8))) +(assert (not (conflicts name19 r9))) +(assert (not (conflicts name19 name19))) +(assert (not (conflicts name19 name18))) +(assert (not (conflicts name19 name17))) +(assert (not (conflicts name19 name16))) +(assert (not (conflicts name19 r10))) +(assert (not (conflicts name19 name15))) +(assert (not (conflicts name19 name14))) +(assert (not (conflicts name19 r12))) +(assert (not (conflicts name19 name13))) +(assert (not (conflicts name19 r11))) +(assert (not (conflicts name19 name12))) +(assert (not (conflicts name19 r14))) +(assert (not (conflicts name19 name11))) +(assert (not (conflicts name19 r13))) +(assert (not (conflicts name19 name10))) +(assert (not (conflicts name19 r16))) +(assert (not (conflicts name19 r15))) +(assert (not (conflicts name19 r18))) +(assert (not (conflicts name19 r17))) +(assert (not (conflicts name19 r19))) +(assert (not (conflicts name19 name6))) +(assert (not (conflicts name19 name5))) +(assert (not (conflicts name19 name4))) +(assert (not (conflicts name19 name3))) +(assert (not (conflicts name19 name9))) +(assert (not (conflicts name19 name8))) +(assert (not (conflicts name19 name7))) +(assert (not (conflicts name19 name2))) +(assert (not (conflicts name19 name1))) +(assert (not (conflicts name19 r0))) +(assert (not (conflicts name19 name0))) +(assert (not (conflicts name19 r1))) +(assert (not (conflicts name18 r2))) +(assert (not (conflicts name18 r3))) +(assert (not (conflicts name18 r4))) +(assert (not (conflicts name18 r5))) +(assert (not (conflicts name18 r6))) +(assert (not (conflicts name18 r7))) +(assert (not (conflicts name18 r8))) +(assert (not (conflicts name18 r9))) +(assert (not (conflicts name18 name19))) +(assert (not (conflicts name18 name18))) +(assert (not (conflicts name18 name17))) +(assert (not (conflicts name18 name16))) +(assert (not (conflicts name18 r10))) +(assert (not (conflicts name18 name15))) +(assert (not (conflicts name18 name14))) +(assert (not (conflicts name18 r12))) +(assert (not (conflicts name18 name13))) +(assert (not (conflicts name18 r11))) +(assert (not (conflicts name18 name12))) +(assert (not (conflicts name18 r14))) +(assert (not (conflicts name18 name11))) +(assert (not (conflicts name18 r13))) +(assert (not (conflicts name18 name10))) +(assert (not (conflicts name18 r16))) +(assert (not (conflicts name18 r15))) +(assert (not (conflicts name18 r18))) +(assert (not (conflicts name18 r17))) +(assert (not (conflicts name18 r19))) +(assert (not (conflicts name18 name6))) +(assert (not (conflicts name18 name5))) +(assert (not (conflicts name18 name4))) +(assert (not (conflicts name18 name3))) +(assert (not (conflicts name18 name9))) +(assert (not (conflicts name18 name8))) +(assert (not (conflicts name18 name7))) +(assert (not (conflicts name18 name2))) +(assert (not (conflicts name18 name1))) +(assert (not (conflicts name18 r0))) +(assert (not (conflicts name18 name0))) +(assert (not (conflicts name18 r1))) +(assert (not (conflicts name17 r2))) +(assert (not (conflicts name17 r3))) +(assert (not (conflicts name17 r4))) +(assert (not (conflicts name17 r5))) +(assert (not (conflicts name17 r6))) +(assert (not (conflicts name17 r7))) +(assert (not (conflicts name17 r8))) +(assert (not (conflicts name17 r9))) +(assert (not (conflicts name17 name19))) +(assert (not (conflicts name17 name18))) +(assert (not (conflicts name17 name17))) +(assert (not (conflicts name17 name16))) +(assert (not (conflicts name17 r10))) +(assert (not (conflicts name17 name15))) +(assert (not (conflicts name17 name14))) +(assert (not (conflicts name17 r12))) +(assert (not (conflicts name17 name13))) +(assert (not (conflicts name17 r11))) +(assert (not (conflicts name17 name12))) +(assert (not (conflicts name17 r14))) +(assert (not (conflicts name17 name11))) +(assert (not (conflicts name17 r13))) +(assert (not (conflicts name17 name10))) +(assert (not (conflicts name17 r16))) +(assert (not (conflicts name17 r15))) +(assert (not (conflicts name17 r18))) +(assert (not (conflicts name17 r17))) +(assert (not (conflicts name17 r19))) +(assert (not (conflicts name17 name6))) +(assert (not (conflicts name17 name5))) +(assert (not (conflicts name17 name4))) +(assert (not (conflicts name17 name3))) +(assert (not (conflicts name17 name9))) +(assert (not (conflicts name17 name8))) +(assert (not (conflicts name17 name7))) +(assert (not (conflicts name17 name2))) +(assert (not (conflicts name17 name1))) +(assert (not (conflicts name17 r0))) +(assert (not (conflicts name17 name0))) +(assert (not (conflicts name17 r1))) +(assert (not (conflicts name16 r2))) +(assert (not (conflicts name16 r3))) +(assert (not (conflicts name16 r4))) +(assert (not (conflicts name16 r5))) +(assert (not (conflicts name16 r6))) +(assert (not (conflicts name16 r7))) +(assert (not (conflicts name16 r8))) +(assert (not (conflicts name16 r9))) +(assert (not (conflicts name16 name19))) +(assert (not (conflicts name16 name18))) +(assert (not (conflicts name16 name17))) +(assert (not (conflicts name16 name16))) +(assert (not (conflicts name16 r10))) +(assert (not (conflicts name16 name15))) +(assert (not (conflicts name16 name14))) +(assert (not (conflicts name16 r12))) +(assert (not (conflicts name16 name13))) +(assert (not (conflicts name16 r11))) +(assert (not (conflicts name16 name12))) +(assert (not (conflicts name16 r14))) +(assert (not (conflicts name16 name11))) +(assert (not (conflicts name16 r13))) +(assert (not (conflicts name16 name10))) +(assert (not (conflicts name16 r16))) +(assert (not (conflicts name16 r15))) +(assert (not (conflicts name16 r18))) +(assert (not (conflicts name16 r17))) +(assert (not (conflicts name16 r19))) +(assert (not (conflicts name16 name6))) +(assert (not (conflicts name16 name5))) +(assert (not (conflicts name16 name4))) +(assert (not (conflicts name16 name3))) +(assert (not (conflicts name16 name9))) +(assert (not (conflicts name16 name8))) +(assert (not (conflicts name16 name7))) +(assert (not (conflicts name16 name2))) +(assert (not (conflicts name16 name1))) +(assert (not (conflicts name16 r0))) +(assert (not (conflicts name16 name0))) +(assert (not (conflicts name16 r1))) +(assert (not (conflicts r10 name19))) +(assert (not (conflicts r10 name18))) +(assert (not (conflicts r10 name17))) +(assert (not (conflicts r10 name16))) +(assert (not (conflicts r10 name15))) +(assert (not (conflicts r10 name14))) +(assert (not (conflicts r10 name13))) +(assert (not (conflicts r10 name12))) +(assert (not (conflicts r10 name11))) +(assert (not (conflicts r10 name10))) +(assert (not (conflicts r10 name6))) +(assert (not (conflicts r10 name5))) +(assert (not (conflicts r10 name4))) +(assert (not (conflicts r10 name3))) +(assert (not (conflicts r10 name9))) +(assert (not (conflicts r10 name8))) +(assert (not (conflicts r10 name7))) +(assert (not (conflicts r10 name2))) +(assert (not (conflicts r10 name1))) +(assert (not (conflicts r10 name0))) +(assert (not (conflicts name15 r2))) +(assert (not (conflicts name15 r3))) +(assert (not (conflicts name15 r4))) +(assert (not (conflicts name15 r5))) +(assert (not (conflicts name15 r6))) +(assert (not (conflicts name15 r7))) +(assert (not (conflicts name15 r8))) +(assert (not (conflicts name15 r9))) +(assert (not (conflicts name15 name19))) +(assert (not (conflicts name15 name18))) +(assert (not (conflicts name15 name17))) +(assert (not (conflicts name15 name16))) +(assert (not (conflicts name15 r10))) +(assert (not (conflicts name15 name15))) +(assert (not (conflicts name15 name14))) +(assert (not (conflicts name15 r12))) +(assert (not (conflicts name15 name13))) +(assert (not (conflicts name15 r11))) +(assert (not (conflicts name15 name12))) +(assert (not (conflicts name15 r14))) +(assert (not (conflicts name15 name11))) +(assert (not (conflicts name15 r13))) +(assert (not (conflicts name15 name10))) +(assert (not (conflicts name15 r16))) +(assert (not (conflicts name15 r15))) +(assert (not (conflicts name15 r18))) +(assert (not (conflicts name15 r17))) +(assert (not (conflicts name15 r19))) +(assert (not (conflicts name15 name6))) +(assert (not (conflicts name15 name5))) +(assert (not (conflicts name15 name4))) +(assert (not (conflicts name15 name3))) +(assert (not (conflicts name15 name9))) +(assert (not (conflicts name15 name8))) +(assert (not (conflicts name15 name7))) +(assert (not (conflicts name15 name2))) +(assert (not (conflicts name15 name1))) +(assert (not (conflicts name15 r0))) +(assert (not (conflicts name15 name0))) +(assert (not (conflicts name15 r1))) +(assert (not (conflicts name14 r2))) +(assert (not (conflicts name14 r3))) +(assert (not (conflicts name14 r4))) +(assert (not (conflicts name14 r5))) +(assert (not (conflicts name14 r6))) +(assert (not (conflicts name14 r7))) +(assert (not (conflicts name14 r8))) +(assert (not (conflicts name14 r9))) +(assert (not (conflicts name14 name19))) +(assert (not (conflicts name14 name18))) +(assert (not (conflicts name14 name17))) +(assert (not (conflicts name14 name16))) +(assert (not (conflicts name14 r10))) +(assert (not (conflicts name14 name15))) +(assert (not (conflicts name14 name14))) +(assert (not (conflicts name14 r12))) +(assert (not (conflicts name14 name13))) +(assert (not (conflicts name14 r11))) +(assert (not (conflicts name14 name12))) +(assert (not (conflicts name14 r14))) +(assert (not (conflicts name14 name11))) +(assert (not (conflicts name14 r13))) +(assert (not (conflicts name14 name10))) +(assert (not (conflicts name14 r16))) +(assert (not (conflicts name14 r15))) +(assert (not (conflicts name14 r18))) +(assert (not (conflicts name14 r17))) +(assert (not (conflicts name14 r19))) +(assert (not (conflicts name14 name6))) +(assert (not (conflicts name14 name5))) +(assert (not (conflicts name14 name4))) +(assert (not (conflicts name14 name3))) +(assert (not (conflicts name14 name9))) +(assert (not (conflicts name14 name8))) +(assert (not (conflicts name14 name7))) +(assert (not (conflicts name14 name2))) +(assert (not (conflicts name14 name1))) +(assert (not (conflicts name14 r0))) +(assert (not (conflicts name14 name0))) +(assert (not (conflicts name14 r1))) +(assert (not (conflicts r12 name19))) +(assert (not (conflicts r12 name18))) +(assert (not (conflicts r12 name17))) +(assert (not (conflicts r12 name16))) +(assert (not (conflicts r12 name15))) +(assert (not (conflicts r12 name14))) +(assert (not (conflicts r12 name13))) +(assert (not (conflicts r12 name12))) +(assert (not (conflicts r12 name11))) +(assert (not (conflicts r12 name10))) +(assert (not (conflicts r12 name6))) +(assert (not (conflicts r12 name5))) +(assert (not (conflicts r12 name4))) +(assert (not (conflicts r12 name3))) +(assert (not (conflicts r12 name9))) +(assert (not (conflicts r12 name8))) +(assert (not (conflicts r12 name7))) +(assert (not (conflicts r12 name2))) +(assert (not (conflicts r12 name1))) +(assert (not (conflicts r12 name0))) +(assert (not (conflicts name13 r2))) +(assert (not (conflicts name13 r3))) +(assert (not (conflicts name13 r4))) +(assert (not (conflicts name13 r5))) +(assert (not (conflicts name13 r6))) +(assert (not (conflicts name13 r7))) +(assert (not (conflicts name13 r8))) +(assert (not (conflicts name13 r9))) +(assert (not (conflicts name13 name19))) +(assert (not (conflicts name13 name18))) +(assert (not (conflicts name13 name17))) +(assert (not (conflicts name13 name16))) +(assert (not (conflicts name13 r10))) +(assert (not (conflicts name13 name15))) +(assert (not (conflicts name13 name14))) +(assert (not (conflicts name13 r12))) +(assert (not (conflicts name13 name13))) +(assert (not (conflicts name13 r11))) +(assert (not (conflicts name13 name12))) +(assert (not (conflicts name13 r14))) +(assert (not (conflicts name13 name11))) +(assert (not (conflicts name13 r13))) +(assert (not (conflicts name13 name10))) +(assert (not (conflicts name13 r16))) +(assert (not (conflicts name13 r15))) +(assert (not (conflicts name13 r18))) +(assert (not (conflicts name13 r17))) +(assert (not (conflicts name13 r19))) +(assert (not (conflicts name13 name6))) +(assert (not (conflicts name13 name5))) +(assert (not (conflicts name13 name4))) +(assert (not (conflicts name13 name3))) +(assert (not (conflicts name13 name9))) +(assert (not (conflicts name13 name8))) +(assert (not (conflicts name13 name7))) +(assert (not (conflicts name13 name2))) +(assert (not (conflicts name13 name1))) +(assert (not (conflicts name13 r0))) +(assert (not (conflicts name13 name0))) +(assert (not (conflicts name13 r1))) +(assert (not (conflicts r11 name19))) +(assert (not (conflicts r11 name18))) +(assert (not (conflicts r11 name17))) +(assert (not (conflicts r11 name16))) +(assert (not (conflicts r11 name15))) +(assert (not (conflicts r11 name14))) +(assert (not (conflicts r11 name13))) +(assert (not (conflicts r11 name12))) +(assert (not (conflicts r11 name11))) +(assert (not (conflicts r11 name10))) +(assert (not (conflicts r11 name6))) +(assert (not (conflicts r11 name5))) +(assert (not (conflicts r11 name4))) +(assert (not (conflicts r11 name3))) +(assert (not (conflicts r11 name9))) +(assert (not (conflicts r11 name8))) +(assert (not (conflicts r11 name7))) +(assert (not (conflicts r11 name2))) +(assert (not (conflicts r11 name1))) +(assert (not (conflicts r11 name0))) +(assert (not (conflicts name12 r2))) +(assert (not (conflicts name12 r3))) +(assert (not (conflicts name12 r4))) +(assert (not (conflicts name12 r5))) +(assert (not (conflicts name12 r6))) +(assert (not (conflicts name12 r7))) +(assert (not (conflicts name12 r8))) +(assert (not (conflicts name12 r9))) +(assert (not (conflicts name12 name19))) +(assert (not (conflicts name12 name18))) +(assert (not (conflicts name12 name17))) +(assert (not (conflicts name12 name16))) +(assert (not (conflicts name12 r10))) +(assert (not (conflicts name12 name15))) +(assert (not (conflicts name12 name14))) +(assert (not (conflicts name12 r12))) +(assert (not (conflicts name12 name13))) +(assert (not (conflicts name12 r11))) +(assert (not (conflicts name12 name12))) +(assert (not (conflicts name12 r14))) +(assert (not (conflicts name12 name11))) +(assert (not (conflicts name12 r13))) +(assert (not (conflicts name12 name10))) +(assert (not (conflicts name12 r16))) +(assert (not (conflicts name12 r15))) +(assert (not (conflicts name12 r18))) +(assert (not (conflicts name12 r17))) +(assert (not (conflicts name12 r19))) +(assert (not (conflicts name12 name6))) +(assert (not (conflicts name12 name5))) +(assert (not (conflicts name12 name4))) +(assert (not (conflicts name12 name3))) +(assert (not (conflicts name12 name9))) +(assert (not (conflicts name12 name8))) +(assert (not (conflicts name12 name7))) +(assert (not (conflicts name12 name2))) +(assert (not (conflicts name12 name1))) +(assert (not (conflicts name12 r0))) +(assert (not (conflicts name12 name0))) +(assert (not (conflicts name12 r1))) +(assert (not (conflicts r14 name19))) +(assert (not (conflicts r14 name18))) +(assert (not (conflicts r14 name17))) +(assert (not (conflicts r14 name16))) +(assert (not (conflicts r14 name15))) +(assert (not (conflicts r14 name14))) +(assert (not (conflicts r14 name13))) +(assert (not (conflicts r14 name12))) +(assert (not (conflicts r14 name11))) +(assert (not (conflicts r14 name10))) +(assert (not (conflicts r14 name6))) +(assert (not (conflicts r14 name5))) +(assert (not (conflicts r14 name4))) +(assert (not (conflicts r14 name3))) +(assert (not (conflicts r14 name9))) +(assert (not (conflicts r14 name8))) +(assert (not (conflicts r14 name7))) +(assert (not (conflicts r14 name2))) +(assert (not (conflicts r14 name1))) +(assert (not (conflicts r14 name0))) +(assert (not (conflicts name11 r2))) +(assert (not (conflicts name11 r3))) +(assert (not (conflicts name11 r4))) +(assert (not (conflicts name11 r5))) +(assert (not (conflicts name11 r6))) +(assert (not (conflicts name11 r7))) +(assert (not (conflicts name11 r8))) +(assert (not (conflicts name11 r9))) +(assert (not (conflicts name11 name19))) +(assert (not (conflicts name11 name18))) +(assert (not (conflicts name11 name17))) +(assert (not (conflicts name11 name16))) +(assert (not (conflicts name11 r10))) +(assert (not (conflicts name11 name15))) +(assert (not (conflicts name11 name14))) +(assert (not (conflicts name11 r12))) +(assert (not (conflicts name11 name13))) +(assert (not (conflicts name11 r11))) +(assert (not (conflicts name11 name12))) +(assert (not (conflicts name11 r14))) +(assert (not (conflicts name11 name11))) +(assert (not (conflicts name11 r13))) +(assert (not (conflicts name11 name10))) +(assert (not (conflicts name11 r16))) +(assert (not (conflicts name11 r15))) +(assert (not (conflicts name11 r18))) +(assert (not (conflicts name11 r17))) +(assert (not (conflicts name11 r19))) +(assert (not (conflicts name11 name6))) +(assert (not (conflicts name11 name5))) +(assert (not (conflicts name11 name4))) +(assert (not (conflicts name11 name3))) +(assert (not (conflicts name11 name9))) +(assert (not (conflicts name11 name8))) +(assert (not (conflicts name11 name7))) +(assert (not (conflicts name11 name2))) +(assert (not (conflicts name11 name1))) +(assert (not (conflicts name11 r0))) +(assert (not (conflicts name11 name0))) +(assert (not (conflicts name11 r1))) +(assert (not (conflicts r13 name19))) +(assert (not (conflicts r13 name18))) +(assert (not (conflicts r13 name17))) +(assert (not (conflicts r13 name16))) +(assert (not (conflicts r13 name15))) +(assert (not (conflicts r13 name14))) +(assert (not (conflicts r13 name13))) +(assert (not (conflicts r13 name12))) +(assert (not (conflicts r13 name11))) +(assert (not (conflicts r13 name10))) +(assert (not (conflicts r13 name6))) +(assert (not (conflicts r13 name5))) +(assert (not (conflicts r13 name4))) +(assert (not (conflicts r13 name3))) +(assert (not (conflicts r13 name9))) +(assert (not (conflicts r13 name8))) +(assert (not (conflicts r13 name7))) +(assert (not (conflicts r13 name2))) +(assert (not (conflicts r13 name1))) +(assert (not (conflicts r13 name0))) +(assert (not (conflicts name10 r2))) +(assert (not (conflicts name10 r3))) +(assert (not (conflicts name10 r4))) +(assert (not (conflicts name10 r5))) +(assert (not (conflicts name10 r6))) +(assert (not (conflicts name10 r7))) +(assert (not (conflicts name10 r8))) +(assert (not (conflicts name10 r9))) +(assert (not (conflicts name10 name19))) +(assert (not (conflicts name10 name18))) +(assert (not (conflicts name10 name17))) +(assert (not (conflicts name10 name16))) +(assert (not (conflicts name10 r10))) +(assert (not (conflicts name10 name15))) +(assert (not (conflicts name10 name14))) +(assert (not (conflicts name10 r12))) +(assert (not (conflicts name10 name13))) +(assert (not (conflicts name10 r11))) +(assert (not (conflicts name10 name12))) +(assert (not (conflicts name10 r14))) +(assert (not (conflicts name10 name11))) +(assert (not (conflicts name10 r13))) +(assert (not (conflicts name10 name10))) +(assert (not (conflicts name10 r16))) +(assert (not (conflicts name10 r15))) +(assert (not (conflicts name10 r18))) +(assert (not (conflicts name10 r17))) +(assert (not (conflicts name10 r19))) +(assert (not (conflicts name10 name6))) +(assert (not (conflicts name10 name5))) +(assert (not (conflicts name10 name4))) +(assert (not (conflicts name10 name3))) +(assert (not (conflicts name10 name9))) +(assert (not (conflicts name10 name8))) +(assert (not (conflicts name10 name7))) +(assert (not (conflicts name10 name2))) +(assert (not (conflicts name10 name1))) +(assert (not (conflicts name10 r0))) +(assert (not (conflicts name10 name0))) +(assert (not (conflicts name10 r1))) +(assert (not (conflicts r16 name19))) +(assert (not (conflicts r16 name18))) +(assert (not (conflicts r16 name17))) +(assert (not (conflicts r16 name16))) +(assert (not (conflicts r16 name15))) +(assert (not (conflicts r16 name14))) +(assert (not (conflicts r16 name13))) +(assert (not (conflicts r16 name12))) +(assert (not (conflicts r16 name11))) +(assert (not (conflicts r16 name10))) +(assert (not (conflicts r16 name6))) +(assert (not (conflicts r16 name5))) +(assert (not (conflicts r16 name4))) +(assert (not (conflicts r16 name3))) +(assert (not (conflicts r16 name9))) +(assert (not (conflicts r16 name8))) +(assert (not (conflicts r16 name7))) +(assert (not (conflicts r16 name2))) +(assert (not (conflicts r16 name1))) +(assert (not (conflicts r16 name0))) +(assert (not (conflicts r15 name19))) +(assert (not (conflicts r15 name18))) +(assert (not (conflicts r15 name17))) +(assert (not (conflicts r15 name16))) +(assert (not (conflicts r15 name15))) +(assert (not (conflicts r15 name14))) +(assert (not (conflicts r15 name13))) +(assert (not (conflicts r15 name12))) +(assert (not (conflicts r15 name11))) +(assert (not (conflicts r15 name10))) +(assert (not (conflicts r15 name6))) +(assert (not (conflicts r15 name5))) +(assert (not (conflicts r15 name4))) +(assert (not (conflicts r15 name3))) +(assert (not (conflicts r15 name9))) +(assert (not (conflicts r15 name8))) +(assert (not (conflicts r15 name7))) +(assert (not (conflicts r15 name2))) +(assert (not (conflicts r15 name1))) +(assert (not (conflicts r15 name0))) +(assert (not (conflicts r18 name19))) +(assert (not (conflicts r18 name18))) +(assert (not (conflicts r18 name17))) +(assert (not (conflicts r18 name16))) +(assert (not (conflicts r18 name15))) +(assert (not (conflicts r18 name14))) +(assert (not (conflicts r18 name13))) +(assert (not (conflicts r18 name12))) +(assert (not (conflicts r18 name11))) +(assert (not (conflicts r18 name10))) +(assert (not (conflicts r18 name6))) +(assert (not (conflicts r18 name5))) +(assert (not (conflicts r18 name4))) +(assert (not (conflicts r18 name3))) +(assert (not (conflicts r18 name9))) +(assert (not (conflicts r18 name8))) +(assert (not (conflicts r18 name7))) +(assert (not (conflicts r18 name2))) +(assert (not (conflicts r18 name1))) +(assert (not (conflicts r18 name0))) +(assert (not (conflicts r17 name19))) +(assert (not (conflicts r17 name18))) +(assert (not (conflicts r17 name17))) +(assert (not (conflicts r17 name16))) +(assert (not (conflicts r17 name15))) +(assert (not (conflicts r17 name14))) +(assert (not (conflicts r17 name13))) +(assert (not (conflicts r17 name12))) +(assert (not (conflicts r17 name11))) +(assert (not (conflicts r17 name10))) +(assert (not (conflicts r17 name6))) +(assert (not (conflicts r17 name5))) +(assert (not (conflicts r17 name4))) +(assert (not (conflicts r17 name3))) +(assert (not (conflicts r17 name9))) +(assert (not (conflicts r17 name8))) +(assert (not (conflicts r17 name7))) +(assert (not (conflicts r17 name2))) +(assert (not (conflicts r17 name1))) +(assert (not (conflicts r17 name0))) +(assert (not (conflicts r19 name19))) +(assert (not (conflicts r19 name18))) +(assert (not (conflicts r19 name17))) +(assert (not (conflicts r19 name16))) +(assert (not (conflicts r19 name15))) +(assert (not (conflicts r19 name14))) +(assert (not (conflicts r19 name13))) +(assert (not (conflicts r19 name12))) +(assert (not (conflicts r19 name11))) +(assert (not (conflicts r19 name10))) +(assert (not (conflicts r19 name6))) +(assert (not (conflicts r19 name5))) +(assert (not (conflicts r19 name4))) +(assert (not (conflicts r19 name3))) +(assert (not (conflicts r19 name9))) +(assert (not (conflicts r19 name8))) +(assert (not (conflicts r19 name7))) +(assert (not (conflicts r19 name2))) +(assert (not (conflicts r19 name1))) +(assert (not (conflicts r19 name0))) +(assert (not (conflicts name6 r2))) +(assert (not (conflicts name6 r3))) +(assert (not (conflicts name6 r4))) +(assert (not (conflicts name6 r5))) +(assert (not (conflicts name6 r6))) +(assert (not (conflicts name6 r7))) +(assert (not (conflicts name6 r8))) +(assert (not (conflicts name6 r9))) +(assert (not (conflicts name6 name19))) +(assert (not (conflicts name6 name18))) +(assert (not (conflicts name6 name17))) +(assert (not (conflicts name6 name16))) +(assert (not (conflicts name6 r10))) +(assert (not (conflicts name6 name15))) +(assert (not (conflicts name6 name14))) +(assert (not (conflicts name6 r12))) +(assert (not (conflicts name6 name13))) +(assert (not (conflicts name6 r11))) +(assert (not (conflicts name6 name12))) +(assert (not (conflicts name6 r14))) +(assert (not (conflicts name6 name11))) +(assert (not (conflicts name6 r13))) +(assert (not (conflicts name6 name10))) +(assert (not (conflicts name6 r16))) +(assert (not (conflicts name6 r15))) +(assert (not (conflicts name6 r18))) +(assert (not (conflicts name6 r17))) +(assert (not (conflicts name6 r19))) +(assert (not (conflicts name6 name6))) +(assert (not (conflicts name6 name5))) +(assert (not (conflicts name6 name4))) +(assert (not (conflicts name6 name3))) +(assert (not (conflicts name6 name9))) +(assert (not (conflicts name6 name8))) +(assert (not (conflicts name6 name7))) +(assert (not (conflicts name6 name2))) +(assert (not (conflicts name6 name1))) +(assert (not (conflicts name6 r0))) +(assert (not (conflicts name6 name0))) +(assert (not (conflicts name6 r1))) +(assert (not (conflicts name5 r2))) +(assert (not (conflicts name5 r3))) +(assert (not (conflicts name5 r4))) +(assert (not (conflicts name5 r5))) +(assert (not (conflicts name5 r6))) +(assert (not (conflicts name5 r7))) +(assert (not (conflicts name5 r8))) +(assert (not (conflicts name5 r9))) +(assert (not (conflicts name5 name19))) +(assert (not (conflicts name5 name18))) +(assert (not (conflicts name5 name17))) +(assert (not (conflicts name5 name16))) +(assert (not (conflicts name5 r10))) +(assert (not (conflicts name5 name15))) +(assert (not (conflicts name5 name14))) +(assert (not (conflicts name5 r12))) +(assert (not (conflicts name5 name13))) +(assert (not (conflicts name5 r11))) +(assert (not (conflicts name5 name12))) +(assert (not (conflicts name5 r14))) +(assert (not (conflicts name5 name11))) +(assert (not (conflicts name5 r13))) +(assert (not (conflicts name5 name10))) +(assert (not (conflicts name5 r16))) +(assert (not (conflicts name5 r15))) +(assert (not (conflicts name5 r18))) +(assert (not (conflicts name5 r17))) +(assert (not (conflicts name5 r19))) +(assert (not (conflicts name5 name6))) +(assert (not (conflicts name5 name5))) +(assert (not (conflicts name5 name4))) +(assert (not (conflicts name5 name3))) +(assert (not (conflicts name5 name9))) +(assert (not (conflicts name5 name8))) +(assert (not (conflicts name5 name7))) +(assert (not (conflicts name5 name2))) +(assert (not (conflicts name5 name1))) +(assert (not (conflicts name5 r0))) +(assert (not (conflicts name5 name0))) +(assert (not (conflicts name5 r1))) +(assert (not (conflicts name4 r2))) +(assert (not (conflicts name4 r3))) +(assert (not (conflicts name4 r4))) +(assert (not (conflicts name4 r5))) +(assert (not (conflicts name4 r6))) +(assert (not (conflicts name4 r7))) +(assert (not (conflicts name4 r8))) +(assert (not (conflicts name4 r9))) +(assert (not (conflicts name4 name19))) +(assert (not (conflicts name4 name18))) +(assert (not (conflicts name4 name17))) +(assert (not (conflicts name4 name16))) +(assert (not (conflicts name4 r10))) +(assert (not (conflicts name4 name15))) +(assert (not (conflicts name4 name14))) +(assert (not (conflicts name4 r12))) +(assert (not (conflicts name4 name13))) +(assert (not (conflicts name4 r11))) +(assert (not (conflicts name4 name12))) +(assert (not (conflicts name4 r14))) +(assert (not (conflicts name4 name11))) +(assert (not (conflicts name4 r13))) +(assert (not (conflicts name4 name10))) +(assert (not (conflicts name4 r16))) +(assert (not (conflicts name4 r15))) +(assert (not (conflicts name4 r18))) +(assert (not (conflicts name4 r17))) +(assert (not (conflicts name4 r19))) +(assert (not (conflicts name4 name6))) +(assert (not (conflicts name4 name5))) +(assert (not (conflicts name4 name4))) +(assert (not (conflicts name4 name3))) +(assert (not (conflicts name4 name9))) +(assert (not (conflicts name4 name8))) +(assert (not (conflicts name4 name7))) +(assert (not (conflicts name4 name2))) +(assert (not (conflicts name4 name1))) +(assert (not (conflicts name4 r0))) +(assert (not (conflicts name4 name0))) +(assert (not (conflicts name4 r1))) +(assert (not (conflicts name3 r2))) +(assert (not (conflicts name3 r3))) +(assert (not (conflicts name3 r4))) +(assert (not (conflicts name3 r5))) +(assert (not (conflicts name3 r6))) +(assert (not (conflicts name3 r7))) +(assert (not (conflicts name3 r8))) +(assert (not (conflicts name3 r9))) +(assert (not (conflicts name3 name19))) +(assert (not (conflicts name3 name18))) +(assert (not (conflicts name3 name17))) +(assert (not (conflicts name3 name16))) +(assert (not (conflicts name3 r10))) +(assert (not (conflicts name3 name15))) +(assert (not (conflicts name3 name14))) +(assert (not (conflicts name3 r12))) +(assert (not (conflicts name3 name13))) +(assert (not (conflicts name3 r11))) +(assert (not (conflicts name3 name12))) +(assert (not (conflicts name3 r14))) +(assert (not (conflicts name3 name11))) +(assert (not (conflicts name3 r13))) +(assert (not (conflicts name3 name10))) +(assert (not (conflicts name3 r16))) +(assert (not (conflicts name3 r15))) +(assert (not (conflicts name3 r18))) +(assert (not (conflicts name3 r17))) +(assert (not (conflicts name3 r19))) +(assert (not (conflicts name3 name6))) +(assert (not (conflicts name3 name5))) +(assert (not (conflicts name3 name4))) +(assert (not (conflicts name3 name3))) +(assert (not (conflicts name3 name9))) +(assert (not (conflicts name3 name8))) +(assert (not (conflicts name3 name7))) +(assert (not (conflicts name3 name2))) +(assert (not (conflicts name3 name1))) +(assert (not (conflicts name3 r0))) +(assert (not (conflicts name3 name0))) +(assert (not (conflicts name3 r1))) +(assert (not (conflicts name9 r2))) +(assert (not (conflicts name9 r3))) +(assert (not (conflicts name9 r4))) +(assert (not (conflicts name9 r5))) +(assert (not (conflicts name9 r6))) +(assert (not (conflicts name9 r7))) +(assert (not (conflicts name9 r8))) +(assert (not (conflicts name9 r9))) +(assert (not (conflicts name9 name19))) +(assert (not (conflicts name9 name18))) +(assert (not (conflicts name9 name17))) +(assert (not (conflicts name9 name16))) +(assert (not (conflicts name9 r10))) +(assert (not (conflicts name9 name15))) +(assert (not (conflicts name9 name14))) +(assert (not (conflicts name9 r12))) +(assert (not (conflicts name9 name13))) +(assert (not (conflicts name9 r11))) +(assert (not (conflicts name9 name12))) +(assert (not (conflicts name9 r14))) +(assert (not (conflicts name9 name11))) +(assert (not (conflicts name9 r13))) +(assert (not (conflicts name9 name10))) +(assert (not (conflicts name9 r16))) +(assert (not (conflicts name9 r15))) +(assert (not (conflicts name9 r18))) +(assert (not (conflicts name9 r17))) +(assert (not (conflicts name9 r19))) +(assert (not (conflicts name9 name6))) +(assert (not (conflicts name9 name5))) +(assert (not (conflicts name9 name4))) +(assert (not (conflicts name9 name3))) +(assert (not (conflicts name9 name9))) +(assert (not (conflicts name9 name8))) +(assert (not (conflicts name9 name7))) +(assert (not (conflicts name9 name2))) +(assert (not (conflicts name9 name1))) +(assert (not (conflicts name9 r0))) +(assert (not (conflicts name9 name0))) +(assert (not (conflicts name9 r1))) +(assert (not (conflicts name8 r2))) +(assert (not (conflicts name8 r3))) +(assert (not (conflicts name8 r4))) +(assert (not (conflicts name8 r5))) +(assert (not (conflicts name8 r6))) +(assert (not (conflicts name8 r7))) +(assert (not (conflicts name8 r8))) +(assert (not (conflicts name8 r9))) +(assert (not (conflicts name8 name19))) +(assert (not (conflicts name8 name18))) +(assert (not (conflicts name8 name17))) +(assert (not (conflicts name8 name16))) +(assert (not (conflicts name8 r10))) +(assert (not (conflicts name8 name15))) +(assert (not (conflicts name8 name14))) +(assert (not (conflicts name8 r12))) +(assert (not (conflicts name8 name13))) +(assert (not (conflicts name8 r11))) +(assert (not (conflicts name8 name12))) +(assert (not (conflicts name8 r14))) +(assert (not (conflicts name8 name11))) +(assert (not (conflicts name8 r13))) +(assert (not (conflicts name8 name10))) +(assert (not (conflicts name8 r16))) +(assert (not (conflicts name8 r15))) +(assert (not (conflicts name8 r18))) +(assert (not (conflicts name8 r17))) +(assert (not (conflicts name8 r19))) +(assert (not (conflicts name8 name6))) +(assert (not (conflicts name8 name5))) +(assert (not (conflicts name8 name4))) +(assert (not (conflicts name8 name3))) +(assert (not (conflicts name8 name9))) +(assert (not (conflicts name8 name8))) +(assert (not (conflicts name8 name7))) +(assert (not (conflicts name8 name2))) +(assert (not (conflicts name8 name1))) +(assert (not (conflicts name8 r0))) +(assert (not (conflicts name8 name0))) +(assert (not (conflicts name8 r1))) +(assert (not (conflicts name7 r2))) +(assert (not (conflicts name7 r3))) +(assert (not (conflicts name7 r4))) +(assert (not (conflicts name7 r5))) +(assert (not (conflicts name7 r6))) +(assert (not (conflicts name7 r7))) +(assert (not (conflicts name7 r8))) +(assert (not (conflicts name7 r9))) +(assert (not (conflicts name7 name19))) +(assert (not (conflicts name7 name18))) +(assert (not (conflicts name7 name17))) +(assert (not (conflicts name7 name16))) +(assert (not (conflicts name7 r10))) +(assert (not (conflicts name7 name15))) +(assert (not (conflicts name7 name14))) +(assert (not (conflicts name7 r12))) +(assert (not (conflicts name7 name13))) +(assert (not (conflicts name7 r11))) +(assert (not (conflicts name7 name12))) +(assert (not (conflicts name7 r14))) +(assert (not (conflicts name7 name11))) +(assert (not (conflicts name7 r13))) +(assert (not (conflicts name7 name10))) +(assert (not (conflicts name7 r16))) +(assert (not (conflicts name7 r15))) +(assert (not (conflicts name7 r18))) +(assert (not (conflicts name7 r17))) +(assert (not (conflicts name7 r19))) +(assert (not (conflicts name7 name6))) +(assert (not (conflicts name7 name5))) +(assert (not (conflicts name7 name4))) +(assert (not (conflicts name7 name3))) +(assert (not (conflicts name7 name9))) +(assert (not (conflicts name7 name8))) +(assert (not (conflicts name7 name7))) +(assert (not (conflicts name7 name2))) +(assert (not (conflicts name7 name1))) +(assert (not (conflicts name7 r0))) +(assert (not (conflicts name7 name0))) +(assert (not (conflicts name7 r1))) +(assert (not (conflicts name2 r2))) +(assert (not (conflicts name2 r3))) +(assert (not (conflicts name2 r4))) +(assert (not (conflicts name2 r5))) +(assert (not (conflicts name2 r6))) +(assert (not (conflicts name2 r7))) +(assert (not (conflicts name2 r8))) +(assert (not (conflicts name2 r9))) +(assert (not (conflicts name2 name19))) +(assert (not (conflicts name2 name18))) +(assert (not (conflicts name2 name17))) +(assert (not (conflicts name2 name16))) +(assert (not (conflicts name2 r10))) +(assert (not (conflicts name2 name15))) +(assert (not (conflicts name2 name14))) +(assert (not (conflicts name2 r12))) +(assert (not (conflicts name2 name13))) +(assert (not (conflicts name2 r11))) +(assert (not (conflicts name2 name12))) +(assert (not (conflicts name2 r14))) +(assert (not (conflicts name2 name11))) +(assert (not (conflicts name2 r13))) +(assert (not (conflicts name2 name10))) +(assert (not (conflicts name2 r16))) +(assert (not (conflicts name2 r15))) +(assert (not (conflicts name2 r18))) +(assert (not (conflicts name2 r17))) +(assert (not (conflicts name2 r19))) +(assert (not (conflicts name2 name6))) +(assert (not (conflicts name2 name5))) +(assert (not (conflicts name2 name4))) +(assert (not (conflicts name2 name3))) +(assert (not (conflicts name2 name9))) +(assert (not (conflicts name2 name8))) +(assert (not (conflicts name2 name7))) +(assert (not (conflicts name2 name2))) +(assert (not (conflicts name2 name1))) +(assert (not (conflicts name2 r0))) +(assert (not (conflicts name2 name0))) +(assert (not (conflicts name2 r1))) +(assert (not (conflicts name1 r2))) +(assert (not (conflicts name1 r3))) +(assert (not (conflicts name1 r4))) +(assert (not (conflicts name1 r5))) +(assert (not (conflicts name1 r6))) +(assert (not (conflicts name1 r7))) +(assert (not (conflicts name1 r8))) +(assert (not (conflicts name1 r9))) +(assert (not (conflicts name1 name19))) +(assert (not (conflicts name1 name18))) +(assert (not (conflicts name1 name17))) +(assert (not (conflicts name1 name16))) +(assert (not (conflicts name1 r10))) +(assert (not (conflicts name1 name15))) +(assert (not (conflicts name1 name14))) +(assert (not (conflicts name1 r12))) +(assert (not (conflicts name1 name13))) +(assert (not (conflicts name1 r11))) +(assert (not (conflicts name1 name12))) +(assert (not (conflicts name1 r14))) +(assert (not (conflicts name1 name11))) +(assert (not (conflicts name1 r13))) +(assert (not (conflicts name1 name10))) +(assert (not (conflicts name1 r16))) +(assert (not (conflicts name1 r15))) +(assert (not (conflicts name1 r18))) +(assert (not (conflicts name1 r17))) +(assert (not (conflicts name1 r19))) +(assert (not (conflicts name1 name6))) +(assert (not (conflicts name1 name5))) +(assert (not (conflicts name1 name4))) +(assert (not (conflicts name1 name3))) +(assert (not (conflicts name1 name9))) +(assert (not (conflicts name1 name8))) +(assert (not (conflicts name1 name7))) +(assert (not (conflicts name1 name2))) +(assert (not (conflicts name1 name1))) +(assert (not (conflicts name1 r0))) +(assert (not (conflicts name1 name0))) +(assert (not (conflicts name1 r1))) +(assert (not (conflicts r0 name19))) +(assert (not (conflicts r0 name18))) +(assert (not (conflicts r0 name17))) +(assert (not (conflicts r0 name16))) +(assert (not (conflicts r0 name15))) +(assert (not (conflicts r0 name14))) +(assert (not (conflicts r0 name13))) +(assert (not (conflicts r0 name12))) +(assert (not (conflicts r0 name11))) +(assert (not (conflicts r0 name10))) +(assert (not (conflicts r0 name6))) +(assert (not (conflicts r0 name5))) +(assert (not (conflicts r0 name4))) +(assert (not (conflicts r0 name3))) +(assert (not (conflicts r0 name9))) +(assert (not (conflicts r0 name8))) +(assert (not (conflicts r0 name7))) +(assert (not (conflicts r0 name2))) +(assert (not (conflicts r0 name1))) +(assert (not (conflicts r0 name0))) +(assert (not (conflicts name0 r2))) +(assert (not (conflicts name0 r3))) +(assert (not (conflicts name0 r4))) +(assert (not (conflicts name0 r5))) +(assert (not (conflicts name0 r6))) +(assert (not (conflicts name0 r7))) +(assert (not (conflicts name0 r8))) +(assert (not (conflicts name0 r9))) +(assert (not (conflicts name0 name19))) +(assert (not (conflicts name0 name18))) +(assert (not (conflicts name0 name17))) +(assert (not (conflicts name0 name16))) +(assert (not (conflicts name0 r10))) +(assert (not (conflicts name0 name15))) +(assert (not (conflicts name0 name14))) +(assert (not (conflicts name0 r12))) +(assert (not (conflicts name0 name13))) +(assert (not (conflicts name0 r11))) +(assert (not (conflicts name0 name12))) +(assert (not (conflicts name0 r14))) +(assert (not (conflicts name0 name11))) +(assert (not (conflicts name0 r13))) +(assert (not (conflicts name0 name10))) +(assert (not (conflicts name0 r16))) +(assert (not (conflicts name0 r15))) +(assert (not (conflicts name0 r18))) +(assert (not (conflicts name0 r17))) +(assert (not (conflicts name0 r19))) +(assert (not (conflicts name0 name6))) +(assert (not (conflicts name0 name5))) +(assert (not (conflicts name0 name4))) +(assert (not (conflicts name0 name3))) +(assert (not (conflicts name0 name9))) +(assert (not (conflicts name0 name8))) +(assert (not (conflicts name0 name7))) +(assert (not (conflicts name0 name2))) +(assert (not (conflicts name0 name1))) +(assert (not (conflicts name0 r0))) +(assert (not (conflicts name0 name0))) +(assert (not (conflicts name0 r1))) +(assert (not (conflicts r1 name19))) +(assert (not (conflicts r1 name18))) +(assert (not (conflicts r1 name17))) +(assert (not (conflicts r1 name16))) +(assert (not (conflicts r1 name15))) +(assert (not (conflicts r1 name14))) +(assert (not (conflicts r1 name13))) +(assert (not (conflicts r1 name12))) +(assert (not (conflicts r1 name11))) +(assert (not (conflicts r1 name10))) +(assert (not (conflicts r1 name6))) +(assert (not (conflicts r1 name5))) +(assert (not (conflicts r1 name4))) +(assert (not (conflicts r1 name3))) +(assert (not (conflicts r1 name9))) +(assert (not (conflicts r1 name8))) +(assert (not (conflicts r1 name7))) +(assert (not (conflicts r1 name2))) +(assert (not (conflicts r1 name1))) +(assert (not (conflicts r1 name0))) +(assert (not (partiallyRefines r2 name19))) +(assert (not (partiallyRefines r2 name18))) +(assert (not (partiallyRefines r2 name17))) +(assert (not (partiallyRefines r2 name16))) +(assert (not (partiallyRefines r2 name15))) +(assert (not (partiallyRefines r2 name14))) +(assert (not (partiallyRefines r2 name13))) +(assert (not (partiallyRefines r2 name12))) +(assert (not (partiallyRefines r2 name11))) +(assert (not (partiallyRefines r2 name10))) +(assert (not (partiallyRefines r2 name6))) +(assert (not (partiallyRefines r2 name5))) +(assert (not (partiallyRefines r2 name4))) +(assert (not (partiallyRefines r2 name3))) +(assert (not (partiallyRefines r2 name9))) +(assert (not (partiallyRefines r2 name8))) +(assert (not (partiallyRefines r2 name7))) +(assert (not (partiallyRefines r2 name2))) +(assert (not (partiallyRefines r2 name1))) +(assert (not (partiallyRefines r2 name0))) +(assert (not (partiallyRefines r3 name19))) +(assert (not (partiallyRefines r3 name18))) +(assert (not (partiallyRefines r3 name17))) +(assert (not (partiallyRefines r3 name16))) +(assert (not (partiallyRefines r3 name15))) +(assert (not (partiallyRefines r3 name14))) +(assert (not (partiallyRefines r3 name13))) +(assert (not (partiallyRefines r3 name12))) +(assert (not (partiallyRefines r3 name11))) +(assert (not (partiallyRefines r3 name10))) +(assert (not (partiallyRefines r3 name6))) +(assert (not (partiallyRefines r3 name5))) +(assert (not (partiallyRefines r3 name4))) +(assert (not (partiallyRefines r3 name3))) +(assert (not (partiallyRefines r3 name9))) +(assert (not (partiallyRefines r3 name8))) +(assert (not (partiallyRefines r3 name7))) +(assert (not (partiallyRefines r3 name2))) +(assert (not (partiallyRefines r3 name1))) +(assert (not (partiallyRefines r3 name0))) +(assert (not (partiallyRefines r4 name19))) +(assert (not (partiallyRefines r4 name18))) +(assert (not (partiallyRefines r4 name17))) +(assert (not (partiallyRefines r4 name16))) +(assert (not (partiallyRefines r4 name15))) +(assert (not (partiallyRefines r4 name14))) +(assert (not (partiallyRefines r4 name13))) +(assert (not (partiallyRefines r4 name12))) +(assert (not (partiallyRefines r4 name11))) +(assert (not (partiallyRefines r4 name10))) +(assert (not (partiallyRefines r4 name6))) +(assert (not (partiallyRefines r4 name5))) +(assert (not (partiallyRefines r4 name4))) +(assert (not (partiallyRefines r4 name3))) +(assert (not (partiallyRefines r4 name9))) +(assert (not (partiallyRefines r4 name8))) +(assert (not (partiallyRefines r4 name7))) +(assert (not (partiallyRefines r4 name2))) +(assert (not (partiallyRefines r4 name1))) +(assert (not (partiallyRefines r4 name0))) +(assert (not (partiallyRefines r5 name19))) +(assert (not (partiallyRefines r5 name18))) +(assert (not (partiallyRefines r5 name17))) +(assert (not (partiallyRefines r5 name16))) +(assert (not (partiallyRefines r5 name15))) +(assert (not (partiallyRefines r5 name14))) +(assert (not (partiallyRefines r5 name13))) +(assert (not (partiallyRefines r5 name12))) +(assert (not (partiallyRefines r5 name11))) +(assert (not (partiallyRefines r5 name10))) +(assert (not (partiallyRefines r5 name6))) +(assert (not (partiallyRefines r5 name5))) +(assert (not (partiallyRefines r5 name4))) +(assert (not (partiallyRefines r5 name3))) +(assert (not (partiallyRefines r5 name9))) +(assert (not (partiallyRefines r5 name8))) +(assert (not (partiallyRefines r5 name7))) +(assert (not (partiallyRefines r5 name2))) +(assert (not (partiallyRefines r5 name1))) +(assert (not (partiallyRefines r5 name0))) +(assert (not (partiallyRefines r6 name19))) +(assert (not (partiallyRefines r6 name18))) +(assert (not (partiallyRefines r6 name17))) +(assert (not (partiallyRefines r6 name16))) +(assert (not (partiallyRefines r6 name15))) +(assert (not (partiallyRefines r6 name14))) +(assert (not (partiallyRefines r6 name13))) +(assert (not (partiallyRefines r6 name12))) +(assert (not (partiallyRefines r6 name11))) +(assert (not (partiallyRefines r6 name10))) +(assert (not (partiallyRefines r6 name6))) +(assert (not (partiallyRefines r6 name5))) +(assert (not (partiallyRefines r6 name4))) +(assert (not (partiallyRefines r6 name3))) +(assert (not (partiallyRefines r6 name9))) +(assert (not (partiallyRefines r6 name8))) +(assert (not (partiallyRefines r6 name7))) +(assert (not (partiallyRefines r6 name2))) +(assert (not (partiallyRefines r6 name1))) +(assert (not (partiallyRefines r6 name0))) +(assert (not (partiallyRefines r7 name19))) +(assert (not (partiallyRefines r7 name18))) +(assert (not (partiallyRefines r7 name17))) +(assert (not (partiallyRefines r7 name16))) +(assert (not (partiallyRefines r7 name15))) +(assert (not (partiallyRefines r7 name14))) +(assert (not (partiallyRefines r7 name13))) +(assert (not (partiallyRefines r7 name12))) +(assert (not (partiallyRefines r7 name11))) +(assert (not (partiallyRefines r7 name10))) +(assert (not (partiallyRefines r7 name6))) +(assert (not (partiallyRefines r7 name5))) +(assert (not (partiallyRefines r7 name4))) +(assert (not (partiallyRefines r7 name3))) +(assert (not (partiallyRefines r7 name9))) +(assert (not (partiallyRefines r7 name8))) +(assert (not (partiallyRefines r7 name7))) +(assert (not (partiallyRefines r7 name2))) +(assert (not (partiallyRefines r7 name1))) +(assert (not (partiallyRefines r7 name0))) +(assert (not (partiallyRefines r8 name19))) +(assert (not (partiallyRefines r8 name18))) +(assert (not (partiallyRefines r8 name17))) +(assert (not (partiallyRefines r8 name16))) +(assert (not (partiallyRefines r8 name15))) +(assert (not (partiallyRefines r8 name14))) +(assert (not (partiallyRefines r8 name13))) +(assert (not (partiallyRefines r8 name12))) +(assert (not (partiallyRefines r8 name11))) +(assert (not (partiallyRefines r8 name10))) +(assert (not (partiallyRefines r8 name6))) +(assert (not (partiallyRefines r8 name5))) +(assert (not (partiallyRefines r8 name4))) +(assert (not (partiallyRefines r8 name3))) +(assert (not (partiallyRefines r8 name9))) +(assert (not (partiallyRefines r8 name8))) +(assert (not (partiallyRefines r8 name7))) +(assert (not (partiallyRefines r8 name2))) +(assert (not (partiallyRefines r8 name1))) +(assert (not (partiallyRefines r8 name0))) +(assert (not (partiallyRefines r9 name19))) +(assert (not (partiallyRefines r9 name18))) +(assert (not (partiallyRefines r9 name17))) +(assert (not (partiallyRefines r9 name16))) +(assert (not (partiallyRefines r9 name15))) +(assert (not (partiallyRefines r9 name14))) +(assert (not (partiallyRefines r9 name13))) +(assert (not (partiallyRefines r9 name12))) +(assert (not (partiallyRefines r9 name11))) +(assert (not (partiallyRefines r9 name10))) +(assert (not (partiallyRefines r9 name6))) +(assert (not (partiallyRefines r9 name5))) +(assert (not (partiallyRefines r9 name4))) +(assert (not (partiallyRefines r9 name3))) +(assert (not (partiallyRefines r9 name9))) +(assert (not (partiallyRefines r9 name8))) +(assert (not (partiallyRefines r9 name7))) +(assert (not (partiallyRefines r9 name2))) +(assert (not (partiallyRefines r9 name1))) +(assert (not (partiallyRefines r9 name0))) +(assert (not (partiallyRefines name19 r2))) +(assert (not (partiallyRefines name19 r3))) +(assert (not (partiallyRefines name19 r4))) +(assert (not (partiallyRefines name19 r5))) +(assert (not (partiallyRefines name19 r6))) +(assert (not (partiallyRefines name19 r7))) +(assert (not (partiallyRefines name19 r8))) +(assert (not (partiallyRefines name19 r9))) +(assert (not (partiallyRefines name19 name19))) +(assert (not (partiallyRefines name19 name18))) +(assert (not (partiallyRefines name19 name17))) +(assert (not (partiallyRefines name19 name16))) +(assert (not (partiallyRefines name19 r10))) +(assert (not (partiallyRefines name19 name15))) +(assert (not (partiallyRefines name19 name14))) +(assert (not (partiallyRefines name19 r12))) +(assert (not (partiallyRefines name19 name13))) +(assert (not (partiallyRefines name19 r11))) +(assert (not (partiallyRefines name19 name12))) +(assert (not (partiallyRefines name19 r14))) +(assert (not (partiallyRefines name19 name11))) +(assert (not (partiallyRefines name19 r13))) +(assert (not (partiallyRefines name19 name10))) +(assert (not (partiallyRefines name19 r16))) +(assert (not (partiallyRefines name19 r15))) +(assert (not (partiallyRefines name19 r18))) +(assert (not (partiallyRefines name19 r17))) +(assert (not (partiallyRefines name19 r19))) +(assert (not (partiallyRefines name19 name6))) +(assert (not (partiallyRefines name19 name5))) +(assert (not (partiallyRefines name19 name4))) +(assert (not (partiallyRefines name19 name3))) +(assert (not (partiallyRefines name19 name9))) +(assert (not (partiallyRefines name19 name8))) +(assert (not (partiallyRefines name19 name7))) +(assert (not (partiallyRefines name19 name2))) +(assert (not (partiallyRefines name19 name1))) +(assert (not (partiallyRefines name19 r0))) +(assert (not (partiallyRefines name19 name0))) +(assert (not (partiallyRefines name19 r1))) +(assert (not (partiallyRefines name18 r2))) +(assert (not (partiallyRefines name18 r3))) +(assert (not (partiallyRefines name18 r4))) +(assert (not (partiallyRefines name18 r5))) +(assert (not (partiallyRefines name18 r6))) +(assert (not (partiallyRefines name18 r7))) +(assert (not (partiallyRefines name18 r8))) +(assert (not (partiallyRefines name18 r9))) +(assert (not (partiallyRefines name18 name19))) +(assert (not (partiallyRefines name18 name18))) +(assert (not (partiallyRefines name18 name17))) +(assert (not (partiallyRefines name18 name16))) +(assert (not (partiallyRefines name18 r10))) +(assert (not (partiallyRefines name18 name15))) +(assert (not (partiallyRefines name18 name14))) +(assert (not (partiallyRefines name18 r12))) +(assert (not (partiallyRefines name18 name13))) +(assert (not (partiallyRefines name18 r11))) +(assert (not (partiallyRefines name18 name12))) +(assert (not (partiallyRefines name18 r14))) +(assert (not (partiallyRefines name18 name11))) +(assert (not (partiallyRefines name18 r13))) +(assert (not (partiallyRefines name18 name10))) +(assert (not (partiallyRefines name18 r16))) +(assert (not (partiallyRefines name18 r15))) +(assert (not (partiallyRefines name18 r18))) +(assert (not (partiallyRefines name18 r17))) +(assert (not (partiallyRefines name18 r19))) +(assert (not (partiallyRefines name18 name6))) +(assert (not (partiallyRefines name18 name5))) +(assert (not (partiallyRefines name18 name4))) +(assert (not (partiallyRefines name18 name3))) +(assert (not (partiallyRefines name18 name9))) +(assert (not (partiallyRefines name18 name8))) +(assert (not (partiallyRefines name18 name7))) +(assert (not (partiallyRefines name18 name2))) +(assert (not (partiallyRefines name18 name1))) +(assert (not (partiallyRefines name18 r0))) +(assert (not (partiallyRefines name18 name0))) +(assert (not (partiallyRefines name18 r1))) +(assert (not (partiallyRefines name17 r2))) +(assert (not (partiallyRefines name17 r3))) +(assert (not (partiallyRefines name17 r4))) +(assert (not (partiallyRefines name17 r5))) +(assert (not (partiallyRefines name17 r6))) +(assert (not (partiallyRefines name17 r7))) +(assert (not (partiallyRefines name17 r8))) +(assert (not (partiallyRefines name17 r9))) +(assert (not (partiallyRefines name17 name19))) +(assert (not (partiallyRefines name17 name18))) +(assert (not (partiallyRefines name17 name17))) +(assert (not (partiallyRefines name17 name16))) +(assert (not (partiallyRefines name17 r10))) +(assert (not (partiallyRefines name17 name15))) +(assert (not (partiallyRefines name17 name14))) +(assert (not (partiallyRefines name17 r12))) +(assert (not (partiallyRefines name17 name13))) +(assert (not (partiallyRefines name17 r11))) +(assert (not (partiallyRefines name17 name12))) +(assert (not (partiallyRefines name17 r14))) +(assert (not (partiallyRefines name17 name11))) +(assert (not (partiallyRefines name17 r13))) +(assert (not (partiallyRefines name17 name10))) +(assert (not (partiallyRefines name17 r16))) +(assert (not (partiallyRefines name17 r15))) +(assert (not (partiallyRefines name17 r18))) +(assert (not (partiallyRefines name17 r17))) +(assert (not (partiallyRefines name17 r19))) +(assert (not (partiallyRefines name17 name6))) +(assert (not (partiallyRefines name17 name5))) +(assert (not (partiallyRefines name17 name4))) +(assert (not (partiallyRefines name17 name3))) +(assert (not (partiallyRefines name17 name9))) +(assert (not (partiallyRefines name17 name8))) +(assert (not (partiallyRefines name17 name7))) +(assert (not (partiallyRefines name17 name2))) +(assert (not (partiallyRefines name17 name1))) +(assert (not (partiallyRefines name17 r0))) +(assert (not (partiallyRefines name17 name0))) +(assert (not (partiallyRefines name17 r1))) +(assert (not (partiallyRefines name16 r2))) +(assert (not (partiallyRefines name16 r3))) +(assert (not (partiallyRefines name16 r4))) +(assert (not (partiallyRefines name16 r5))) +(assert (not (partiallyRefines name16 r6))) +(assert (not (partiallyRefines name16 r7))) +(assert (not (partiallyRefines name16 r8))) +(assert (not (partiallyRefines name16 r9))) +(assert (not (partiallyRefines name16 name19))) +(assert (not (partiallyRefines name16 name18))) +(assert (not (partiallyRefines name16 name17))) +(assert (not (partiallyRefines name16 name16))) +(assert (not (partiallyRefines name16 r10))) +(assert (not (partiallyRefines name16 name15))) +(assert (not (partiallyRefines name16 name14))) +(assert (not (partiallyRefines name16 r12))) +(assert (not (partiallyRefines name16 name13))) +(assert (not (partiallyRefines name16 r11))) +(assert (not (partiallyRefines name16 name12))) +(assert (not (partiallyRefines name16 r14))) +(assert (not (partiallyRefines name16 name11))) +(assert (not (partiallyRefines name16 r13))) +(assert (not (partiallyRefines name16 name10))) +(assert (not (partiallyRefines name16 r16))) +(assert (not (partiallyRefines name16 r15))) +(assert (not (partiallyRefines name16 r18))) +(assert (not (partiallyRefines name16 r17))) +(assert (not (partiallyRefines name16 r19))) +(assert (not (partiallyRefines name16 name6))) +(assert (not (partiallyRefines name16 name5))) +(assert (not (partiallyRefines name16 name4))) +(assert (not (partiallyRefines name16 name3))) +(assert (not (partiallyRefines name16 name9))) +(assert (not (partiallyRefines name16 name8))) +(assert (not (partiallyRefines name16 name7))) +(assert (not (partiallyRefines name16 name2))) +(assert (not (partiallyRefines name16 name1))) +(assert (not (partiallyRefines name16 r0))) +(assert (not (partiallyRefines name16 name0))) +(assert (not (partiallyRefines name16 r1))) +(assert (not (partiallyRefines r10 name19))) +(assert (not (partiallyRefines r10 name18))) +(assert (not (partiallyRefines r10 name17))) +(assert (not (partiallyRefines r10 name16))) +(assert (not (partiallyRefines r10 name15))) +(assert (not (partiallyRefines r10 name14))) +(assert (not (partiallyRefines r10 name13))) +(assert (not (partiallyRefines r10 name12))) +(assert (not (partiallyRefines r10 name11))) +(assert (not (partiallyRefines r10 name10))) +(assert (not (partiallyRefines r10 name6))) +(assert (not (partiallyRefines r10 name5))) +(assert (not (partiallyRefines r10 name4))) +(assert (not (partiallyRefines r10 name3))) +(assert (not (partiallyRefines r10 name9))) +(assert (not (partiallyRefines r10 name8))) +(assert (not (partiallyRefines r10 name7))) +(assert (not (partiallyRefines r10 name2))) +(assert (not (partiallyRefines r10 name1))) +(assert (not (partiallyRefines r10 name0))) +(assert (not (partiallyRefines name15 r2))) +(assert (not (partiallyRefines name15 r3))) +(assert (not (partiallyRefines name15 r4))) +(assert (not (partiallyRefines name15 r5))) +(assert (not (partiallyRefines name15 r6))) +(assert (not (partiallyRefines name15 r7))) +(assert (not (partiallyRefines name15 r8))) +(assert (not (partiallyRefines name15 r9))) +(assert (not (partiallyRefines name15 name19))) +(assert (not (partiallyRefines name15 name18))) +(assert (not (partiallyRefines name15 name17))) +(assert (not (partiallyRefines name15 name16))) +(assert (not (partiallyRefines name15 r10))) +(assert (not (partiallyRefines name15 name15))) +(assert (not (partiallyRefines name15 name14))) +(assert (not (partiallyRefines name15 r12))) +(assert (not (partiallyRefines name15 name13))) +(assert (not (partiallyRefines name15 r11))) +(assert (not (partiallyRefines name15 name12))) +(assert (not (partiallyRefines name15 r14))) +(assert (not (partiallyRefines name15 name11))) +(assert (not (partiallyRefines name15 r13))) +(assert (not (partiallyRefines name15 name10))) +(assert (not (partiallyRefines name15 r16))) +(assert (not (partiallyRefines name15 r15))) +(assert (not (partiallyRefines name15 r18))) +(assert (not (partiallyRefines name15 r17))) +(assert (not (partiallyRefines name15 r19))) +(assert (not (partiallyRefines name15 name6))) +(assert (not (partiallyRefines name15 name5))) +(assert (not (partiallyRefines name15 name4))) +(assert (not (partiallyRefines name15 name3))) +(assert (not (partiallyRefines name15 name9))) +(assert (not (partiallyRefines name15 name8))) +(assert (not (partiallyRefines name15 name7))) +(assert (not (partiallyRefines name15 name2))) +(assert (not (partiallyRefines name15 name1))) +(assert (not (partiallyRefines name15 r0))) +(assert (not (partiallyRefines name15 name0))) +(assert (not (partiallyRefines name15 r1))) +(assert (not (partiallyRefines name14 r2))) +(assert (not (partiallyRefines name14 r3))) +(assert (not (partiallyRefines name14 r4))) +(assert (not (partiallyRefines name14 r5))) +(assert (not (partiallyRefines name14 r6))) +(assert (not (partiallyRefines name14 r7))) +(assert (not (partiallyRefines name14 r8))) +(assert (not (partiallyRefines name14 r9))) +(assert (not (partiallyRefines name14 name19))) +(assert (not (partiallyRefines name14 name18))) +(assert (not (partiallyRefines name14 name17))) +(assert (not (partiallyRefines name14 name16))) +(assert (not (partiallyRefines name14 r10))) +(assert (not (partiallyRefines name14 name15))) +(assert (not (partiallyRefines name14 name14))) +(assert (not (partiallyRefines name14 r12))) +(assert (not (partiallyRefines name14 name13))) +(assert (not (partiallyRefines name14 r11))) +(assert (not (partiallyRefines name14 name12))) +(assert (not (partiallyRefines name14 r14))) +(assert (not (partiallyRefines name14 name11))) +(assert (not (partiallyRefines name14 r13))) +(assert (not (partiallyRefines name14 name10))) +(assert (not (partiallyRefines name14 r16))) +(assert (not (partiallyRefines name14 r15))) +(assert (not (partiallyRefines name14 r18))) +(assert (not (partiallyRefines name14 r17))) +(assert (not (partiallyRefines name14 r19))) +(assert (not (partiallyRefines name14 name6))) +(assert (not (partiallyRefines name14 name5))) +(assert (not (partiallyRefines name14 name4))) +(assert (not (partiallyRefines name14 name3))) +(assert (not (partiallyRefines name14 name9))) +(assert (not (partiallyRefines name14 name8))) +(assert (not (partiallyRefines name14 name7))) +(assert (not (partiallyRefines name14 name2))) +(assert (not (partiallyRefines name14 name1))) +(assert (not (partiallyRefines name14 r0))) +(assert (not (partiallyRefines name14 name0))) +(assert (not (partiallyRefines name14 r1))) +(assert (not (partiallyRefines r12 name19))) +(assert (not (partiallyRefines r12 name18))) +(assert (not (partiallyRefines r12 name17))) +(assert (not (partiallyRefines r12 name16))) +(assert (not (partiallyRefines r12 name15))) +(assert (not (partiallyRefines r12 name14))) +(assert (not (partiallyRefines r12 name13))) +(assert (not (partiallyRefines r12 name12))) +(assert (not (partiallyRefines r12 name11))) +(assert (not (partiallyRefines r12 name10))) +(assert (not (partiallyRefines r12 name6))) +(assert (not (partiallyRefines r12 name5))) +(assert (not (partiallyRefines r12 name4))) +(assert (not (partiallyRefines r12 name3))) +(assert (not (partiallyRefines r12 name9))) +(assert (not (partiallyRefines r12 name8))) +(assert (not (partiallyRefines r12 name7))) +(assert (not (partiallyRefines r12 name2))) +(assert (not (partiallyRefines r12 name1))) +(assert (not (partiallyRefines r12 name0))) +(assert (not (partiallyRefines name13 r2))) +(assert (not (partiallyRefines name13 r3))) +(assert (not (partiallyRefines name13 r4))) +(assert (not (partiallyRefines name13 r5))) +(assert (not (partiallyRefines name13 r6))) +(assert (not (partiallyRefines name13 r7))) +(assert (not (partiallyRefines name13 r8))) +(assert (not (partiallyRefines name13 r9))) +(assert (not (partiallyRefines name13 name19))) +(assert (not (partiallyRefines name13 name18))) +(assert (not (partiallyRefines name13 name17))) +(assert (not (partiallyRefines name13 name16))) +(assert (not (partiallyRefines name13 r10))) +(assert (not (partiallyRefines name13 name15))) +(assert (not (partiallyRefines name13 name14))) +(assert (not (partiallyRefines name13 r12))) +(assert (not (partiallyRefines name13 name13))) +(assert (not (partiallyRefines name13 r11))) +(assert (not (partiallyRefines name13 name12))) +(assert (not (partiallyRefines name13 r14))) +(assert (not (partiallyRefines name13 name11))) +(assert (not (partiallyRefines name13 r13))) +(assert (not (partiallyRefines name13 name10))) +(assert (not (partiallyRefines name13 r16))) +(assert (not (partiallyRefines name13 r15))) +(assert (not (partiallyRefines name13 r18))) +(assert (not (partiallyRefines name13 r17))) +(assert (not (partiallyRefines name13 r19))) +(assert (not (partiallyRefines name13 name6))) +(assert (not (partiallyRefines name13 name5))) +(assert (not (partiallyRefines name13 name4))) +(assert (not (partiallyRefines name13 name3))) +(assert (not (partiallyRefines name13 name9))) +(assert (not (partiallyRefines name13 name8))) +(assert (not (partiallyRefines name13 name7))) +(assert (not (partiallyRefines name13 name2))) +(assert (not (partiallyRefines name13 name1))) +(assert (not (partiallyRefines name13 r0))) +(assert (not (partiallyRefines name13 name0))) +(assert (not (partiallyRefines name13 r1))) +(assert (not (partiallyRefines r11 name19))) +(assert (not (partiallyRefines r11 name18))) +(assert (not (partiallyRefines r11 name17))) +(assert (not (partiallyRefines r11 name16))) +(assert (not (partiallyRefines r11 name15))) +(assert (not (partiallyRefines r11 name14))) +(assert (not (partiallyRefines r11 name13))) +(assert (not (partiallyRefines r11 name12))) +(assert (not (partiallyRefines r11 name11))) +(assert (not (partiallyRefines r11 name10))) +(assert (not (partiallyRefines r11 name6))) +(assert (not (partiallyRefines r11 name5))) +(assert (not (partiallyRefines r11 name4))) +(assert (not (partiallyRefines r11 name3))) +(assert (not (partiallyRefines r11 name9))) +(assert (not (partiallyRefines r11 name8))) +(assert (not (partiallyRefines r11 name7))) +(assert (not (partiallyRefines r11 name2))) +(assert (not (partiallyRefines r11 name1))) +(assert (not (partiallyRefines r11 name0))) +(assert (not (partiallyRefines name12 r2))) +(assert (not (partiallyRefines name12 r3))) +(assert (not (partiallyRefines name12 r4))) +(assert (not (partiallyRefines name12 r5))) +(assert (not (partiallyRefines name12 r6))) +(assert (not (partiallyRefines name12 r7))) +(assert (not (partiallyRefines name12 r8))) +(assert (not (partiallyRefines name12 r9))) +(assert (not (partiallyRefines name12 name19))) +(assert (not (partiallyRefines name12 name18))) +(assert (not (partiallyRefines name12 name17))) +(assert (not (partiallyRefines name12 name16))) +(assert (not (partiallyRefines name12 r10))) +(assert (not (partiallyRefines name12 name15))) +(assert (not (partiallyRefines name12 name14))) +(assert (not (partiallyRefines name12 r12))) +(assert (not (partiallyRefines name12 name13))) +(assert (not (partiallyRefines name12 r11))) +(assert (not (partiallyRefines name12 name12))) +(assert (not (partiallyRefines name12 r14))) +(assert (not (partiallyRefines name12 name11))) +(assert (not (partiallyRefines name12 r13))) +(assert (not (partiallyRefines name12 name10))) +(assert (not (partiallyRefines name12 r16))) +(assert (not (partiallyRefines name12 r15))) +(assert (not (partiallyRefines name12 r18))) +(assert (not (partiallyRefines name12 r17))) +(assert (not (partiallyRefines name12 r19))) +(assert (not (partiallyRefines name12 name6))) +(assert (not (partiallyRefines name12 name5))) +(assert (not (partiallyRefines name12 name4))) +(assert (not (partiallyRefines name12 name3))) +(assert (not (partiallyRefines name12 name9))) +(assert (not (partiallyRefines name12 name8))) +(assert (not (partiallyRefines name12 name7))) +(assert (not (partiallyRefines name12 name2))) +(assert (not (partiallyRefines name12 name1))) +(assert (not (partiallyRefines name12 r0))) +(assert (not (partiallyRefines name12 name0))) +(assert (not (partiallyRefines name12 r1))) +(assert (not (partiallyRefines r14 name19))) +(assert (not (partiallyRefines r14 name18))) +(assert (not (partiallyRefines r14 name17))) +(assert (not (partiallyRefines r14 name16))) +(assert (not (partiallyRefines r14 name15))) +(assert (not (partiallyRefines r14 name14))) +(assert (not (partiallyRefines r14 name13))) +(assert (not (partiallyRefines r14 name12))) +(assert (not (partiallyRefines r14 name11))) +(assert (not (partiallyRefines r14 name10))) +(assert (not (partiallyRefines r14 name6))) +(assert (not (partiallyRefines r14 name5))) +(assert (not (partiallyRefines r14 name4))) +(assert (not (partiallyRefines r14 name3))) +(assert (not (partiallyRefines r14 name9))) +(assert (not (partiallyRefines r14 name8))) +(assert (not (partiallyRefines r14 name7))) +(assert (not (partiallyRefines r14 name2))) +(assert (not (partiallyRefines r14 name1))) +(assert (not (partiallyRefines r14 name0))) +(assert (not (partiallyRefines name11 r2))) +(assert (not (partiallyRefines name11 r3))) +(assert (not (partiallyRefines name11 r4))) +(assert (not (partiallyRefines name11 r5))) +(assert (not (partiallyRefines name11 r6))) +(assert (not (partiallyRefines name11 r7))) +(assert (not (partiallyRefines name11 r8))) +(assert (not (partiallyRefines name11 r9))) +(assert (not (partiallyRefines name11 name19))) +(assert (not (partiallyRefines name11 name18))) +(assert (not (partiallyRefines name11 name17))) +(assert (not (partiallyRefines name11 name16))) +(assert (not (partiallyRefines name11 r10))) +(assert (not (partiallyRefines name11 name15))) +(assert (not (partiallyRefines name11 name14))) +(assert (not (partiallyRefines name11 r12))) +(assert (not (partiallyRefines name11 name13))) +(assert (not (partiallyRefines name11 r11))) +(assert (not (partiallyRefines name11 name12))) +(assert (not (partiallyRefines name11 r14))) +(assert (not (partiallyRefines name11 name11))) +(assert (not (partiallyRefines name11 r13))) +(assert (not (partiallyRefines name11 name10))) +(assert (not (partiallyRefines name11 r16))) +(assert (not (partiallyRefines name11 r15))) +(assert (not (partiallyRefines name11 r18))) +(assert (not (partiallyRefines name11 r17))) +(assert (not (partiallyRefines name11 r19))) +(assert (not (partiallyRefines name11 name6))) +(assert (not (partiallyRefines name11 name5))) +(assert (not (partiallyRefines name11 name4))) +(assert (not (partiallyRefines name11 name3))) +(assert (not (partiallyRefines name11 name9))) +(assert (not (partiallyRefines name11 name8))) +(assert (not (partiallyRefines name11 name7))) +(assert (not (partiallyRefines name11 name2))) +(assert (not (partiallyRefines name11 name1))) +(assert (not (partiallyRefines name11 r0))) +(assert (not (partiallyRefines name11 name0))) +(assert (not (partiallyRefines name11 r1))) +(assert (not (partiallyRefines r13 name19))) +(assert (not (partiallyRefines r13 name18))) +(assert (not (partiallyRefines r13 name17))) +(assert (not (partiallyRefines r13 name16))) +(assert (not (partiallyRefines r13 name15))) +(assert (not (partiallyRefines r13 name14))) +(assert (not (partiallyRefines r13 name13))) +(assert (not (partiallyRefines r13 name12))) +(assert (not (partiallyRefines r13 name11))) +(assert (not (partiallyRefines r13 name10))) +(assert (not (partiallyRefines r13 name6))) +(assert (not (partiallyRefines r13 name5))) +(assert (not (partiallyRefines r13 name4))) +(assert (not (partiallyRefines r13 name3))) +(assert (not (partiallyRefines r13 name9))) +(assert (not (partiallyRefines r13 name8))) +(assert (not (partiallyRefines r13 name7))) +(assert (not (partiallyRefines r13 name2))) +(assert (not (partiallyRefines r13 name1))) +(assert (not (partiallyRefines r13 name0))) +(assert (not (partiallyRefines name10 r2))) +(assert (not (partiallyRefines name10 r3))) +(assert (not (partiallyRefines name10 r4))) +(assert (not (partiallyRefines name10 r5))) +(assert (not (partiallyRefines name10 r6))) +(assert (not (partiallyRefines name10 r7))) +(assert (not (partiallyRefines name10 r8))) +(assert (not (partiallyRefines name10 r9))) +(assert (not (partiallyRefines name10 name19))) +(assert (not (partiallyRefines name10 name18))) +(assert (not (partiallyRefines name10 name17))) +(assert (not (partiallyRefines name10 name16))) +(assert (not (partiallyRefines name10 r10))) +(assert (not (partiallyRefines name10 name15))) +(assert (not (partiallyRefines name10 name14))) +(assert (not (partiallyRefines name10 r12))) +(assert (not (partiallyRefines name10 name13))) +(assert (not (partiallyRefines name10 r11))) +(assert (not (partiallyRefines name10 name12))) +(assert (not (partiallyRefines name10 r14))) +(assert (not (partiallyRefines name10 name11))) +(assert (not (partiallyRefines name10 r13))) +(assert (not (partiallyRefines name10 name10))) +(assert (not (partiallyRefines name10 r16))) +(assert (not (partiallyRefines name10 r15))) +(assert (not (partiallyRefines name10 r18))) +(assert (not (partiallyRefines name10 r17))) +(assert (not (partiallyRefines name10 r19))) +(assert (not (partiallyRefines name10 name6))) +(assert (not (partiallyRefines name10 name5))) +(assert (not (partiallyRefines name10 name4))) +(assert (not (partiallyRefines name10 name3))) +(assert (not (partiallyRefines name10 name9))) +(assert (not (partiallyRefines name10 name8))) +(assert (not (partiallyRefines name10 name7))) +(assert (not (partiallyRefines name10 name2))) +(assert (not (partiallyRefines name10 name1))) +(assert (not (partiallyRefines name10 r0))) +(assert (not (partiallyRefines name10 name0))) +(assert (not (partiallyRefines name10 r1))) +(assert (not (partiallyRefines r16 name19))) +(assert (not (partiallyRefines r16 name18))) +(assert (not (partiallyRefines r16 name17))) +(assert (not (partiallyRefines r16 name16))) +(assert (not (partiallyRefines r16 name15))) +(assert (not (partiallyRefines r16 name14))) +(assert (not (partiallyRefines r16 name13))) +(assert (not (partiallyRefines r16 name12))) +(assert (not (partiallyRefines r16 name11))) +(assert (not (partiallyRefines r16 name10))) +(assert (not (partiallyRefines r16 name6))) +(assert (not (partiallyRefines r16 name5))) +(assert (not (partiallyRefines r16 name4))) +(assert (not (partiallyRefines r16 name3))) +(assert (not (partiallyRefines r16 name9))) +(assert (not (partiallyRefines r16 name8))) +(assert (not (partiallyRefines r16 name7))) +(assert (not (partiallyRefines r16 name2))) +(assert (not (partiallyRefines r16 name1))) +(assert (not (partiallyRefines r16 name0))) +(assert (not (partiallyRefines r15 name19))) +(assert (not (partiallyRefines r15 name18))) +(assert (not (partiallyRefines r15 name17))) +(assert (not (partiallyRefines r15 name16))) +(assert (not (partiallyRefines r15 name15))) +(assert (not (partiallyRefines r15 name14))) +(assert (not (partiallyRefines r15 name13))) +(assert (not (partiallyRefines r15 name12))) +(assert (not (partiallyRefines r15 name11))) +(assert (not (partiallyRefines r15 name10))) +(assert (not (partiallyRefines r15 name6))) +(assert (not (partiallyRefines r15 name5))) +(assert (not (partiallyRefines r15 name4))) +(assert (not (partiallyRefines r15 name3))) +(assert (not (partiallyRefines r15 name9))) +(assert (not (partiallyRefines r15 name8))) +(assert (not (partiallyRefines r15 name7))) +(assert (not (partiallyRefines r15 name2))) +(assert (not (partiallyRefines r15 name1))) +(assert (not (partiallyRefines r15 name0))) +(assert (not (partiallyRefines r18 name19))) +(assert (not (partiallyRefines r18 name18))) +(assert (not (partiallyRefines r18 name17))) +(assert (not (partiallyRefines r18 name16))) +(assert (not (partiallyRefines r18 name15))) +(assert (not (partiallyRefines r18 name14))) +(assert (not (partiallyRefines r18 name13))) +(assert (not (partiallyRefines r18 name12))) +(assert (not (partiallyRefines r18 name11))) +(assert (not (partiallyRefines r18 name10))) +(assert (not (partiallyRefines r18 name6))) +(assert (not (partiallyRefines r18 name5))) +(assert (not (partiallyRefines r18 name4))) +(assert (not (partiallyRefines r18 name3))) +(assert (not (partiallyRefines r18 name9))) +(assert (not (partiallyRefines r18 name8))) +(assert (not (partiallyRefines r18 name7))) +(assert (not (partiallyRefines r18 name2))) +(assert (not (partiallyRefines r18 name1))) +(assert (not (partiallyRefines r18 name0))) +(assert (not (partiallyRefines r17 name19))) +(assert (not (partiallyRefines r17 name18))) +(assert (not (partiallyRefines r17 name17))) +(assert (not (partiallyRefines r17 name16))) +(assert (not (partiallyRefines r17 name15))) +(assert (not (partiallyRefines r17 name14))) +(assert (not (partiallyRefines r17 name13))) +(assert (not (partiallyRefines r17 name12))) +(assert (not (partiallyRefines r17 name11))) +(assert (not (partiallyRefines r17 name10))) +(assert (not (partiallyRefines r17 name6))) +(assert (not (partiallyRefines r17 name5))) +(assert (not (partiallyRefines r17 name4))) +(assert (not (partiallyRefines r17 name3))) +(assert (not (partiallyRefines r17 name9))) +(assert (not (partiallyRefines r17 name8))) +(assert (not (partiallyRefines r17 name7))) +(assert (not (partiallyRefines r17 name2))) +(assert (not (partiallyRefines r17 name1))) +(assert (not (partiallyRefines r17 name0))) +(assert (not (partiallyRefines r19 name19))) +(assert (not (partiallyRefines r19 name18))) +(assert (not (partiallyRefines r19 name17))) +(assert (not (partiallyRefines r19 name16))) +(assert (not (partiallyRefines r19 name15))) +(assert (not (partiallyRefines r19 name14))) +(assert (not (partiallyRefines r19 name13))) +(assert (not (partiallyRefines r19 name12))) +(assert (not (partiallyRefines r19 name11))) +(assert (not (partiallyRefines r19 name10))) +(assert (not (partiallyRefines r19 name6))) +(assert (not (partiallyRefines r19 name5))) +(assert (not (partiallyRefines r19 name4))) +(assert (not (partiallyRefines r19 name3))) +(assert (not (partiallyRefines r19 name9))) +(assert (not (partiallyRefines r19 name8))) +(assert (not (partiallyRefines r19 name7))) +(assert (not (partiallyRefines r19 name2))) +(assert (not (partiallyRefines r19 name1))) +(assert (not (partiallyRefines r19 name0))) +(assert (not (partiallyRefines name6 r2))) +(assert (not (partiallyRefines name6 r3))) +(assert (not (partiallyRefines name6 r4))) +(assert (not (partiallyRefines name6 r5))) +(assert (not (partiallyRefines name6 r6))) +(assert (not (partiallyRefines name6 r7))) +(assert (not (partiallyRefines name6 r8))) +(assert (not (partiallyRefines name6 r9))) +(assert (not (partiallyRefines name6 name19))) +(assert (not (partiallyRefines name6 name18))) +(assert (not (partiallyRefines name6 name17))) +(assert (not (partiallyRefines name6 name16))) +(assert (not (partiallyRefines name6 r10))) +(assert (not (partiallyRefines name6 name15))) +(assert (not (partiallyRefines name6 name14))) +(assert (not (partiallyRefines name6 r12))) +(assert (not (partiallyRefines name6 name13))) +(assert (not (partiallyRefines name6 r11))) +(assert (not (partiallyRefines name6 name12))) +(assert (not (partiallyRefines name6 r14))) +(assert (not (partiallyRefines name6 name11))) +(assert (not (partiallyRefines name6 r13))) +(assert (not (partiallyRefines name6 name10))) +(assert (not (partiallyRefines name6 r16))) +(assert (not (partiallyRefines name6 r15))) +(assert (not (partiallyRefines name6 r18))) +(assert (not (partiallyRefines name6 r17))) +(assert (not (partiallyRefines name6 r19))) +(assert (not (partiallyRefines name6 name6))) +(assert (not (partiallyRefines name6 name5))) +(assert (not (partiallyRefines name6 name4))) +(assert (not (partiallyRefines name6 name3))) +(assert (not (partiallyRefines name6 name9))) +(assert (not (partiallyRefines name6 name8))) +(assert (not (partiallyRefines name6 name7))) +(assert (not (partiallyRefines name6 name2))) +(assert (not (partiallyRefines name6 name1))) +(assert (not (partiallyRefines name6 r0))) +(assert (not (partiallyRefines name6 name0))) +(assert (not (partiallyRefines name6 r1))) +(assert (not (partiallyRefines name5 r2))) +(assert (not (partiallyRefines name5 r3))) +(assert (not (partiallyRefines name5 r4))) +(assert (not (partiallyRefines name5 r5))) +(assert (not (partiallyRefines name5 r6))) +(assert (not (partiallyRefines name5 r7))) +(assert (not (partiallyRefines name5 r8))) +(assert (not (partiallyRefines name5 r9))) +(assert (not (partiallyRefines name5 name19))) +(assert (not (partiallyRefines name5 name18))) +(assert (not (partiallyRefines name5 name17))) +(assert (not (partiallyRefines name5 name16))) +(assert (not (partiallyRefines name5 r10))) +(assert (not (partiallyRefines name5 name15))) +(assert (not (partiallyRefines name5 name14))) +(assert (not (partiallyRefines name5 r12))) +(assert (not (partiallyRefines name5 name13))) +(assert (not (partiallyRefines name5 r11))) +(assert (not (partiallyRefines name5 name12))) +(assert (not (partiallyRefines name5 r14))) +(assert (not (partiallyRefines name5 name11))) +(assert (not (partiallyRefines name5 r13))) +(assert (not (partiallyRefines name5 name10))) +(assert (not (partiallyRefines name5 r16))) +(assert (not (partiallyRefines name5 r15))) +(assert (not (partiallyRefines name5 r18))) +(assert (not (partiallyRefines name5 r17))) +(assert (not (partiallyRefines name5 r19))) +(assert (not (partiallyRefines name5 name6))) +(assert (not (partiallyRefines name5 name5))) +(assert (not (partiallyRefines name5 name4))) +(assert (not (partiallyRefines name5 name3))) +(assert (not (partiallyRefines name5 name9))) +(assert (not (partiallyRefines name5 name8))) +(assert (not (partiallyRefines name5 name7))) +(assert (not (partiallyRefines name5 name2))) +(assert (not (partiallyRefines name5 name1))) +(assert (not (partiallyRefines name5 r0))) +(assert (not (partiallyRefines name5 name0))) +(assert (not (partiallyRefines name5 r1))) +(assert (not (partiallyRefines name4 r2))) +(assert (not (partiallyRefines name4 r3))) +(assert (not (partiallyRefines name4 r4))) +(assert (not (partiallyRefines name4 r5))) +(assert (not (partiallyRefines name4 r6))) +(assert (not (partiallyRefines name4 r7))) +(assert (not (partiallyRefines name4 r8))) +(assert (not (partiallyRefines name4 r9))) +(assert (not (partiallyRefines name4 name19))) +(assert (not (partiallyRefines name4 name18))) +(assert (not (partiallyRefines name4 name17))) +(assert (not (partiallyRefines name4 name16))) +(assert (not (partiallyRefines name4 r10))) +(assert (not (partiallyRefines name4 name15))) +(assert (not (partiallyRefines name4 name14))) +(assert (not (partiallyRefines name4 r12))) +(assert (not (partiallyRefines name4 name13))) +(assert (not (partiallyRefines name4 r11))) +(assert (not (partiallyRefines name4 name12))) +(assert (not (partiallyRefines name4 r14))) +(assert (not (partiallyRefines name4 name11))) +(assert (not (partiallyRefines name4 r13))) +(assert (not (partiallyRefines name4 name10))) +(assert (not (partiallyRefines name4 r16))) +(assert (not (partiallyRefines name4 r15))) +(assert (not (partiallyRefines name4 r18))) +(assert (not (partiallyRefines name4 r17))) +(assert (not (partiallyRefines name4 r19))) +(assert (not (partiallyRefines name4 name6))) +(assert (not (partiallyRefines name4 name5))) +(assert (not (partiallyRefines name4 name4))) +(assert (not (partiallyRefines name4 name3))) +(assert (not (partiallyRefines name4 name9))) +(assert (not (partiallyRefines name4 name8))) +(assert (not (partiallyRefines name4 name7))) +(assert (not (partiallyRefines name4 name2))) +(assert (not (partiallyRefines name4 name1))) +(assert (not (partiallyRefines name4 r0))) +(assert (not (partiallyRefines name4 name0))) +(assert (not (partiallyRefines name4 r1))) +(assert (not (partiallyRefines name3 r2))) +(assert (not (partiallyRefines name3 r3))) +(assert (not (partiallyRefines name3 r4))) +(assert (not (partiallyRefines name3 r5))) +(assert (not (partiallyRefines name3 r6))) +(assert (not (partiallyRefines name3 r7))) +(assert (not (partiallyRefines name3 r8))) +(assert (not (partiallyRefines name3 r9))) +(assert (not (partiallyRefines name3 name19))) +(assert (not (partiallyRefines name3 name18))) +(assert (not (partiallyRefines name3 name17))) +(assert (not (partiallyRefines name3 name16))) +(assert (not (partiallyRefines name3 r10))) +(assert (not (partiallyRefines name3 name15))) +(assert (not (partiallyRefines name3 name14))) +(assert (not (partiallyRefines name3 r12))) +(assert (not (partiallyRefines name3 name13))) +(assert (not (partiallyRefines name3 r11))) +(assert (not (partiallyRefines name3 name12))) +(assert (not (partiallyRefines name3 r14))) +(assert (not (partiallyRefines name3 name11))) +(assert (not (partiallyRefines name3 r13))) +(assert (not (partiallyRefines name3 name10))) +(assert (not (partiallyRefines name3 r16))) +(assert (not (partiallyRefines name3 r15))) +(assert (not (partiallyRefines name3 r18))) +(assert (not (partiallyRefines name3 r17))) +(assert (not (partiallyRefines name3 r19))) +(assert (not (partiallyRefines name3 name6))) +(assert (not (partiallyRefines name3 name5))) +(assert (not (partiallyRefines name3 name4))) +(assert (not (partiallyRefines name3 name3))) +(assert (not (partiallyRefines name3 name9))) +(assert (not (partiallyRefines name3 name8))) +(assert (not (partiallyRefines name3 name7))) +(assert (not (partiallyRefines name3 name2))) +(assert (not (partiallyRefines name3 name1))) +(assert (not (partiallyRefines name3 r0))) +(assert (not (partiallyRefines name3 name0))) +(assert (not (partiallyRefines name3 r1))) +(assert (not (partiallyRefines name9 r2))) +(assert (not (partiallyRefines name9 r3))) +(assert (not (partiallyRefines name9 r4))) +(assert (not (partiallyRefines name9 r5))) +(assert (not (partiallyRefines name9 r6))) +(assert (not (partiallyRefines name9 r7))) +(assert (not (partiallyRefines name9 r8))) +(assert (not (partiallyRefines name9 r9))) +(assert (not (partiallyRefines name9 name19))) +(assert (not (partiallyRefines name9 name18))) +(assert (not (partiallyRefines name9 name17))) +(assert (not (partiallyRefines name9 name16))) +(assert (not (partiallyRefines name9 r10))) +(assert (not (partiallyRefines name9 name15))) +(assert (not (partiallyRefines name9 name14))) +(assert (not (partiallyRefines name9 r12))) +(assert (not (partiallyRefines name9 name13))) +(assert (not (partiallyRefines name9 r11))) +(assert (not (partiallyRefines name9 name12))) +(assert (not (partiallyRefines name9 r14))) +(assert (not (partiallyRefines name9 name11))) +(assert (not (partiallyRefines name9 r13))) +(assert (not (partiallyRefines name9 name10))) +(assert (not (partiallyRefines name9 r16))) +(assert (not (partiallyRefines name9 r15))) +(assert (not (partiallyRefines name9 r18))) +(assert (not (partiallyRefines name9 r17))) +(assert (not (partiallyRefines name9 r19))) +(assert (not (partiallyRefines name9 name6))) +(assert (not (partiallyRefines name9 name5))) +(assert (not (partiallyRefines name9 name4))) +(assert (not (partiallyRefines name9 name3))) +(assert (not (partiallyRefines name9 name9))) +(assert (not (partiallyRefines name9 name8))) +(assert (not (partiallyRefines name9 name7))) +(assert (not (partiallyRefines name9 name2))) +(assert (not (partiallyRefines name9 name1))) +(assert (not (partiallyRefines name9 r0))) +(assert (not (partiallyRefines name9 name0))) +(assert (not (partiallyRefines name9 r1))) +(assert (not (partiallyRefines name8 r2))) +(assert (not (partiallyRefines name8 r3))) +(assert (not (partiallyRefines name8 r4))) +(assert (not (partiallyRefines name8 r5))) +(assert (not (partiallyRefines name8 r6))) +(assert (not (partiallyRefines name8 r7))) +(assert (not (partiallyRefines name8 r8))) +(assert (not (partiallyRefines name8 r9))) +(assert (not (partiallyRefines name8 name19))) +(assert (not (partiallyRefines name8 name18))) +(assert (not (partiallyRefines name8 name17))) +(assert (not (partiallyRefines name8 name16))) +(assert (not (partiallyRefines name8 r10))) +(assert (not (partiallyRefines name8 name15))) +(assert (not (partiallyRefines name8 name14))) +(assert (not (partiallyRefines name8 r12))) +(assert (not (partiallyRefines name8 name13))) +(assert (not (partiallyRefines name8 r11))) +(assert (not (partiallyRefines name8 name12))) +(assert (not (partiallyRefines name8 r14))) +(assert (not (partiallyRefines name8 name11))) +(assert (not (partiallyRefines name8 r13))) +(assert (not (partiallyRefines name8 name10))) +(assert (not (partiallyRefines name8 r16))) +(assert (not (partiallyRefines name8 r15))) +(assert (not (partiallyRefines name8 r18))) +(assert (not (partiallyRefines name8 r17))) +(assert (not (partiallyRefines name8 r19))) +(assert (not (partiallyRefines name8 name6))) +(assert (not (partiallyRefines name8 name5))) +(assert (not (partiallyRefines name8 name4))) +(assert (not (partiallyRefines name8 name3))) +(assert (not (partiallyRefines name8 name9))) +(assert (not (partiallyRefines name8 name8))) +(assert (not (partiallyRefines name8 name7))) +(assert (not (partiallyRefines name8 name2))) +(assert (not (partiallyRefines name8 name1))) +(assert (not (partiallyRefines name8 r0))) +(assert (not (partiallyRefines name8 name0))) +(assert (not (partiallyRefines name8 r1))) +(assert (not (partiallyRefines name7 r2))) +(assert (not (partiallyRefines name7 r3))) +(assert (not (partiallyRefines name7 r4))) +(assert (not (partiallyRefines name7 r5))) +(assert (not (partiallyRefines name7 r6))) +(assert (not (partiallyRefines name7 r7))) +(assert (not (partiallyRefines name7 r8))) +(assert (not (partiallyRefines name7 r9))) +(assert (not (partiallyRefines name7 name19))) +(assert (not (partiallyRefines name7 name18))) +(assert (not (partiallyRefines name7 name17))) +(assert (not (partiallyRefines name7 name16))) +(assert (not (partiallyRefines name7 r10))) +(assert (not (partiallyRefines name7 name15))) +(assert (not (partiallyRefines name7 name14))) +(assert (not (partiallyRefines name7 r12))) +(assert (not (partiallyRefines name7 name13))) +(assert (not (partiallyRefines name7 r11))) +(assert (not (partiallyRefines name7 name12))) +(assert (not (partiallyRefines name7 r14))) +(assert (not (partiallyRefines name7 name11))) +(assert (not (partiallyRefines name7 r13))) +(assert (not (partiallyRefines name7 name10))) +(assert (not (partiallyRefines name7 r16))) +(assert (not (partiallyRefines name7 r15))) +(assert (not (partiallyRefines name7 r18))) +(assert (not (partiallyRefines name7 r17))) +(assert (not (partiallyRefines name7 r19))) +(assert (not (partiallyRefines name7 name6))) +(assert (not (partiallyRefines name7 name5))) +(assert (not (partiallyRefines name7 name4))) +(assert (not (partiallyRefines name7 name3))) +(assert (not (partiallyRefines name7 name9))) +(assert (not (partiallyRefines name7 name8))) +(assert (not (partiallyRefines name7 name7))) +(assert (not (partiallyRefines name7 name2))) +(assert (not (partiallyRefines name7 name1))) +(assert (not (partiallyRefines name7 r0))) +(assert (not (partiallyRefines name7 name0))) +(assert (not (partiallyRefines name7 r1))) +(assert (not (partiallyRefines name2 r2))) +(assert (not (partiallyRefines name2 r3))) +(assert (not (partiallyRefines name2 r4))) +(assert (not (partiallyRefines name2 r5))) +(assert (not (partiallyRefines name2 r6))) +(assert (not (partiallyRefines name2 r7))) +(assert (not (partiallyRefines name2 r8))) +(assert (not (partiallyRefines name2 r9))) +(assert (not (partiallyRefines name2 name19))) +(assert (not (partiallyRefines name2 name18))) +(assert (not (partiallyRefines name2 name17))) +(assert (not (partiallyRefines name2 name16))) +(assert (not (partiallyRefines name2 r10))) +(assert (not (partiallyRefines name2 name15))) +(assert (not (partiallyRefines name2 name14))) +(assert (not (partiallyRefines name2 r12))) +(assert (not (partiallyRefines name2 name13))) +(assert (not (partiallyRefines name2 r11))) +(assert (not (partiallyRefines name2 name12))) +(assert (not (partiallyRefines name2 r14))) +(assert (not (partiallyRefines name2 name11))) +(assert (not (partiallyRefines name2 r13))) +(assert (not (partiallyRefines name2 name10))) +(assert (not (partiallyRefines name2 r16))) +(assert (not (partiallyRefines name2 r15))) +(assert (not (partiallyRefines name2 r18))) +(assert (not (partiallyRefines name2 r17))) +(assert (not (partiallyRefines name2 r19))) +(assert (not (partiallyRefines name2 name6))) +(assert (not (partiallyRefines name2 name5))) +(assert (not (partiallyRefines name2 name4))) +(assert (not (partiallyRefines name2 name3))) +(assert (not (partiallyRefines name2 name9))) +(assert (not (partiallyRefines name2 name8))) +(assert (not (partiallyRefines name2 name7))) +(assert (not (partiallyRefines name2 name2))) +(assert (not (partiallyRefines name2 name1))) +(assert (not (partiallyRefines name2 r0))) +(assert (not (partiallyRefines name2 name0))) +(assert (not (partiallyRefines name2 r1))) +(assert (not (partiallyRefines name1 r2))) +(assert (not (partiallyRefines name1 r3))) +(assert (not (partiallyRefines name1 r4))) +(assert (not (partiallyRefines name1 r5))) +(assert (not (partiallyRefines name1 r6))) +(assert (not (partiallyRefines name1 r7))) +(assert (not (partiallyRefines name1 r8))) +(assert (not (partiallyRefines name1 r9))) +(assert (not (partiallyRefines name1 name19))) +(assert (not (partiallyRefines name1 name18))) +(assert (not (partiallyRefines name1 name17))) +(assert (not (partiallyRefines name1 name16))) +(assert (not (partiallyRefines name1 r10))) +(assert (not (partiallyRefines name1 name15))) +(assert (not (partiallyRefines name1 name14))) +(assert (not (partiallyRefines name1 r12))) +(assert (not (partiallyRefines name1 name13))) +(assert (not (partiallyRefines name1 r11))) +(assert (not (partiallyRefines name1 name12))) +(assert (not (partiallyRefines name1 r14))) +(assert (not (partiallyRefines name1 name11))) +(assert (not (partiallyRefines name1 r13))) +(assert (not (partiallyRefines name1 name10))) +(assert (not (partiallyRefines name1 r16))) +(assert (not (partiallyRefines name1 r15))) +(assert (not (partiallyRefines name1 r18))) +(assert (not (partiallyRefines name1 r17))) +(assert (not (partiallyRefines name1 r19))) +(assert (not (partiallyRefines name1 name6))) +(assert (not (partiallyRefines name1 name5))) +(assert (not (partiallyRefines name1 name4))) +(assert (not (partiallyRefines name1 name3))) +(assert (not (partiallyRefines name1 name9))) +(assert (not (partiallyRefines name1 name8))) +(assert (not (partiallyRefines name1 name7))) +(assert (not (partiallyRefines name1 name2))) +(assert (not (partiallyRefines name1 name1))) +(assert (not (partiallyRefines name1 r0))) +(assert (not (partiallyRefines name1 name0))) +(assert (not (partiallyRefines name1 r1))) +(assert (not (partiallyRefines r0 name19))) +(assert (not (partiallyRefines r0 name18))) +(assert (not (partiallyRefines r0 name17))) +(assert (not (partiallyRefines r0 name16))) +(assert (not (partiallyRefines r0 name15))) +(assert (not (partiallyRefines r0 name14))) +(assert (not (partiallyRefines r0 name13))) +(assert (not (partiallyRefines r0 name12))) +(assert (not (partiallyRefines r0 name11))) +(assert (not (partiallyRefines r0 name10))) +(assert (not (partiallyRefines r0 name6))) +(assert (not (partiallyRefines r0 name5))) +(assert (not (partiallyRefines r0 name4))) +(assert (not (partiallyRefines r0 name3))) +(assert (not (partiallyRefines r0 name9))) +(assert (not (partiallyRefines r0 name8))) +(assert (not (partiallyRefines r0 name7))) +(assert (not (partiallyRefines r0 name2))) +(assert (not (partiallyRefines r0 name1))) +(assert (not (partiallyRefines r0 name0))) +(assert (not (partiallyRefines name0 r2))) +(assert (not (partiallyRefines name0 r3))) +(assert (not (partiallyRefines name0 r4))) +(assert (not (partiallyRefines name0 r5))) +(assert (not (partiallyRefines name0 r6))) +(assert (not (partiallyRefines name0 r7))) +(assert (not (partiallyRefines name0 r8))) +(assert (not (partiallyRefines name0 r9))) +(assert (not (partiallyRefines name0 name19))) +(assert (not (partiallyRefines name0 name18))) +(assert (not (partiallyRefines name0 name17))) +(assert (not (partiallyRefines name0 name16))) +(assert (not (partiallyRefines name0 r10))) +(assert (not (partiallyRefines name0 name15))) +(assert (not (partiallyRefines name0 name14))) +(assert (not (partiallyRefines name0 r12))) +(assert (not (partiallyRefines name0 name13))) +(assert (not (partiallyRefines name0 r11))) +(assert (not (partiallyRefines name0 name12))) +(assert (not (partiallyRefines name0 r14))) +(assert (not (partiallyRefines name0 name11))) +(assert (not (partiallyRefines name0 r13))) +(assert (not (partiallyRefines name0 name10))) +(assert (not (partiallyRefines name0 r16))) +(assert (not (partiallyRefines name0 r15))) +(assert (not (partiallyRefines name0 r18))) +(assert (not (partiallyRefines name0 r17))) +(assert (not (partiallyRefines name0 r19))) +(assert (not (partiallyRefines name0 name6))) +(assert (not (partiallyRefines name0 name5))) +(assert (not (partiallyRefines name0 name4))) +(assert (not (partiallyRefines name0 name3))) +(assert (not (partiallyRefines name0 name9))) +(assert (not (partiallyRefines name0 name8))) +(assert (not (partiallyRefines name0 name7))) +(assert (not (partiallyRefines name0 name2))) +(assert (not (partiallyRefines name0 name1))) +(assert (not (partiallyRefines name0 r0))) +(assert (not (partiallyRefines name0 name0))) +(assert (not (partiallyRefines name0 r1))) +(assert (not (partiallyRefines r1 name19))) +(assert (not (partiallyRefines r1 name18))) +(assert (not (partiallyRefines r1 name17))) +(assert (not (partiallyRefines r1 name16))) +(assert (not (partiallyRefines r1 name15))) +(assert (not (partiallyRefines r1 name14))) +(assert (not (partiallyRefines r1 name13))) +(assert (not (partiallyRefines r1 name12))) +(assert (not (partiallyRefines r1 name11))) +(assert (not (partiallyRefines r1 name10))) +(assert (not (partiallyRefines r1 name6))) +(assert (not (partiallyRefines r1 name5))) +(assert (not (partiallyRefines r1 name4))) +(assert (not (partiallyRefines r1 name3))) +(assert (not (partiallyRefines r1 name9))) +(assert (not (partiallyRefines r1 name8))) +(assert (not (partiallyRefines r1 name7))) +(assert (not (partiallyRefines r1 name2))) +(assert (not (partiallyRefines r1 name1))) +(assert (not (partiallyRefines r1 name0))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (eq x!0 x!2) (contains x!2 x!1)) :skolemid s!20 :qid q!36)) + (contains x!0 x!1)) + :qid q!37))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (partiallyRefines x!0 x!2) (partiallyRefines x!2 x!1)) + :skolemid s!12 + :qid q!22)) + (partiallyRefines x!0 x!1)) + :qid q!23))) +(assert (let ((a!1 (exists ((x!0 univ) (x!1 univ)) + (! (and (or (requires x!0 x!1) (requires x!1 x!0)) + (or (refines x!0 x!1) (refines x!1 x!0))) + :skolemid s!3 + :qid q!5)))) + (not a!1))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (contains x!0 x!2) (requires x!2 x!1)) + :skolemid s!24 + :qid q!42)) + (requires x!0 x!1)) + :qid q!43))) +(assert (not (exists ((x!0 univ) (x!1 univ)) + (! (and (refines x!0 x!1) (refines x!1 x!0)) :skolemid s!17 :qid q!31)))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (eq x!0 x!2) (refines x!2 x!1)) :skolemid s!11 :qid q!20)) + (refines x!0 x!1)) + :qid q!21))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (= (conflicts x!0 x!1) (conflicts x!1 x!0)) :qid q!48))) +(assert (not (exists ((x!0 univ) (x!1 univ)) + (! (and (requires x!0 x!1) (requires x!1 x!0)) :skolemid s!27 :qid q!47)))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (conflicts x!0 x!2) (eq x!2 x!1)) :skolemid s!19 :qid q!34)) + (conflicts x!0 x!1)) + :qid q!35))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (eq x!0 x!2) (partiallyRefines x!2 x!1)) + :skolemid s!21 + :qid q!38)) + (partiallyRefines x!0 x!1)) + :qid q!39))) +(assert (forall ((R univ)) + (! (let ((a!1 (forall ((x!0 univ)) + (! (=> (and (eq R x!0)) (= x!0 R)) :qid q!16)))) + (=> (and (Requirement R)) a!1)) + :qid q!17))) +(assert (not (exists ((x!0 univ) (x!1 univ)) + (! (and (= x!0 x!1) (conflicts x!0 x!1)) :skolemid s!7 :qid q!11)))) +(assert (let ((a!1 (exists ((x!0 univ) (x!1 univ)) + (! (and (or (requires x!0 x!1) + (requires x!1 x!0) + (refines x!0 x!1) + (refines x!1 x!0) + (contains x!0 x!1) + (contains x!1 x!0) + (eq x!0 x!1) + (eq x!1 x!0)) + (or (conflicts x!0 x!1) + (conflicts x!1 x!0) + (partiallyRefines x!0 x!1) + (partiallyRefines x!1 x!0))) + :skolemid s!1 + :qid q!3)))) + (not a!1))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (requires x!0 x!2) (conflicts x!2 x!1)) + :skolemid s!30 + :qid q!53)) + (conflicts x!0 x!1)) + :qid q!54))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (eq x!0 x!2) (eq x!2 x!1)) :skolemid s!34 :qid q!60)) + (eq x!0 x!1)) + :qid q!61))) +(assert (not (exists ((x!0 univ) (x!1 univ)) + (! (and (partiallyRefines x!0 x!1) (partiallyRefines x!1 x!0)) + :skolemid s!23 + :qid q!41)))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (contains x!0 x!2) (eq x!2 x!1)) :skolemid s!36 :qid q!64)) + (contains x!0 x!1)) + :qid q!65))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (contains x!0 x!2) (partiallyRefines x!2 x!1)) + :skolemid s!35 + :qid q!62)) + (partiallyRefines x!0 x!1)) + :qid q!63))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (eq x!0 x!2) (requires x!2 x!1)) :skolemid s!38 :qid q!70)) + (requires x!0 x!1)) + :qid q!71))) +(assert (let ((a!1 (exists ((x!0 univ) (x!1 univ)) + (! (and (or (conflicts x!0 x!1) (conflicts x!1 x!0)) + (or (partiallyRefines x!0 x!1) (partiallyRefines x!1 x!0))) + :skolemid s!31 + :qid q!55)))) + (not a!1))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (refines x!0 x!2) (partiallyRefines x!2 x!1)) + :skolemid s!33 + :qid q!58)) + (partiallyRefines x!0 x!1)) + :qid q!59))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (refines x!0 x!2) (conflicts x!2 x!1)) + :skolemid s!29 + :qid q!51)) + (conflicts x!0 x!1)) + :qid q!52))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (partiallyRefines x!0 x!2) (eq x!2 x!1)) + :skolemid s!9 + :qid q!14)) + (partiallyRefines x!0 x!1)) + :qid q!15))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (requires x!0 x!2) (eq x!2 x!1)) :skolemid s!25 :qid q!44)) + (requires x!0 x!1)) + :qid q!45))) +(assert (not (exists ((x!0 univ) (x!1 univ)) + (! (and (= x!0 x!1) (refines x!0 x!1)) :skolemid s!2 :qid q!4)))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (contains x!0 x!2) (refines x!2 x!1)) + :skolemid s!16 + :qid q!29)) + (refines x!0 x!1)) + :qid q!30))) +(assert (forall ((x!0 univ) (x!1 univ)) (! (= (eq x!0 x!1) (eq x!1 x!0)) :qid q!8))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (contains x!0 x!2) (contains x!2 x!1)) + :skolemid s!37 + :qid q!66)) + (contains x!0 x!1)) + :qid q!67))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (contains x!0 x!2) (conflicts x!2 x!1)) + :skolemid s!39 + :qid q!72)) + (conflicts x!0 x!1)) + :qid q!73))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (refines x!0 x!2) (contains x!2 x!1)) + :skolemid s!15 + :qid q!27)) + (refines x!0 x!1)) + :qid q!28))) +(assert (forall ((a univ)) + (! (let ((a!1 (forall ((x!0 univ) (x!1 univ)) + (! (=> (and (name a x!0) (name a x!1)) (and (= x!0 x!1))) + :qid q!0)))) + (=> (and (Requirement a)) + (and (exists ((x!0 univ)) (! (name a x!0) :skolemid s!0 :qid q!1)) + a!1))) + :qid q!2))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (requires x!0 x!2) (requires x!2 x!1)) + :skolemid s!14 + :qid q!25)) + (requires x!0 x!1)) + :qid q!26))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (refines x!0 x!2) (eq x!2 x!1)) :skolemid s!18 :qid q!32)) + (refines x!0 x!1)) + :qid q!33))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (refines x!0 x!2) (refines x!2 x!1)) + :skolemid s!28 + :qid q!49)) + (refines x!0 x!1)) + :qid q!50))) +(assert (not (exists ((x!0 univ) (x!1 univ)) + (! (and (= x!0 x!1) (requires x!0 x!1)) :skolemid s!26 :qid q!46)))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (eq x!0 x!2) (conflicts x!2 x!1)) :skolemid s!32 :qid q!56)) + (conflicts x!0 x!1)) + :qid q!57))) +(assert (not (exists ((x!0 univ) (x!1 univ)) + (! (and (contains x!0 x!1) (contains x!1 x!0)) :skolemid s!40 :qid q!74)))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (requires x!0 x!2) (contains x!2 x!1)) + :skolemid s!8 + :qid q!12)) + (requires x!0 x!1)) + :qid q!13))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (requires x!0 x!2) (refines x!2 x!1)) + :skolemid s!10 + :qid q!18)) + (requires x!0 x!1)) + :qid q!19))) +(assert (forall ((x!0 univ) (x!1 univ)) + (! (=> (exists ((x!2 univ)) + (! (and (refines x!0 x!2) (requires x!2 x!1)) :skolemid s!6 :qid q!9)) + (requires x!0 x!1)) + :qid q!10))) +(assert (let ((a!1 (exists ((x!0 univ) (x!1 univ)) + (! (and (or (requires x!0 x!1) + (requires x!1 x!0) + (refines x!0 x!1) + (refines x!1 x!0)) + (or (contains x!0 x!1) + (contains x!1 x!0) + (eq x!0 x!1) + (eq x!1 x!0))) + :skolemid s!4 + :qid q!6)))) + (not a!1))) +(assert (not (exists ((x!0 univ) (x!1 univ)) + (! (and (= x!0 x!1) (contains x!0 x!1)) :skolemid s!5 :qid q!7)))) +(assert (let ((a!1 (exists ((x!0 univ) (x!1 univ)) + (! (and (or (contains x!0 x!1) (contains x!1 x!0)) + (or (eq x!0 x!1) (eq x!1 x!0))) + :skolemid s!13 + :qid q!24)))) + (not a!1))) +(assert (forall ((a univ) (b univ)) + (! (let ((a!1 (not (forall ((x!0 univ)) + (! (= (name a x!0) (name b x!0)) :qid q!68))))) + (=> (and (Requirement a) (Requirement b)) (=> (not (= a b)) a!1))) + :qid q!69))) +(assert (not (exists ((x!0 univ) (x!1 univ)) + (! (and (= x!0 x!1) (partiallyRefines x!0 x!1)) :skolemid s!22 :qid q!40)))) + +(check-sat) +(get-info :all-statistics) +(get-model) diff --git a/Source/kodkod/examples/kodkod/examples/ExampleMetadata.java b/Source/kodkod/examples/kodkod/examples/ExampleMetadata.java new file mode 100644 index 0000000..ff07924 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/ExampleMetadata.java @@ -0,0 +1,57 @@ +package kodkod.examples; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface ExampleMetadata { + // example name + String Name() default ""; + + // example note + String Note() default ""; + + // "check" or "run" + boolean IsCheck() default false; + + // partial models + boolean PartialModel() default false; + + // decidable fragments, satisfiability with finite extension + // TODO + + // number of binary, ternary, and n-ary relations + int BinaryRelations() default 0; + int TernaryRelations() default 0; + int NaryRelations() default 0; + + // number of hierarchical types + int HierarchicalTypes() default 0; + + // number of nested relational joins + int NestedRelationalJoins() default 0; + + // number of transitive closure + int TransitiveClosure() default 0; + + // number of nested quantifiers + int NestedQuantifiers() default 0; + + // set cardinality + int SetCardinality() default 0; + + // number of additions and subtractions + int Additions() default 0; + int Subtractions() default 0; + + // number of comparison operators + int Comparison() default 0; + + // number of ordered relations + int OrderedRelations() default 0; + + // number of constraints + int Constraints() default 0; +} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/TestScript.java b/Source/kodkod/examples/kodkod/examples/TestScript.java new file mode 100644 index 0000000..b0206b9 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/TestScript.java @@ -0,0 +1,161 @@ +package kodkod.examples; + +import java.io.*; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.URL; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +public class TestScript { + + private final static int testCount = 1; + + private final static int timeLimit = 60; + private final static TimeUnit timeUnit = TimeUnit.SECONDS; + + public static void main(String[] args) throws Exception { + List classes = getClasses(TestScript.class.getClassLoader(), "kodkod/examples/models"); + + System.out.println("Classes:"); + + for (Class c : classes) { + System.out.println("Class: " + c); + } + + System.out.println(); + + long timeLimitMs = timeUnit.toMillis(timeLimit); + + try (PrintWriter out = new PrintWriter("test_script.out")) { + out.println(new Date().toString()); + out.println(); + out.flush(); + classes.forEach(testClass -> { + System.out.println(testClass.getName() + " is being tested."); + out.println(testClass.getName() + " is being tested."); + out.flush(); + + String cp = Objects.requireNonNull(testClass.getClassLoader().getResource("")).getFile(); + cp = cp + ":" + System.getenv("PWD") + ":" + System.getProperty("java.class.path"); + + String classStr = testClass.getName(); + + String command = "java -cp " + cp + " " + classStr; + + for (int i = 0; i < testCount; i++) { + + final int testNo = i + 1; + + System.out.println("Test " + testNo + " is started."); + + long time = System.currentTimeMillis(); + + try { + Process process = Runtime.getRuntime().exec(command); + + long procTime = System.currentTimeMillis(); + + boolean flag = true; + + while (process.isAlive()) { + if (System.currentTimeMillis() - procTime > timeLimitMs) { + process.destroy(); + flag = false; + } + } + + if (flag && process.exitValue() == 0) { + time = System.currentTimeMillis() - time; + + System.out.println("Time: " + time + " ms"); + out.println("Test " + testNo + ": " + time + " ms"); + out.flush(); + } else if (flag && process.exitValue() != 0) { + System.out.println("### Error ###"); + + BufferedReader in = new BufferedReader(new InputStreamReader(process.getErrorStream())); + String line; + + boolean done = false; + + if ((line = in.readLine()) != null) { + System.out.println(line); + if (line.startsWith("Exception in thread")) { + line = line.replaceFirst("Exception in thread \".+\" ", ""); + line = line.substring(0, line.indexOf(':')); + + out.println("Test " + testNo + ": " + line); + out.flush(); + + done = true; + } + } + + while ((line = in.readLine()) != null) { + System.out.println(line); + } + in.close(); + + if (!done) { + out.println("Test " + testNo + ": Error"); + out.flush(); + } + } else { + System.out.println("Couldn't solve in " + timeLimit + " " + timeUnit.toString().toLowerCase()); + out.println("Test " + testNo + ": Couldn't solve in " + timeLimit + " " + timeUnit.toString().toLowerCase()); + out.flush(); + } + + } catch (IOException e) { + e.printStackTrace(); + } + + /*try { + testClass.getMethod("main", String[].class).invoke(null, new Object[]{new String[0]}); + } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { + e.printStackTrace(); + }*/ + + } + + out.println(); + out.flush(); + }); + + System.out.println("Finished."); + out.println("Finished."); + out.flush(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + System.exit(0); + } + + private static List getClasses(ClassLoader cl, String pack) throws Exception { + + String dottedPackage = pack.replaceAll("[/]", "."); + List classes = new ArrayList<>(); + URL upackage = cl.getResource(pack); + + assert upackage != null; + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader((InputStream) upackage.getContent())); + //DataInputStream dis = new DataInputStream((InputStream) upackage.getContent()); + String line; + while ((line = bufferedReader.readLine()) != null) { + if (line.endsWith(".class")) { + classes.add(Class.forName(dottedPackage + "." + line.substring(0, line.lastIndexOf('.')))); + } else { + classes.addAll(getClasses(cl, pack + "/" + line)); + } + } + return classes; + } + +} diff --git a/Source/kodkod/examples/kodkod/examples/TestScriptUsingBinary.java b/Source/kodkod/examples/kodkod/examples/TestScriptUsingBinary.java new file mode 100644 index 0000000..7558cc7 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/TestScriptUsingBinary.java @@ -0,0 +1,207 @@ +package kodkod.examples; + +import java.io.*; +import java.net.URL; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +public class TestScriptUsingBinary { + + private final static int testCount = 1; + + private final static int timeLimitForConversion = 1; + private final static int timeLimitForSolving = 5; + + private final static TimeUnit timeUnit = TimeUnit.MINUTES; + + public static void main(String[] args) throws Exception { + List classes = getClasses(TestScriptUsingBinary.class.getClassLoader(), "kodkod/examples/models"); + + System.out.println("Classes:"); + + for (Class c : classes) { + System.out.println("Class: " + c); + } + + System.out.println(); + + long timeLimitForConversionMs = timeUnit.toMillis(timeLimitForConversion); + long timeLimitForSolvingMs = timeUnit.toMillis(timeLimitForSolving); + + try (PrintWriter out = new PrintWriter("test_script_binary.out")) { + out.println(new Date().toString()); + out.println(); + out.flush(); + classes.forEach(testClass -> { + System.out.println(testClass.getName() + " is being tested."); + out.println(testClass.getName() + " is being tested."); + out.flush(); + + String cp = Objects.requireNonNull(testClass.getClassLoader().getResource("")).getFile(); + cp = cp + ":" + System.getenv("PWD") + ":" + System.getProperty("java.class.path"); + + String classStr = testClass.getName(); + + String command = "java -cp " + cp + " " + classStr; + + long time = System.currentTimeMillis(); + + try { + Process process = Runtime.getRuntime().exec(command); + + long procTime = System.currentTimeMillis(); + + boolean flag = true; + + while (process.isAlive()) { + if (System.currentTimeMillis() - procTime > timeLimitForConversionMs) { + process.destroy(); + flag = false; + } + } + + if (flag && process.exitValue() == 0) { + time = System.currentTimeMillis() - time; + + System.out.println("Conversion time: " + time + " ms"); + out.println("SMT-LIB file created in " + time + " ms"); + out.flush(); + + String smtFileName = new File("SMT" + System.getProperty("file.separator") + testClass.getSimpleName().toLowerCase() + ".smt").getAbsolutePath(); + + command = "z3 " + smtFileName; + + for (int i = 0; i < testCount; i++) { + + final int testNo = i + 1; + + System.out.println("Test " + testNo + " is started."); + + time = System.currentTimeMillis(); + + try { + process = Runtime.getRuntime().exec(command); + + procTime = System.currentTimeMillis(); + + flag = true; + + while (process.isAlive()) { + if (System.currentTimeMillis() - procTime > timeLimitForSolvingMs) { + process.destroy(); + flag = false; + } + } + + if (flag) { + time = System.currentTimeMillis() - time; + + System.out.println("Time: " + time + " ms"); + out.println("Test " + testNo + ": " + time + " ms"); + out.flush(); + } else { + System.out.println("Couldn't solve in " + timeLimitForSolving + " " + timeUnit.toString().toLowerCase()); + out.println("Test " + testNo + ": Couldn't solve in " + timeLimitForSolving + " " + timeUnit.toString().toLowerCase()); + out.flush(); + } + + BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); + BufferedReader err = new BufferedReader(new InputStreamReader(process.getErrorStream())); + + String line; + + try { + while ((line = in.readLine()) != null) { + System.out.println(line); + } + } + catch (Exception ignored) { } + + + try { + while ((line = err.readLine()) != null) { + System.out.println(line); + } + } + catch (Exception ignored) { } + + } catch (IOException e) { + e.printStackTrace(); + } + } + + } else if (flag && process.exitValue() != 0) { + System.out.println("### Error ###"); + + BufferedReader in = new BufferedReader(new InputStreamReader(process.getErrorStream())); + String line; + + if ((line = in.readLine()) != null) { + System.out.println(line); + if (line.startsWith("Exception in thread")) { + line = line.replaceFirst("Exception in thread \".+\" ", ""); + line = line.substring(0, line.indexOf(':')); + + out.println(line); + out.flush(); + } else { + out.println("Unknown error while creating SMT-LIB file!"); + out.flush(); + } + } else { + out.println("Unknown error while creating SMT-LIB file!"); + out.flush(); + } + + while ((line = in.readLine()) != null) { + System.out.println(line); + } + in.close(); + } else { + System.out.println("Couldn't create SMT-LIB file in " + timeLimitForConversion + " " + timeUnit.toString().toLowerCase()); + out.println("Couldn't create SMT-LIB file in " + timeLimitForConversion + " " + timeUnit.toString().toLowerCase()); + out.flush(); + } + + } catch (IOException e) { + e.printStackTrace(); + } + + out.println(); + out.flush(); + }); + + System.out.println("Finished."); + out.println("Finished."); + out.flush(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + System.exit(0); + } + + private static List getClasses(ClassLoader cl, String pack) throws Exception { + + String dottedPackage = pack.replaceAll("[/]", "."); + List classes = new ArrayList<>(); + URL upackage = cl.getResource(pack); + + assert upackage != null; + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader((InputStream) upackage.getContent())); + //DataInputStream dis = new DataInputStream((InputStream) upackage.getContent()); + String line; + while ((line = bufferedReader.readLine()) != null) { + if (line.endsWith(".class")) { + classes.add(Class.forName(dottedPackage + "." + line.substring(0, line.lastIndexOf('.')))); + } else { + classes.addAll(getClasses(cl, pack + "/" + line)); + } + } + return classes; + } + +} diff --git a/Source/kodkod/examples/kodkod/examples/alloy/AbstractWorldDefinitions.java b/Source/kodkod/examples/kodkod/examples/alloy/AbstractWorldDefinitions.java index dc2567e..d3481f8 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/AbstractWorldDefinitions.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/AbstractWorldDefinitions.java @@ -13,6 +13,7 @@ import kodkod.engine.Solver; import kodkod.engine.config.ConsoleReporter; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -22,6 +23,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "AbstractWorldDefinitions", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 4, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 4, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 14, + OrderedRelations = 0, + Constraints = 54 +) public final class AbstractWorldDefinitions { // relations declared in common.als private final Relation Coin, Purse, TransferDetails; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/Bigconfig.java b/Source/kodkod/examples/kodkod/examples/alloy/Bigconfig.java index c30d3b3..116caea 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/Bigconfig.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/Bigconfig.java @@ -12,6 +12,7 @@ import kodkod.engine.Solver; import kodkod.engine.config.ConsoleReporter; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -57,6 +58,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "Bigconfig", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 2, + NestedRelationalJoins = 2, + TransitiveClosure = 1, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 9 +) public class Bigconfig { // sigs private final Relation Router, Site, HQ, Sub; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/CeilingsAndFloors.java b/Source/kodkod/examples/kodkod/examples/alloy/CeilingsAndFloors.java index 78850c4..18e5aac 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/CeilingsAndFloors.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/CeilingsAndFloors.java @@ -9,6 +9,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -55,6 +56,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "CeilingsAndFloors", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 2, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 5, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 0, + Constraints = 7 +) public final class CeilingsAndFloors { private final Relation Platform, Man, ceiling, floor; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/DNACuts.java b/Source/kodkod/examples/kodkod/examples/alloy/DNACuts.java index 97da448..f80b593 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/DNACuts.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/DNACuts.java @@ -11,6 +11,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -70,6 +71,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "DNACuts", + Note = "", + IsCheck = false, + PartialModel = false, + BinaryRelations = 3, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 6, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 1, + Constraints = 11 +) public final class DNACuts { private final Relation next, Link, CutLink, JoinLink, Base, base, partner; private final Expression[] neighbor; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/DiffEg.java b/Source/kodkod/examples/kodkod/examples/alloy/DiffEg.java index 4d8fee7..894047c 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/DiffEg.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/DiffEg.java @@ -9,6 +9,7 @@ import kodkod.ast.Variable; import kodkod.engine.Solution; import kodkod.engine.Solver; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -36,6 +37,25 @@ pred pol (req: Request) { run pol for 2 */ +@ExampleMetadata( + Name = "DiffEg", + Note = "", + IsCheck = false, + PartialModel = false, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 8 +) public final class DiffEg { // sigs diff --git a/Source/kodkod/examples/kodkod/examples/alloy/Dijkstra.java b/Source/kodkod/examples/kodkod/examples/alloy/Dijkstra.java index 21a7d4c..4d4e53b 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/Dijkstra.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/Dijkstra.java @@ -11,6 +11,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -20,6 +21,25 @@ * Kodkod encoding of models/examples/algorithms/dijkstra.als. * @author Emina Torlak */ +@ExampleMetadata( + Name = "Dijkstra", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 2, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 28, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 12, + OrderedRelations = 2, + Constraints = 33 +) public final class Dijkstra { private final Relation Process, Mutex, State, holds, waits; @@ -336,7 +356,7 @@ public static void main(String[] args) { final Dijkstra model = new Dijkstra(); final Solver solver = new Solver(); - solver.options().setSolver(SATFactory.MiniSat); + solver.options().setSolver(SATFactory.Z3Solver); try { final Formula noDeadlocks = model.checkDijkstraPreventsDeadlocks(); diff --git a/Source/kodkod/examples/kodkod/examples/alloy/FileSystem.java b/Source/kodkod/examples/kodkod/examples/alloy/FileSystem.java index 0e96842..71c1bb9 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/FileSystem.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/FileSystem.java @@ -15,6 +15,7 @@ import kodkod.engine.fol2sat.HigherOrderDeclException; import kodkod.engine.fol2sat.UnboundLeafException; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -23,6 +24,25 @@ * A KK encoding of file_system.als * @author Emina Torlak */ +@ExampleMetadata( + Name = "FileSystem", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 4, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 4, + NestedRelationalJoins = 2, + TransitiveClosure = 2, + NestedQuantifiers = 3, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 0, + Constraints = 10 +) public final class FileSystem { private final Relation Obj, Name, File, Dir, Root, Cur, DirEntry; @@ -200,7 +220,7 @@ public static void main(String[] args) { } catch (UnboundLeafException e) { // TODO Auto-generated catch block e.printStackTrace(); - } + } } } diff --git a/Source/kodkod/examples/kodkod/examples/alloy/GroupScheduling.java b/Source/kodkod/examples/kodkod/examples/alloy/GroupScheduling.java index b49a7ab..db1df49 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/GroupScheduling.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/GroupScheduling.java @@ -34,6 +34,7 @@ import kodkod.engine.Solver; import kodkod.engine.config.ConsoleReporter; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.Tuple; import kodkod.instance.TupleFactory; @@ -46,6 +47,25 @@ * @author Emina Torlak * */ +@ExampleMetadata( + Name = "GroupScheduling", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 0, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 1, + Additions = 0, + Subtractions = 0, + Comparison = 1, + OrderedRelations = 0, + Constraints = 3 +) public final class GroupScheduling { private final Relation person, group, round, assign; private final int ng; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/Handshake.java b/Source/kodkod/examples/kodkod/examples/alloy/Handshake.java index 1a99afe..98df81f 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/Handshake.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/Handshake.java @@ -11,6 +11,7 @@ import kodkod.engine.Solver; import kodkod.engine.config.ConsoleReporter; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -20,6 +21,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "Handshake", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 2, + NestedRelationalJoins = 1, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 2, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 10 +) public final class Handshake { private final Relation Person, Hilary, Jocelyn, shaken, spouse; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/Hotel.java b/Source/kodkod/examples/kodkod/examples/alloy/Hotel.java index 4ee741c..698ad7a 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/Hotel.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/Hotel.java @@ -36,6 +36,7 @@ import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; import kodkod.engine.ucore.RCEStrategy; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -47,6 +48,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "Hotel", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 8, + TernaryRelations = 4, + NaryRelations = 0, + HierarchicalTypes = 7, + NestedRelationalJoins = 17, + TransitiveClosure = 0, + NestedQuantifiers = 5, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 22, + OrderedRelations = 2, + Constraints = 54 +) public final class Hotel { private final Relation Time, Event, first, last; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/Lists.java b/Source/kodkod/examples/kodkod/examples/alloy/Lists.java index c4b236b..97aaf62 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/Lists.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/Lists.java @@ -15,6 +15,7 @@ import kodkod.engine.fol2sat.HigherOrderDeclException; import kodkod.engine.fol2sat.UnboundLeafException; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -23,6 +24,25 @@ * A KK encoding of lists.als * @author Emina Torlak */ +@ExampleMetadata( + Name = "Lists", + Note = "", + IsCheck = false, + PartialModel = false, + BinaryRelations = 4, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 2, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 2, + OrderedRelations = 0, + Constraints = 21 +) public final class Lists { /* KK outperformed by the sequential analysis tool on the reflexive and symmetric assertions */ private final Relation Thing, List, NonEmptyList, EmptyList; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/Netconfig.java b/Source/kodkod/examples/kodkod/examples/alloy/Netconfig.java index 957819b..9447d1e 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/Netconfig.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/Netconfig.java @@ -10,6 +10,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -82,6 +83,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "Netconfig", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 2, + NestedRelationalJoins = 1, + TransitiveClosure = 1, + NestedQuantifiers = 3, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 3, + OrderedRelations = 1, + Constraints = 19 +) public class Netconfig { // sigs diff --git a/Source/kodkod/examples/kodkod/examples/alloy/Pigeonhole.java b/Source/kodkod/examples/kodkod/examples/alloy/Pigeonhole.java index 0336bd4..93f404e 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/Pigeonhole.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/Pigeonhole.java @@ -9,6 +9,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -30,6 +31,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "Pigeonhole", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 1, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 1, + OrderedRelations = 0, + Constraints = 2 +) public final class Pigeonhole { // sigs private final Relation Pigeon, Hole; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/RingElection.java b/Source/kodkod/examples/kodkod/examples/alloy/RingElection.java index c8f169c..fda4d6f 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/RingElection.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/RingElection.java @@ -10,6 +10,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -67,6 +68,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "RingElection", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 4, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 8, + TransitiveClosure = 1, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 8, + OrderedRelations = 2, + Constraints = 16 +) public final class RingElection { private final Relation Process, Time, succ, toSend, elected; private final Relation pfirst, plast, pord, tfirst, tlast, tord; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/Toughnut.java b/Source/kodkod/examples/kodkod/examples/alloy/Toughnut.java index 6179ffb..4664689 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/Toughnut.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/Toughnut.java @@ -10,6 +10,7 @@ import kodkod.ast.Variable; import kodkod.engine.Solution; import kodkod.engine.Solver; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -42,6 +43,25 @@ * @author Emina * */ +@ExampleMetadata( + Name = "Toughnut", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 1, + TernaryRelations = 0, + NaryRelations = 1, + HierarchicalTypes = 0, + NestedRelationalJoins = 3, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 1, + OrderedRelations = 1, + Constraints = 2 +) public final class Toughnut { private final Relation Cell, covered, ord; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/ToyFilesystem.java b/Source/kodkod/examples/kodkod/examples/alloy/ToyFilesystem.java index eb98dd0..0239f1c 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/ToyFilesystem.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/ToyFilesystem.java @@ -30,6 +30,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -39,6 +40,25 @@ * A toy filesystem specification. * @author Emina Torlak */ +@ExampleMetadata( + Name = "ToyFilesystem", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 1, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 1, + NestedRelationalJoins = 0, + TransitiveClosure = 1, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 4 +) public final class ToyFilesystem { private final Relation file, dir, root; private final Relation contents; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/ToyLists.java b/Source/kodkod/examples/kodkod/examples/alloy/ToyLists.java index 0d16391..ba8709d 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/ToyLists.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/ToyLists.java @@ -33,6 +33,7 @@ import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; import kodkod.engine.ucore.AdaptiveRCEStrategy; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -42,6 +43,25 @@ * A toy list specification. * @author Emina Torlak */ +@ExampleMetadata( + Name = "ToyLists", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 4, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 2, + NestedRelationalJoins = 0, + TransitiveClosure = 1, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 5, + OrderedRelations = 0, + Constraints = 18 +) public final class ToyLists { private final Relation list, nonEmptyList, emptyList, thing; private final Relation equivTo, prefixes, car, cdr; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/Trees.java b/Source/kodkod/examples/kodkod/examples/alloy/Trees.java index 16a5f8e..6218644 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/Trees.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/Trees.java @@ -17,6 +17,7 @@ import kodkod.engine.fol2sat.HigherOrderDeclException; import kodkod.engine.fol2sat.UnboundLeafException; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -27,6 +28,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "Trees", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 1, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 0, + TransitiveClosure = 2, + NestedQuantifiers = 1, + SetCardinality = 6, + Additions = 2, + Subtractions = 2, + Comparison = 3, + OrderedRelations = 0, + Constraints = 21 +) public final class Trees { /* KK outperformed by the sequential analysis tool on this model */ private final Relation V, E; diff --git a/Source/kodkod/examples/kodkod/examples/alloy/Viktor.java b/Source/kodkod/examples/kodkod/examples/alloy/Viktor.java index 099025b..bb5a27b 100644 --- a/Source/kodkod/examples/kodkod/examples/alloy/Viktor.java +++ b/Source/kodkod/examples/kodkod/examples/alloy/Viktor.java @@ -216,9 +216,9 @@ public static void main(String[] args) { final Viktor model = new Viktor(); final Solver solver = new Solver(); - solver.options().setSolver(SATFactory.MiniSat); + solver.options().setSolver(SATFactory.Z3Solver); solver.options().setReporter(new ConsoleReporter()); - solver.options().setBitwidth(7); + solver.options().setBitwidth(5); final Formula f = model.checkEquations(); final Bounds b = model.bounds(); System.out.println(f); diff --git a/Source/kodkod/examples/kodkod/examples/alloyinecore/IntTest.java b/Source/kodkod/examples/kodkod/examples/alloyinecore/IntTest.java new file mode 100644 index 0000000..367005a --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/alloyinecore/IntTest.java @@ -0,0 +1,102 @@ +package kodkod.examples.alloyinecore; + +import kodkod.ast.*; +import kodkod.engine.Solution; +import kodkod.engine.Solver; +import kodkod.engine.satlab.SATFactory; +import kodkod.instance.Bounds; +import kodkod.instance.TupleFactory; +import kodkod.instance.Universe; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +final class IntTest { + + public static void main(String[] args) { + IntTest theoryOfList = new IntTest(); + System.out.println(theoryOfList); + + if (theoryOfList.solution.unsat()) { + System.out.println("High Level Core:"); + theoryOfList.solution.proof().highLevelCore().keySet().forEach(System.out::println); + System.out.println(); + System.out.println("Core:"); + theoryOfList.solution.proof().core().forEachRemaining(record -> { + StringBuilder sb = new StringBuilder(); + sb.append(record.node()).append("("); + sb.append(record.env().values().stream().flatMap(Collection::stream) + .map(tuple -> tuple.atom(0).toString()).collect(Collectors.joining(", "))); + sb.append(")"); + System.out.println(sb); + }); + } + } + + private List formulaList; + private Bounds bounds; + private Solution solution; + + private IntTest() { + formulaList = new ArrayList<>(); + solveExample(); + } + + private Relation Object = Relation.unary("Object"); + private Relation Max = Relation.unary("Max"); + private Relation no = Relation.binary("no"); + + private void solveExample() { + defineTypes(); + defineFormulas(); + createInstance(); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.Z3Solver); + solver.options().setBitwidth(4); + + solution = solver.solve(Formula.and(formulaList), bounds); + } + + private void defineTypes() { + formulaList.add(Max.one()); + + formulaList.add(no.in(Object.product(Relation.INTS))); + } + + private void defineFormulas() { + Variable o = Variable.unary("o"); + formulaList.add(o.join(no).one().forAll(o.oneOf(Object))); + + Variable o1 = Variable.unary("o1"); + Variable o2 = Variable.unary("o2"); + formulaList.add(o1.join(no).eq(o2.join(no)).not().forAll(o1.oneOf(Object).and(o2.oneOf(Object.difference(o1))))); + + formulaList.add(Max.join(no).sum().gte(o.join(no).sum()).forAll(o.oneOf(Object))); + } + + private void createInstance() { + String Object1 = "Object1"; + String Object2 = "Object2"; + String Object3 = "Object3"; + + Universe universe = new Universe(Object1, Object2, Object3, 1, 2, 3); + + TupleFactory tupleFactory = universe.factory(); + + bounds = new Bounds(universe); + + for (int i = 0; i < 3; i++) { + bounds.boundExactly(i + 1, tupleFactory.setOf(i + 1)); + } + + bounds.boundExactly(Object, tupleFactory.setOf(Object1, Object2, Object3)); + bounds.bound(Max, tupleFactory.setOf(Object1, Object2, Object3)); + bounds.bound(no, tupleFactory.allOf(2)); + } + + @Override + public String toString() { return solution.toString();} +} diff --git a/Source/kodkod/examples/kodkod/examples/alloyinecore/RequirementsModel.java b/Source/kodkod/examples/kodkod/examples/alloyinecore/RequirementsModel.java new file mode 100644 index 0000000..41b4cc0 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/alloyinecore/RequirementsModel.java @@ -0,0 +1,236 @@ +package kodkod.examples.alloyinecore; + +import kodkod.ast.Expression; +import kodkod.ast.Formula; +import kodkod.ast.Relation; +import kodkod.ast.Variable; +import kodkod.engine.Solution; +import kodkod.engine.Solver; +import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.Bounds; +import kodkod.instance.TupleFactory; +import kodkod.instance.Universe; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.stream.Collectors; + +@ExampleMetadata( + Name = "RequirementsModel", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 7, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 3, + OrderedRelations = 0, + Constraints = 45 +) +public class RequirementsModel { + + public static void main(String[] args) { + RequirementsModel requirementsModel = new RequirementsModel(); + System.out.println(requirementsModel); + + if (requirementsModel.solution.unsat()) { + System.out.println("High Level Core:"); + requirementsModel.solution.proof().highLevelCore().keySet().forEach(System.out::println); + System.out.println(); + System.out.println("Core:"); + requirementsModel.solution.proof().core().forEachRemaining(record -> { + StringBuilder sb = new StringBuilder(); + sb.append(record.node()).append("("); + sb.append(record.env().values().stream().flatMap(Collection::stream) + .map(tuple -> tuple.atom(0).toString()).collect(Collectors.joining(", "))); + sb.append(")"); + System.out.println(sb); + }); + } + } + + private java.util.List formulaList; + private Bounds bounds; + private Solution solution; + + private RequirementsModel() { + formulaList = new ArrayList<>(); + solveExample(); + } + + private Relation Requirement = Relation.unary("Requirement"); + private Relation Name = Relation.unary("Name"); + + private Relation name = Relation.binary("name"); + private Relation requires = Relation.binary("requires"); + private Relation refines = Relation.binary("refines"); + private Relation contains = Relation.binary("contains"); + private Relation equals = Relation.binary("equals"); + private Relation conflicts = Relation.binary("conflicts"); + private Relation partiallyRefines = Relation.binary("partiallyRefines"); + + private void solveExample() { + defineTypes(); + defineFormulas(); + createInstance(); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.Z3Solver); + + solution = solver.solve(Formula.and(formulaList), bounds); + } + + private void defineTypes() { + /* + + NO NEED TO DEFINE THESE + + // no Name & Requirement + formulaList.add(Name.intersection(Requirement).no()); + + formulaList.add(name.in(Requirement.product(Name))); + formulaList.add(requires.in(Requirement.product(Requirement))); + formulaList.add(refines.in(Requirement.product(Requirement))); + formulaList.add(contains.in(Requirement.product(Requirement))); + formulaList.add(equals.in(Requirement.product(Requirement))); + formulaList.add(conflicts.in(Requirement.product(Requirement))); + formulaList.add(partiallyRefines.in(Requirement.product(Requirement))); + */ + } + + private void defineFormulas() { + formulaList.add(transitive(requires)); + formulaList.add(antisymmetric(requires)); + formulaList.add(irreflexive(requires)); + + formulaList.add(transitive(refines)); + formulaList.add(antisymmetric(refines)); + formulaList.add(irreflexive(refines)); + + formulaList.add(transitive(contains)); + formulaList.add(antisymmetric(contains)); + formulaList.add(irreflexive(contains)); + + formulaList.add(transitive(partiallyRefines)); + formulaList.add(antisymmetric(partiallyRefines)); + formulaList.add(irreflexive(partiallyRefines)); + + formulaList.add(symmetric(equals)); + formulaList.add(reflexive(Requirement, equals)); + formulaList.add(transitive(equals)); + + formulaList.add(symmetric(conflicts)); + formulaList.add(irreflexive(conflicts)); + + formulaList.add(infer(requires, refines, requires)); + formulaList.add(infer(requires, contains, requires)); + formulaList.add(infer(requires, conflicts, conflicts)); + formulaList.add(infer(requires, equals, requires)); + + formulaList.add(infer(refines, requires, requires)); + formulaList.add(infer(refines, contains, refines)); + formulaList.add(infer(refines, partiallyRefines, partiallyRefines)); + formulaList.add(infer(refines, conflicts, conflicts)); + formulaList.add(infer(refines, equals, refines)); + + formulaList.add(infer(contains, requires, requires)); + formulaList.add(infer(contains, refines, refines)); + formulaList.add(infer(contains, partiallyRefines, partiallyRefines)); + formulaList.add(infer(contains, conflicts, conflicts)); + formulaList.add(infer(contains, equals, contains)); + + formulaList.add(infer(partiallyRefines, equals, partiallyRefines)); + + formulaList.add(infer(conflicts, equals, conflicts)); + + formulaList.add(infer(equals, requires, requires)); + formulaList.add(infer(equals, refines, refines)); + formulaList.add(infer(equals, contains, contains)); + formulaList.add(infer(equals, conflicts, conflicts)); + formulaList.add(infer(equals, partiallyRefines, partiallyRefines)); + + + formulaList.add(Expression.union(requires, requires.transpose()) + .intersection(Expression.union(refines, refines.transpose())).no()); + formulaList.add(Expression.union(contains, contains.transpose()) + .intersection(Expression.union(equals, equals.transpose())).no()); + formulaList.add(Expression.union(conflicts, conflicts.transpose()) + .intersection(Expression.union(partiallyRefines, partiallyRefines.transpose())).no()); + formulaList.add(Expression.union(requires, requires.transpose(), refines, refines.transpose()) + .intersection(Expression.union(contains, contains.transpose(), equals, equals.transpose())).no()); + formulaList.add(Expression.union(requires, requires.transpose(), refines, refines.transpose(), contains, contains.transpose(), equals, equals.transpose()) + .intersection(Expression.union(conflicts, conflicts.transpose(), partiallyRefines, partiallyRefines.transpose())).no()); + + Variable a = Variable.unary("a"); + Variable b = Variable.unary("b"); + formulaList.add(a.eq(b).not().implies(a.join(name).eq(b.join(name)).not()).forAll(a.oneOf(Requirement).and(b.oneOf(Requirement)))); + + formulaList.add(a.join(name).one().forAll(a.oneOf(Requirement))); + } + + private void createInstance() { + String r1 = "r1"; + String r2 = "r2"; + String r3 = "r3"; + String name1 = "Name1"; + String name2 = "Name2"; + String name3 = "Name3"; + + Universe universe = new Universe(r1, r2, r3, name1, name2, name3); + + TupleFactory tupleFactory = universe.factory(); + + bounds = new Bounds(universe); + + bounds.boundExactly(Requirement, tupleFactory.setOf(r1, r2, r3)); + bounds.boundExactly(Name, tupleFactory.setOf(name1, name2, name3)); + + bounds.bound(name, tupleFactory.setOf( + tupleFactory.tuple(r1, name1), tupleFactory.tuple(r2, name2), tupleFactory.tuple(r3, name3)) + , bounds.upperBound(Requirement).product(bounds.upperBound(Name))); + bounds.bound(requires, tupleFactory.setOf( + tupleFactory.tuple(r1, r2), tupleFactory.tuple(r2, r3)) + , bounds.upperBound(Requirement).product(bounds.upperBound(Requirement))); + bounds.bound(refines, bounds.upperBound(Requirement).product(bounds.upperBound(Requirement))); + bounds.bound(contains, bounds.upperBound(Requirement).product(bounds.upperBound(Requirement))); + bounds.bound(equals, bounds.upperBound(Requirement).product(bounds.upperBound(Requirement))); + bounds.bound(conflicts, bounds.upperBound(Requirement).product(bounds.upperBound(Requirement))); + bounds.bound(partiallyRefines, bounds.upperBound(Requirement).product(bounds.upperBound(Requirement))); + } + + private static Formula infer(Relation r1, Relation r2, Relation r3) { + return r1.join(r2).in(r3); + } + + private static Formula transitive(Relation r) { + return r.join(r).in(r); + } + + private static Formula symmetric(Relation r) { + return r.eq(r.transpose()); + } + + private static Formula antisymmetric(Relation r) { + return r.intersection(r.transpose()).no(); + } + + private static Formula reflexive(Relation type, Relation rel) { + return type.product(type).in(rel); + } + + private static Formula irreflexive(Relation r) { + return Relation.IDEN.intersection(r).no(); + } + + @Override + public String toString() { return solution.toString();} + +} diff --git a/Source/kodkod/examples/kodkod/examples/alloyinecore/SimplifiedTheoryOfList.java b/Source/kodkod/examples/kodkod/examples/alloyinecore/SimplifiedTheoryOfList.java index 2b35f67..1f7e557 100644 --- a/Source/kodkod/examples/kodkod/examples/alloyinecore/SimplifiedTheoryOfList.java +++ b/Source/kodkod/examples/kodkod/examples/alloyinecore/SimplifiedTheoryOfList.java @@ -7,6 +7,7 @@ import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; import kodkod.engine.satlab.Z3Solver; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -16,6 +17,25 @@ import java.util.List; import java.util.stream.Collectors; +@ExampleMetadata( + Name = "SimplifiedTheoryOfList", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 1, + NestedRelationalJoins = 1, + TransitiveClosure = 1, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 1, + OrderedRelations = 0, + Constraints = 12 +) final class SimplifiedTheoryOfList { public static void main(String[] args) { diff --git a/Source/kodkod/examples/kodkod/examples/alloyinecore/TestModel.java b/Source/kodkod/examples/kodkod/examples/alloyinecore/TestModel.java new file mode 100644 index 0000000..6de5ee7 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/alloyinecore/TestModel.java @@ -0,0 +1,135 @@ +package kodkod.examples.alloyinecore; + +import kodkod.ast.Formula; +import kodkod.ast.Relation; +import kodkod.ast.Variable; +import kodkod.engine.Solution; +import kodkod.engine.Solver; +import kodkod.engine.satlab.SATFactory; +import kodkod.instance.Bounds; +import kodkod.instance.TupleFactory; +import kodkod.instance.Universe; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; + +public class TestModel { + + public static void main(String[] args) { + TestModel requirementsModel = new TestModel(); + System.out.println(requirementsModel); + + if (requirementsModel.solution.unsat()) { + System.out.println("High Level Core:"); + requirementsModel.solution.proof().highLevelCore().keySet().forEach(System.out::println); + System.out.println(); + System.out.println("Core:"); + requirementsModel.solution.proof().core().forEachRemaining(record -> { + StringBuilder sb = new StringBuilder(); + sb.append(record.node()).append("("); + sb.append(record.env().values().stream().flatMap(Collection::stream) + .map(tuple -> tuple.atom(0).toString()).collect(Collectors.joining(", "))); + sb.append(")"); + System.out.println(sb); + }); + } + } + + private java.util.List formulaList; + private Bounds bounds; + private Solution solution; + + private TestModel() { + formulaList = new ArrayList<>(); + solveExample(); + } + + private Relation Head = Relation.unary("Head"); + private Relation Tail = Relation.unary("Tail"); + private Relation List = Relation.unary("List"); + + private Relation cdr = Relation.binary("cdr"); + + private void solveExample() { + defineTypes(); + defineFormulas(); + createInstance(); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.Z3Solver); + + solution = solver.solve(Formula.and(formulaList), bounds); + } + + private void defineTypes() { + } + + private void defineFormulas() { + //formulaList.add(antisymmetric(cdr)); + //formulaList.add(irreflexive(cdr)); + + formulaList.add(Head.one()); + formulaList.add(Tail.one()); + + Variable a = Variable.unary("a"); + + formulaList.add(a.join(cdr).lone().forAll(a.oneOf(List))); + formulaList.add(List.eq(Head.join(cdr.reflexiveClosure()))); + formulaList.add(List.eq(Tail.join(cdr.transpose().reflexiveClosure()))); + formulaList.add(a.in(a.join(cdr.closure())).not().forAll(a.oneOf(List))); + } + + private void createInstance() { + Set reqs = new HashSet<>(); + + for (int i = 1; i <= 4; i++) { + reqs.add("r" + i); + } + + Set all = new HashSet<>(reqs); + + Universe universe = new Universe(all); + + TupleFactory tupleFactory = universe.factory(); + + bounds = new Bounds(universe); + + bounds.boundExactly(List, tupleFactory.setOf(reqs.toArray())); + bounds.bound(Head, tupleFactory.setOf(reqs.toArray())); + bounds.bound(Tail, tupleFactory.setOf(reqs.toArray())); + + bounds.bound(cdr, tupleFactory.allOf(2)); + } + + private static Formula infer(Relation r1, Relation r2, Relation r3) { + return r1.join(r2).in(r3); + } + + private static Formula transitive(Relation r) { + return r.join(r).in(r); + } + + private static Formula symmetric(Relation r) { + return r.eq(r.transpose()); + } + + private static Formula antisymmetric(Relation r) { + return r.intersection(r.transpose()).no(); + } + + private static Formula reflexive(Relation type, Relation rel) { + Variable v = Variable.unary(type.name().charAt(0) + ""); + return v.in(v.join(rel)).forAll(v.oneOf(type)); + } + + private static Formula irreflexive(Relation r) { + return Relation.IDEN.intersection(r).no(); + } + + @Override + public String toString() { return solution.toString();} + +} diff --git a/Source/kodkod/examples/kodkod/examples/alloyinecore/TheoryOfList.java b/Source/kodkod/examples/kodkod/examples/alloyinecore/TheoryOfList.java index 18ab534..3d58d13 100644 --- a/Source/kodkod/examples/kodkod/examples/alloyinecore/TheoryOfList.java +++ b/Source/kodkod/examples/kodkod/examples/alloyinecore/TheoryOfList.java @@ -6,6 +6,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -13,6 +14,25 @@ import java.util.ArrayList; import java.util.List; +@ExampleMetadata( + Name = "TheoryOfList", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 1, + NestedRelationalJoins = 1, + TransitiveClosure = 1, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 1, + OrderedRelations = 0, + Constraints = 13 +) final class TheoryOfList { public static void main(String[] args) { diff --git a/Source/kodkod/examples/kodkod/examples/csp/BlockedNQueens.java b/Source/kodkod/examples/kodkod/examples/csp/BlockedNQueens.java index a3b8067..f6a4aa3 100644 --- a/Source/kodkod/examples/kodkod/examples/csp/BlockedNQueens.java +++ b/Source/kodkod/examples/kodkod/examples/csp/BlockedNQueens.java @@ -43,6 +43,7 @@ import kodkod.engine.config.ConsoleReporter; import kodkod.engine.config.Options; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.Instance; import kodkod.instance.TupleFactory; @@ -56,6 +57,25 @@ * at http://asparagus.cs.uni-potsdam.de/?action=instances&id=15 * @author Emina Torlak */ +@ExampleMetadata( + Name = "BlockedNQueens", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 4, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 8, + TransitiveClosure = 1, + NestedQuantifiers = 0, + SetCardinality = 2, + Additions = 0, + Subtractions = 2, + Comparison = 1, + OrderedRelations = 1, + Constraints = 6 +) public final class BlockedNQueens { private final Relation queen, x, y, blocked, num, ord; diff --git a/Source/kodkod/examples/kodkod/examples/csp/BlockedNQueens2.java b/Source/kodkod/examples/kodkod/examples/csp/BlockedNQueens2.java index f14d32e..6891bb2 100644 --- a/Source/kodkod/examples/kodkod/examples/csp/BlockedNQueens2.java +++ b/Source/kodkod/examples/kodkod/examples/csp/BlockedNQueens2.java @@ -43,6 +43,7 @@ import kodkod.engine.config.ConsoleReporter; import kodkod.engine.config.Options; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.Instance; import kodkod.instance.TupleFactory; @@ -56,6 +57,25 @@ * at http://asparagus.cs.uni-potsdam.de/?action=instances&id=15 * @author Emina Torlak */ +@ExampleMetadata( + Name = "BlockedNQueens2", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 0, + TransitiveClosure = 1, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 1, + OrderedRelations = 1, + Constraints = 3 +) public final class BlockedNQueens2 { private final Relation queen, num, ord; diff --git a/Source/kodkod/examples/kodkod/examples/csp/GraphColoring.java b/Source/kodkod/examples/kodkod/examples/csp/GraphColoring.java index ec87c9b..deb3cc0 100644 --- a/Source/kodkod/examples/kodkod/examples/csp/GraphColoring.java +++ b/Source/kodkod/examples/kodkod/examples/csp/GraphColoring.java @@ -32,6 +32,7 @@ import kodkod.engine.Solver; import kodkod.engine.config.ConsoleReporter; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -45,6 +46,25 @@ * for example graph coloring problems instances. * @author Emina Torlak */ +@ExampleMetadata( + Name = "GraphColoring", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 1, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 2 +) public final class GraphColoring { private final Relation vertex, color, edges, v2c; private final Bounds bounds; diff --git a/Source/kodkod/examples/kodkod/examples/csp/HamiltonianCycle.java b/Source/kodkod/examples/kodkod/examples/csp/HamiltonianCycle.java index 25f4a7a..cfb0beb 100644 --- a/Source/kodkod/examples/kodkod/examples/csp/HamiltonianCycle.java +++ b/Source/kodkod/examples/kodkod/examples/csp/HamiltonianCycle.java @@ -28,6 +28,7 @@ import kodkod.engine.Solver; import kodkod.engine.config.ConsoleReporter; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.Instance; import kodkod.instance.TupleFactory; @@ -40,6 +41,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "HamiltonianCycle", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 0, + TransitiveClosure = 1, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 2 +) public final class HamiltonianCycle { private final Relation vertex, start, edges, cycle; diff --git a/Source/kodkod/examples/kodkod/examples/csp/LatinSquare.java b/Source/kodkod/examples/kodkod/examples/csp/LatinSquare.java index 687b4a3..0f85913 100644 --- a/Source/kodkod/examples/kodkod/examples/csp/LatinSquare.java +++ b/Source/kodkod/examples/kodkod/examples/csp/LatinSquare.java @@ -13,6 +13,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.Tuple; import kodkod.instance.TupleFactory; @@ -23,6 +24,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "LatinSquare", + Note = "", + IsCheck = false, + PartialModel = false, + BinaryRelations = 0, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 5, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 3 +) public final class LatinSquare { private final Relation square; diff --git a/Source/kodkod/examples/kodkod/examples/csp/MagicSeries.java b/Source/kodkod/examples/kodkod/examples/csp/MagicSeries.java index e61b895..680b61c 100644 --- a/Source/kodkod/examples/kodkod/examples/csp/MagicSeries.java +++ b/Source/kodkod/examples/kodkod/examples/csp/MagicSeries.java @@ -33,6 +33,7 @@ import kodkod.engine.Solver; import kodkod.engine.config.ConsoleReporter; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -42,6 +43,25 @@ * A Kodkod encoding of the magic series problem. * @author Emina Torlak */ +@ExampleMetadata( + Name = "LatinSquare", + Note = "", + IsCheck = false, + PartialModel = false, + BinaryRelations = 0, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 5, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 3 +) public final class MagicSeries { private final Relation num, bits, el; diff --git a/Source/kodkod/examples/kodkod/examples/csp/NQueens.java b/Source/kodkod/examples/kodkod/examples/csp/NQueens.java index 4b05995..93c085c 100644 --- a/Source/kodkod/examples/kodkod/examples/csp/NQueens.java +++ b/Source/kodkod/examples/kodkod/examples/csp/NQueens.java @@ -36,6 +36,7 @@ import kodkod.engine.config.ConsoleReporter; import kodkod.engine.config.Options; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.Instance; import kodkod.instance.TupleFactory; @@ -110,7 +111,7 @@ public static void main(String[] args) { System.out.println("encoding:"); System.out.println(PrettyPrinter.print(f, 1)); - s.options().setSolver(SATFactory.MiniSat); + s.options().setSolver(SATFactory.Z3Solver); s.options().setBitwidth(33 - Integer.numberOfLeadingZeros(n - 1)); s.options().setReporter(new ConsoleReporter()); @@ -134,6 +135,25 @@ public static void main(String[] args) { * A relational encoding of nqueens. * @author Emina Torlak */ + @ExampleMetadata( + Name = "RelQueens", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 8, + TransitiveClosure = 1, + NestedQuantifiers = 0, + SetCardinality = 2, + Additions = 0, + Subtractions = 0, + Comparison = 1, + OrderedRelations = 1, + Constraints = 5 + ) private static class RelQueens extends NQueens { private final Relation queen, x, y, num, ord; private final int n; @@ -256,6 +276,25 @@ void print(Instance instance, Options options) { * A log encoding of nqueens * @author Emina Torlak */ + @ExampleMetadata( + Name = "LogQueens", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 6, + Subtractions = 2, + Comparison = 5, + OrderedRelations = 0, + Constraints = 5 + ) private static class LogQueens extends NQueens { private final Relation queen, x, y; private final int n; @@ -367,6 +406,25 @@ void print(Instance instance, Options options) { * An explicit integer encoding of nqueens * @author Emina Torlak */ + @ExampleMetadata( + Name = "IntQueens", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 4, + Subtractions = 2, + Comparison = 1, + OrderedRelations = 0, + Constraints = 5 + ) private static class IntQueens extends NQueens { private final Relation queen, x, y; private final int n; diff --git a/Source/kodkod/examples/kodkod/examples/csp/SocialGolfer.java b/Source/kodkod/examples/kodkod/examples/csp/SocialGolfer.java index 34bdf8c..ef7d8a2 100644 --- a/Source/kodkod/examples/kodkod/examples/csp/SocialGolfer.java +++ b/Source/kodkod/examples/kodkod/examples/csp/SocialGolfer.java @@ -33,6 +33,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.Tuple; import kodkod.instance.TupleFactory; @@ -42,6 +43,25 @@ * A Kodkod encoding of the social golfer problem. * @author Emina Torlak */ +@ExampleMetadata( + Name = "SocialGolfer", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 0, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 1, + Additions = 1, + Subtractions = 0, + Comparison = 1, + OrderedRelations = 0, + Constraints = 3 +) public final class SocialGolfer { private final Relation plays, player, week, group, size; diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/discovery/INSLabelCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/discovery/INSLabelCheck.java new file mode 100644 index 0000000..bb9e4f1 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/discovery/INSLabelCheck.java @@ -0,0 +1,941 @@ +package kodkod.examples.models.algorithm.discovery; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; +@ExampleMetadata( + Name = "INSLabel", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 7, + TernaryRelations =1, + NaryRelations = 2, + HierarchicalTypes = 6, + NestedRelationalJoins = 24, + TransitiveClosure = 5, + NestedQuantifiers = 8, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints =41 +) + +public final class INSLabelCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Record"); + Relation x7 = Relation.unary("this/Attribute"); + Relation x8 = Relation.unary("this/Wildcard"); + Relation x9 = Relation.unary("this/Null"); + Relation x10 = Relation.unary("this/Value remainder"); + Relation x11 = Relation.unary("this/Label remainder"); + Relation x12 = Relation.unary("this/Node"); + Relation x13 = Relation.unary("this/Query"); + Relation x14 = Relation.unary("this/Advertisement"); + Relation x15 = Relation.unary("this/DB"); + Relation x16 = Relation.unary("this/AVTree remainder"); + Relation x17 = Relation.unary("this/LabelTree remainder"); + Relation x18 = Relation.unary("this/State"); + Relation x19 = Relation.nary("this/Node.label", 2); + Relation x20 = Relation.nary("this/LabelTree.root", 2); + Relation x21 = Relation.nary("this/LabelTree.nodes", 2); + Relation x22 = Relation.nary("this/LabelTree.children", 3); + Relation x23 = Relation.nary("this/AVTree.vnodes", 2); + Relation x24 = Relation.nary("this/AVTree.anodes", 2); + Relation x25 = Relation.unary("this/DB.records"); + Relation x26 = Relation.nary("this/DB.recs", 2); + Relation x27 = Relation.nary("this/State.conforms", 4); + Relation x28 = Relation.nary("this/State.lookup", 5); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Advertisement$0", + "DB$0", "Label$0", "Label$1", "Node$0", "Node$1", "Node$2", + "Node$3", "Null$0", "Query$0", "Record$0", "Record$1", "State$0", + "Wildcard$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Record$0")); + x6_upper.add(factory.tuple("Record$1")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Label$0")); + x7_upper.add(factory.tuple("Label$1")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Wildcard$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Null$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Label$0")); + x10_upper.add(factory.tuple("Label$1")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("Label$0")); + x11_upper.add(factory.tuple("Label$1")); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("Node$0")); + x12_upper.add(factory.tuple("Node$1")); + x12_upper.add(factory.tuple("Node$2")); + x12_upper.add(factory.tuple("Node$3")); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Query$0")); + bounds.boundExactly(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("Advertisement$0")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("DB$0")); + bounds.boundExactly(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + bounds.boundExactly(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + bounds.boundExactly(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("State$0")); + bounds.boundExactly(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Node$0").product(factory.tuple("Wildcard$0"))); + x19_upper.add(factory.tuple("Node$0").product(factory.tuple("Null$0"))); + x19_upper.add(factory.tuple("Node$0").product(factory.tuple("Label$0"))); + x19_upper.add(factory.tuple("Node$0").product(factory.tuple("Label$1"))); + x19_upper.add(factory.tuple("Node$1").product(factory.tuple("Wildcard$0"))); + x19_upper.add(factory.tuple("Node$1").product(factory.tuple("Null$0"))); + x19_upper.add(factory.tuple("Node$1").product(factory.tuple("Label$0"))); + x19_upper.add(factory.tuple("Node$1").product(factory.tuple("Label$1"))); + x19_upper.add(factory.tuple("Node$2").product(factory.tuple("Wildcard$0"))); + x19_upper.add(factory.tuple("Node$2").product(factory.tuple("Null$0"))); + x19_upper.add(factory.tuple("Node$2").product(factory.tuple("Label$0"))); + x19_upper.add(factory.tuple("Node$2").product(factory.tuple("Label$1"))); + x19_upper.add(factory.tuple("Node$3").product(factory.tuple("Wildcard$0"))); + x19_upper.add(factory.tuple("Node$3").product(factory.tuple("Null$0"))); + x19_upper.add(factory.tuple("Node$3").product(factory.tuple("Label$0"))); + x19_upper.add(factory.tuple("Node$3").product(factory.tuple("Label$1"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0"))); + x20_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1"))); + x20_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2"))); + x20_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$3"))); + x20_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0"))); + x20_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1"))); + x20_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2"))); + x20_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$3"))); + x20_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0"))); + x20_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1"))); + x20_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2"))); + x20_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$3"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0"))); + x21_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1"))); + x21_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2"))); + x21_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$3"))); + x21_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0"))); + x21_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1"))); + x21_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2"))); + x21_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$3"))); + x21_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0"))); + x21_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1"))); + x21_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2"))); + x21_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$3"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(3); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$3"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$3"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$3"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$3")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$3")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$3")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$3")).product(factory.tuple("Node$3"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$3"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$3"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$3"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$3")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$3")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$3")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$3")).product(factory.tuple("Node$3"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$3"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$3"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$3"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$3")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$3")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$3")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$3")).product(factory.tuple("Node$3"))); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0"))); + x23_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1"))); + x23_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2"))); + x23_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$3"))); + x23_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0"))); + x23_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1"))); + x23_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2"))); + x23_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$3"))); + x23_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0"))); + x23_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1"))); + x23_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2"))); + x23_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$3"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(2); + x24_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0"))); + x24_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1"))); + x24_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2"))); + x24_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$3"))); + x24_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0"))); + x24_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1"))); + x24_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2"))); + x24_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$3"))); + x24_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0"))); + x24_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1"))); + x24_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2"))); + x24_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$3"))); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(1); + x25_upper.add(factory.tuple("Record$0")); + x25_upper.add(factory.tuple("Record$1")); + bounds.bound(x25, x25_upper); + + TupleSet x26_upper = factory.noneOf(2); + x26_upper.add(factory.tuple("Node$0").product(factory.tuple("Record$0"))); + x26_upper.add(factory.tuple("Node$0").product(factory.tuple("Record$1"))); + x26_upper.add(factory.tuple("Node$1").product(factory.tuple("Record$0"))); + x26_upper.add(factory.tuple("Node$1").product(factory.tuple("Record$1"))); + x26_upper.add(factory.tuple("Node$2").product(factory.tuple("Record$0"))); + x26_upper.add(factory.tuple("Node$2").product(factory.tuple("Record$1"))); + x26_upper.add(factory.tuple("Node$3").product(factory.tuple("Record$0"))); + x26_upper.add(factory.tuple("Node$3").product(factory.tuple("Record$1"))); + bounds.bound(x26, x26_upper); + + TupleSet x27_upper = factory.noneOf(4); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$3"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$3"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$3"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$3")).product(factory.tuple("Node$0"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$3")).product(factory.tuple("Node$1"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$3")).product(factory.tuple("Node$2"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$3")).product(factory.tuple("Node$3"))); + bounds.bound(x27, x27_upper); + + TupleSet x28_upper = factory.noneOf(5); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$0")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$0")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$1")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$1")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$2")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$2")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$3")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$3")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$0")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$0")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$1")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$1")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$2")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$2")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$3")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$3")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$0")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$0")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$1")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$1")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$2")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$2")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$3")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$3")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$3")).product(factory.tuple("Node$0")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$3")).product(factory.tuple("Node$0")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$3")).product(factory.tuple("Node$1")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$3")).product(factory.tuple("Node$1")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$3")).product(factory.tuple("Node$2")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$3")).product(factory.tuple("Node$2")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$3")).product(factory.tuple("Node$3")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$3")).product(factory.tuple("Node$3")).product(factory.tuple("Record$1"))); + bounds.bound(x28, x28_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x31=x8.intersection(x9); + Formula x30=x31.no(); + Expression x35=x8.union(x9); + Expression x34=x35.union(x10); + Expression x33=x7.intersection(x34); + Formula x32=x33.no(); + Expression x37=x13.intersection(x14); + Formula x36=x37.no(); + Expression x40=x13.union(x14); + Expression x39=x40.intersection(x15); + Formula x38=x39.no(); + Variable x43=Variable.unary("LookupConforms2_this"); + Decls x42=x43.oneOf(x12); + Expression x46=x43.join(x19); + Formula x45=x46.one(); + Expression x49=x7.union(x34); + Expression x48=x49.union(x11); + Formula x47=x46.in(x48); + Formula x44=x45.and(x47); + Formula x41=x44.forAll(x42); + Expression x51=x19.join(Expression.UNIV); + Formula x50=x51.in(x12); + Variable x55=Variable.unary("LookupConforms2_a"); + Expression x56=x13.join(x24); + Decls x54=x55.oneOf(x56); + Expression x59=x13.join(x22); + Expression x58=x55.join(x59); + Formula x57=x58.one(); + Formula x53=x57.forAll(x54); + Expression x63=x14.join(x23); + Expression x62=x63.join(x19); + Formula x61=x8.in(x62); + Formula x60=x61.not(); + Expression x66=x15.product(x25); + Expression x65=x15.join(x66); + Formula x64=x65.in(x6); + Expression x71=x15.product(x26); + Expression x70=x15.join(x71); + Expression x74=x15.join(x23); + Expression x75=x15.join(x20); + Expression x73=x74.difference(x75); + Expression x76=x15.join(x66); + Expression x72=x73.product(x76); + Formula x69=x70.in(x72); + Variable x79=Variable.unary(""); + Decls x78=x79.oneOf(x73); + Expression x81=x79.join(x70); + Expression x82=x15.join(x66); + Formula x80=x81.in(x82); + Formula x77=x80.forAll(x78); + Formula x68=x69.and(x77); + Variable x85=Variable.unary(""); + Decls x84=x85.oneOf(x76); + Expression x88=x70.join(x85); + Formula x87=x88.some(); + Expression x91=x15.join(x23); + Expression x92=x15.join(x20); + Expression x90=x91.difference(x92); + Formula x89=x88.in(x90); + Formula x86=x87.and(x89); + Formula x83=x86.forAll(x84); + Formula x67=x68.and(x83); + Expression x98=x15.join(x23); + Expression x97=x98.join(x19); + Formula x96=x8.in(x97); + Formula x95=x96.not(); + Variable x102=Variable.unary("LookupConforms2_a"); + Expression x103=x15.join(x24); + Decls x101=x102.oneOf(x103); + Expression x105=x102.join(x26); + Formula x104=x105.no(); + Formula x100=x104.forAll(x101); + Variable x108=Variable.unary("LookupConforms2_a"); + Expression x109=x15.join(x24); + Decls x107=x108.oneOf(x109); + Variable x113=Variable.unary("LookupConforms2_v"); + Expression x115=x15.join(x22); + Expression x114=x108.join(x115); + Decls x112=x113.oneOf(x114); + Variable x117=Variable.unary("LookupConforms2_v'"); + Decls x116=x117.oneOf(x114); + Decls x111=x112.and(x116); + Expression x121=x113.intersection(x117); + Formula x120=x121.no(); + Formula x119=x120.not(); + Expression x128=x15.join(x22); + Expression x127=x128.closure(); + Expression x137=Expression.INTS.union(x5); + Expression x136=x137.union(x6); + Expression x135=x136.union(x48); + Expression x134=x135.union(x12); + Expression x141=x40.union(x15); + Expression x140=x141.union(x16); + Expression x139=x140.union(x17); + Expression x133=x134.union(x139); + Expression x132=x133.union(x18); + Expression x131=x132.product(Expression.UNIV); + Expression x129=Expression.IDEN.intersection(x131); + Expression x126=x127.union(x129); + Expression x125=x113.join(x126); + Expression x124=x125.join(x26); + Expression x146=x15.join(x22); + Expression x145=x146.closure(); + Expression x148=x132.product(Expression.UNIV); + Expression x147=Expression.IDEN.intersection(x148); + Expression x144=x145.union(x147); + Expression x143=x117.join(x144); + Expression x142=x143.join(x26); + Expression x123=x124.intersection(x142); + Formula x122=x123.no(); + Formula x118=x119.or(x122); + Formula x110=x118.forAll(x111); + Formula x106=x110.forAll(x107); + Formula x99=x100.and(x106); + Formula x94=x95.and(x99); + Variable x151=Variable.unary("LookupConforms2_v"); + Expression x152=x15.join(x23); + Decls x150=x151.oneOf(x152); + Expression x158=x15.join(x22); + Expression x157=x151.join(x158); + Formula x156=x157.no(); + Formula x155=x156.not(); + Expression x160=x151.join(x26); + Formula x159=x160.some(); + Formula x154=x155.or(x159); + Expression x163=x151.join(x26); + Expression x168=x15.join(x22); + Expression x167=x168.transpose(); + Expression x166=x167.closure(); + Expression x165=x151.join(x166); + Expression x164=x165.join(x26); + Expression x162=x163.intersection(x164); + Formula x161=x162.no(); + Formula x153=x154.and(x161); + Formula x149=x153.forAll(x150); + Formula x93=x94.and(x149); + Variable x171=Variable.unary("LookupConforms2_this"); + Decls x170=x171.oneOf(x140); + Expression x173=x171.join(x23); + Expression x174=x171.join(x21); + Formula x172=x173.in(x174); + Formula x169=x172.forAll(x170); + Expression x176=x23.join(Expression.UNIV); + Formula x175=x176.in(x140); + Variable x179=Variable.unary("LookupConforms2_this"); + Decls x178=x179.oneOf(x140); + Expression x181=x179.join(x24); + Expression x182=x179.join(x21); + Formula x180=x181.in(x182); + Formula x177=x180.forAll(x178); + Expression x184=x24.join(Expression.UNIV); + Formula x183=x184.in(x140); + Variable x187=Variable.unary("LookupConforms2_this"); + Decls x186=x187.oneOf(x140); + Expression x191=x187.join(x20); + Expression x192=x187.join(x23); + Formula x190=x191.in(x192); + Expression x197=x187.join(x20); + Expression x196=x197.join(x19); + Formula x195=x196.eq(x9); + Expression x202=x187.join(x24); + Expression x201=x202.join(x19); + Formula x200=x201.in(x7); + Variable x205=Variable.unary("LookupConforms2_v"); + Expression x206=x187.join(x23); + Decls x204=x205.oneOf(x206); + Expression x209=x187.join(x22); + Expression x208=x205.join(x209); + Expression x210=x187.join(x24); + Formula x207=x208.in(x210); + Formula x203=x207.forAll(x204); + Formula x199=x200.and(x203); + Expression x214=x19.transpose(); + Expression x213=x8.join(x214); + Expression x215=x187.join(x22); + Expression x212=x213.join(x215); + Formula x211=x212.no(); + Formula x198=x199.and(x211); + Formula x194=x195.and(x198); + Expression x218=x187.join(x23); + Expression x217=x218.join(x19); + Formula x216=x217.in(x34); + Formula x193=x194.and(x216); + Formula x189=x190.and(x193); + Expression x226=x187.join(x23); + Expression x227=x187.join(x20); + Expression x225=x226.difference(x227); + Expression x224=x225.join(x19); + Expression x229=x187.join(x24); + Expression x228=x229.join(x19); + Expression x223=x224.union(x228); + Formula x222=x9.in(x223); + Formula x221=x222.not(); + Variable x232=Variable.unary("LookupConforms2_n"); + Expression x233=x187.join(x21); + Decls x231=x232.oneOf(x233); + Variable x237=Variable.unary("LookupConforms2_c"); + Expression x239=x187.join(x22); + Expression x238=x232.join(x239); + Decls x236=x237.oneOf(x238); + Variable x241=Variable.unary("LookupConforms2_c'"); + Decls x240=x241.oneOf(x238); + Decls x235=x236.and(x240); + Expression x244=x237.join(x19); + Expression x245=x241.join(x19); + Formula x243=x244.eq(x245); + Formula x242=x243.not(); + Formula x234=x242.forAll(x235); + Formula x230=x234.forAll(x231); + Formula x220=x221.and(x230); + Variable x248=Variable.unary("LookupConforms2_a"); + Expression x249=x187.join(x24); + Decls x247=x248.oneOf(x249); + Expression x253=x187.join(x22); + Expression x252=x248.join(x253); + Expression x254=x187.join(x23); + Formula x251=x252.in(x254); + Expression x257=x187.join(x22); + Expression x256=x248.join(x257); + Formula x255=x256.some(); + Formula x250=x251.and(x255); + Formula x246=x250.forAll(x247); + Formula x219=x220.and(x246); + Formula x188=x189.and(x219); + Formula x185=x188.forAll(x186); + Variable x260=Variable.unary("LookupConforms2_this"); + Decls x259=x260.oneOf(x139); + Expression x263=x260.join(x20); + Formula x262=x263.one(); + Formula x264=x263.in(x12); + Formula x261=x262.and(x264); + Formula x258=x261.forAll(x259); + Expression x266=x20.join(Expression.UNIV); + Formula x265=x266.in(x139); + Variable x269=Variable.unary("LookupConforms2_this"); + Decls x268=x269.oneOf(x139); + Expression x271=x269.join(x21); + Formula x270=x271.in(x12); + Formula x267=x270.forAll(x268); + Expression x273=x21.join(Expression.UNIV); + Formula x272=x273.in(x139); + Variable x276=Variable.unary("LookupConforms2_this"); + Decls x275=x276.oneOf(x139); + Expression x280=x276.join(x22); + Expression x282=x276.join(x21); + Expression x284=x276.join(x21); + Expression x285=x276.join(x20); + Expression x283=x284.difference(x285); + Expression x281=x282.product(x283); + Formula x279=x280.in(x281); + Variable x288=Variable.unary(""); + Decls x287=x288.oneOf(x282); + Expression x290=x288.join(x280); + Expression x292=x276.join(x21); + Expression x293=x276.join(x20); + Expression x291=x292.difference(x293); + Formula x289=x290.in(x291); + Formula x286=x289.forAll(x287); + Formula x278=x279.and(x286); + Variable x296=Variable.unary(""); + Decls x295=x296.oneOf(x283); + Expression x299=x280.join(x296); + Formula x298=x299.one(); + Expression x301=x276.join(x21); + Formula x300=x299.in(x301); + Formula x297=x298.and(x300); + Formula x294=x297.forAll(x295); + Formula x277=x278.and(x294); + Formula x274=x277.forAll(x275); + Expression x304=x22.join(Expression.UNIV); + Expression x303=x304.join(Expression.UNIV); + Formula x302=x303.in(x139); + Variable x307=Variable.unary("LookupConforms2_this"); + Decls x306=x307.oneOf(x139); + Expression x310=x307.join(x21); + Expression x312=x307.join(x20); + Expression x315=x307.join(x22); + Expression x314=x315.closure(); + Expression x317=x132.product(Expression.UNIV); + Expression x316=Expression.IDEN.intersection(x317); + Expression x313=x314.union(x316); + Expression x311=x312.join(x313); + Formula x309=x310.eq(x311); + Expression x320=x307.join(x20); + Expression x321=x307.join(x22); + Expression x319=x320.join(x321); + Formula x318=x319.some(); + Formula x308=x309.and(x318); + Formula x305=x308.forAll(x306); + Expression x324=x18.product(x27); + Expression x323=x18.join(x324); + Expression x327=x12.product(x12); + Expression x326=x14.product(x327); + Expression x325=x13.product(x326); + Formula x322=x323.in(x325); + Expression x330=x18.product(x28); + Expression x329=x18.join(x330); + Expression x334=x12.product(x6); + Expression x333=x12.product(x334); + Expression x332=x13.product(x333); + Expression x331=x15.product(x332); + Formula x328=x329.in(x331); + Variable x337=Variable.unary("LookupConforms2_q"); + Decls x336=x337.oneOf(x13); + Variable x340=Variable.unary("LookupConforms2_a"); + Decls x339=x340.oneOf(x14); + Variable x343=Variable.unary("LookupConforms2_nq"); + Decls x342=x343.oneOf(x12); + Variable x346=Variable.unary("LookupConforms2_na"); + Decls x345=x346.oneOf(x12); + Expression x351=x337.join(x27); + Expression x350=x340.join(x351); + Expression x349=x343.join(x350); + Formula x348=x346.in(x349); + Expression x354=x343.join(x19); + Expression x356=x346.join(x19); + Expression x355=x8.union(x356); + Formula x353=x354.in(x355); + Variable x359=Variable.unary("LookupConforms2_nq'"); + Expression x361=x337.join(x22); + Expression x360=x343.join(x361); + Decls x358=x359.oneOf(x360); + Variable x364=Variable.unary("LookupConforms2_na'"); + Expression x366=x340.join(x22); + Expression x365=x346.join(x366); + Decls x363=x364.oneOf(x365); + Expression x370=x337.join(x27); + Expression x369=x340.join(x370); + Expression x368=x359.join(x369); + Formula x367=x364.in(x368); + Formula x362=x367.forSome(x363); + Formula x357=x362.forAll(x358); + Formula x352=x353.and(x357); + Formula x347=x348.iff(x352); + Formula x344=x347.forAll(x345); + Formula x341=x344.forAll(x342); + Formula x338=x341.forAll(x339); + Formula x335=x338.forAll(x336); + Variable x374=Variable.unary("LookupConforms2_db"); + Decls x373=x374.oneOf(x15); + Variable x376=Variable.unary("LookupConforms2_q"); + Decls x375=x376.oneOf(x13); + Variable x378=Variable.unary("LookupConforms2_T"); + Decls x377=x378.oneOf(x12); + Variable x380=Variable.unary("LookupConforms2_n"); + Decls x379=x380.oneOf(x12); + Variable x382=Variable.unary("LookupConforms2_r"); + Decls x381=x382.oneOf(x6); + Decls x372=x373.and(x375).and(x377).and(x379).and(x381); + Expression x388=x374.join(x28); + Expression x387=x376.join(x388); + Expression x386=x378.join(x387); + Expression x385=x380.join(x386); + Formula x384=x382.in(x385); + Variable x391=Variable.unary("LookupConforms2_na"); + Expression x393=x376.join(x22); + Expression x392=x380.join(x393); + Decls x390=x391.oneOf(x392); + Variable x396=Variable.unary("LookupConforms2_nv"); + Expression x398=x376.join(x22); + Expression x397=x391.join(x398); + Decls x395=x396.oneOf(x397); + Variable x401=Variable.unary("LookupConforms2_Ta"); + Expression x403=x374.join(x22); + Expression x402=x378.join(x403); + Decls x400=x401.oneOf(x402); + Expression x406=x401.join(x19); + Expression x407=x391.join(x19); + Formula x405=x406.eq(x407); + Expression x411=x396.join(x19); + Formula x410=x411.eq(x8); + Expression x416=x374.join(x22); + Expression x415=x416.closure(); + Expression x414=x401.join(x415); + Expression x417=x374.join(x71); + Expression x413=x414.join(x417); + Formula x412=x382.in(x413); + Formula x409=x410.implies(x412); + Formula x419=x410.not(); + Variable x422=Variable.unary("LookupConforms2_Tv"); + Expression x424=x374.join(x22); + Expression x423=x401.join(x424); + Decls x421=x422.oneOf(x423); + Expression x427=x422.join(x19); + Expression x428=x396.join(x19); + Formula x426=x427.eq(x428); + Expression x433=x376.join(x22); + Expression x432=x396.join(x433); + Formula x431=x432.no(); + Expression x439=x374.join(x22); + Expression x438=x439.closure(); + Expression x441=x132.product(Expression.UNIV); + Expression x440=Expression.IDEN.intersection(x441); + Expression x437=x438.union(x440); + Expression x436=x422.join(x437); + Expression x442=x374.join(x71); + Expression x435=x436.join(x442); + Formula x434=x382.in(x435); + Formula x430=x431.implies(x434); + Formula x444=x431.not(); + Expression x449=x374.join(x28); + Expression x448=x376.join(x449); + Expression x447=x422.join(x448); + Expression x446=x396.join(x447); + Formula x445=x382.in(x446); + Formula x443=x444.implies(x445); + Formula x429=x430.and(x443); + Formula x425=x426.and(x429); + Formula x420=x425.forSome(x421); + Formula x418=x419.implies(x420); + Formula x408=x409.and(x418); + Formula x404=x405.and(x408); + Formula x399=x404.forSome(x400); + Formula x394=x399.forAll(x395); + Formula x389=x394.forAll(x390); + Formula x383=x384.iff(x389); + Formula x371=x383.forAll(x372); + Variable x453=Variable.unary("LookupConforms2_q"); + Decls x452=x453.oneOf(x13); + Variable x456=Variable.unary("LookupConforms2_db"); + Decls x455=x456.oneOf(x15); + Variable x459=Variable.unary("LookupConforms2_r"); + Decls x458=x459.oneOf(x6); + Variable x462=Variable.unary("LookupConforms2_a"); + Decls x461=x462.oneOf(x14); + Expression x468=x462.join(x20); + Expression x469=x456.join(x20); + Formula x467=x468.eq(x469); + Expression x473=x462.join(x21); + Expression x475=x456.join(x21); + Expression x479=x456.join(x71); + Expression x478=x479.transpose(); + Expression x477=x459.join(x478); + Expression x483=x456.join(x22); + Expression x482=x483.transpose(); + Expression x481=x482.closure(); + Expression x485=x132.product(Expression.UNIV); + Expression x484=Expression.IDEN.intersection(x485); + Expression x480=x481.union(x484); + Expression x476=x477.join(x480); + Expression x474=x475.intersection(x476); + Formula x472=x473.eq(x474); + Expression x487=x462.join(x23); + Expression x489=x456.join(x23); + Expression x493=x456.join(x71); + Expression x492=x493.transpose(); + Expression x491=x459.join(x492); + Expression x497=x456.join(x22); + Expression x496=x497.transpose(); + Expression x495=x496.closure(); + Expression x499=x132.product(Expression.UNIV); + Expression x498=Expression.IDEN.intersection(x499); + Expression x494=x495.union(x498); + Expression x490=x491.join(x494); + Expression x488=x489.intersection(x490); + Formula x486=x487.eq(x488); + Formula x471=x472.and(x486); + Variable x502=Variable.unary("Get_n"); + Expression x503=x462.join(x21); + Decls x501=x502.oneOf(x503); + Expression x507=x462.join(x22); + Expression x506=x507.transpose(); + Expression x505=x502.join(x506); + Expression x510=x456.join(x22); + Expression x509=x510.transpose(); + Expression x508=x502.join(x509); + Formula x504=x505.eq(x508); + Formula x500=x504.forAll(x501); + Formula x470=x471.and(x500); + Formula x466=x467.and(x470); + Expression x512=x462.join(x24); + Expression x514=x456.join(x24); + Expression x518=x456.join(x71); + Expression x517=x518.transpose(); + Expression x516=x459.join(x517); + Expression x522=x456.join(x22); + Expression x521=x522.transpose(); + Expression x520=x521.closure(); + Expression x524=x132.product(Expression.UNIV); + Expression x523=Expression.IDEN.intersection(x524); + Expression x519=x520.union(x523); + Expression x515=x516.join(x519); + Expression x513=x514.intersection(x515); + Formula x511=x512.eq(x513); + Formula x465=x466.and(x511); + Formula x464=x465.not(); + Expression x528=x453.join(x20); + Expression x530=x456.join(x20); + Expression x532=x456.join(x28); + Expression x531=x453.join(x532); + Expression x529=x530.join(x531); + Expression x527=x528.join(x529); + Formula x526=x459.in(x527); + Expression x534=x462.join(x20); + Expression x536=x453.join(x20); + Expression x538=x453.join(x27); + Expression x537=x462.join(x538); + Expression x535=x536.join(x537); + Formula x533=x534.in(x535); + Formula x525=x526.iff(x533); + Formula x463=x464.or(x525); + Formula x460=x463.forAll(x461); + Formula x457=x460.forAll(x458); + Formula x454=x457.forAll(x455); + Formula x451=x454.forAll(x452); + Formula x450=x451.not(); + Formula x539=x0.eq(x0); + Formula x540=x1.eq(x1); + Formula x541=x2.eq(x2); + Formula x542=x3.eq(x3); + Formula x543=x4.eq(x4); + Formula x544=x5.eq(x5); + Formula x545=x6.eq(x6); + Formula x546=x7.eq(x7); + Formula x547=x8.eq(x8); + Formula x548=x9.eq(x9); + Formula x549=x10.eq(x10); + Formula x550=x11.eq(x11); + Formula x551=x12.eq(x12); + Formula x552=x13.eq(x13); + Formula x553=x14.eq(x14); + Formula x554=x15.eq(x15); + Formula x555=x16.eq(x16); + Formula x556=x17.eq(x17); + Formula x557=x18.eq(x18); + Formula x558=x19.eq(x19); + Formula x559=x20.eq(x20); + Formula x560=x21.eq(x21); + Formula x561=x22.eq(x22); + Formula x562=x23.eq(x23); + Formula x563=x24.eq(x24); + Formula x564=x25.eq(x25); + Formula x565=x26.eq(x26); + Formula x566=x27.eq(x27); + Formula x567=x28.eq(x28); + Formula x29=Formula.compose(FormulaOperator.AND, x30, x32, x36, x38, x41, x50, x53, x60, x64, x67, x93, x169, x175, x177, x183, x185, x258, x265, x267, x272, x274, x302, x305, x322, x328, x335, x371, x450, x539, x540, x541, x542, x543, x544, x545, x546, x547, x548, x549, x550, x551, x552, x553, x554, x555, x556, x557, x558, x559, x560, x561, x562, x563, x564, x565, x566, x567); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x29,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/discovery/INSLabelRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/discovery/INSLabelRun.java new file mode 100644 index 0000000..cc9e5fd --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/discovery/INSLabelRun.java @@ -0,0 +1,810 @@ +package kodkod.examples.models.algorithm.discovery; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "INSLabel", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 7, + TernaryRelations =1, + NaryRelations = 2, + HierarchicalTypes = 6, + NestedRelationalJoins = 24, + TransitiveClosure = 5, + NestedQuantifiers = 8, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints =41 +) +public final class INSLabelRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Record"); + Relation x7 = Relation.unary("this/Attribute"); + Relation x8 = Relation.unary("this/Wildcard"); + Relation x9 = Relation.unary("this/Null"); + Relation x10 = Relation.unary("this/Value remainder"); + Relation x11 = Relation.unary("this/Label remainder"); + Relation x12 = Relation.unary("this/Node"); + Relation x13 = Relation.unary("this/Query"); + Relation x14 = Relation.unary("this/Advertisement"); + Relation x15 = Relation.unary("this/DB"); + Relation x16 = Relation.unary("this/AVTree remainder"); + Relation x17 = Relation.unary("this/LabelTree remainder"); + Relation x18 = Relation.unary("this/State"); + Relation x19 = Relation.nary("this/Node.label", 2); + Relation x20 = Relation.nary("this/LabelTree.root", 2); + Relation x21 = Relation.nary("this/LabelTree.nodes", 2); + Relation x22 = Relation.nary("this/LabelTree.children", 3); + Relation x23 = Relation.nary("this/AVTree.vnodes", 2); + Relation x24 = Relation.nary("this/AVTree.anodes", 2); + Relation x25 = Relation.unary("this/DB.records"); + Relation x26 = Relation.nary("this/DB.recs", 2); + Relation x27 = Relation.nary("this/State.conforms", 4); + Relation x28 = Relation.nary("this/State.lookup", 5); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Advertisement$0", + "DB$0", "Label$0", "Node$0", "Node$1", "Node$2", "Null$0", + "Query$0", "Record$0", "Record$1", "Record$2", "State$0", "Wildcard$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Record$0")); + x6_upper.add(factory.tuple("Record$1")); + x6_upper.add(factory.tuple("Record$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Label$0")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Wildcard$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Null$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Label$0")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("Label$0")); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("Node$0")); + x12_upper.add(factory.tuple("Node$1")); + x12_upper.add(factory.tuple("Node$2")); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Query$0")); + bounds.boundExactly(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("Advertisement$0")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("DB$0")); + bounds.boundExactly(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + bounds.boundExactly(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + bounds.boundExactly(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("State$0")); + bounds.boundExactly(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Node$0").product(factory.tuple("Wildcard$0"))); + x19_upper.add(factory.tuple("Node$0").product(factory.tuple("Null$0"))); + x19_upper.add(factory.tuple("Node$0").product(factory.tuple("Label$0"))); + x19_upper.add(factory.tuple("Node$1").product(factory.tuple("Wildcard$0"))); + x19_upper.add(factory.tuple("Node$1").product(factory.tuple("Null$0"))); + x19_upper.add(factory.tuple("Node$1").product(factory.tuple("Label$0"))); + x19_upper.add(factory.tuple("Node$2").product(factory.tuple("Wildcard$0"))); + x19_upper.add(factory.tuple("Node$2").product(factory.tuple("Null$0"))); + x19_upper.add(factory.tuple("Node$2").product(factory.tuple("Label$0"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0"))); + x20_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1"))); + x20_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2"))); + x20_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0"))); + x20_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1"))); + x20_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2"))); + x20_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0"))); + x20_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1"))); + x20_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0"))); + x21_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1"))); + x21_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2"))); + x21_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0"))); + x21_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1"))); + x21_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2"))); + x21_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0"))); + x21_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1"))); + x21_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(3); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x22_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0"))); + x23_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1"))); + x23_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2"))); + x23_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0"))); + x23_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1"))); + x23_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2"))); + x23_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0"))); + x23_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1"))); + x23_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(2); + x24_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$0"))); + x24_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$1"))); + x24_upper.add(factory.tuple("Query$0").product(factory.tuple("Node$2"))); + x24_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$0"))); + x24_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$1"))); + x24_upper.add(factory.tuple("Advertisement$0").product(factory.tuple("Node$2"))); + x24_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$0"))); + x24_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$1"))); + x24_upper.add(factory.tuple("DB$0").product(factory.tuple("Node$2"))); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(1); + x25_upper.add(factory.tuple("Record$0")); + x25_upper.add(factory.tuple("Record$1")); + x25_upper.add(factory.tuple("Record$2")); + bounds.bound(x25, x25_upper); + + TupleSet x26_upper = factory.noneOf(2); + x26_upper.add(factory.tuple("Node$0").product(factory.tuple("Record$0"))); + x26_upper.add(factory.tuple("Node$0").product(factory.tuple("Record$1"))); + x26_upper.add(factory.tuple("Node$0").product(factory.tuple("Record$2"))); + x26_upper.add(factory.tuple("Node$1").product(factory.tuple("Record$0"))); + x26_upper.add(factory.tuple("Node$1").product(factory.tuple("Record$1"))); + x26_upper.add(factory.tuple("Node$1").product(factory.tuple("Record$2"))); + x26_upper.add(factory.tuple("Node$2").product(factory.tuple("Record$0"))); + x26_upper.add(factory.tuple("Node$2").product(factory.tuple("Record$1"))); + x26_upper.add(factory.tuple("Node$2").product(factory.tuple("Record$2"))); + bounds.bound(x26, x26_upper); + + TupleSet x27_upper = factory.noneOf(4); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x27_upper.add(factory.tuple("Query$0").product(factory.tuple("Advertisement$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + bounds.bound(x27, x27_upper); + + TupleSet x28_upper = factory.noneOf(5); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$0")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$0")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$0")).product(factory.tuple("Record$2"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$1")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$1")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$1")).product(factory.tuple("Record$2"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$2")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$2")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$0")).product(factory.tuple("Node$2")).product(factory.tuple("Record$2"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$0")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$0")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$0")).product(factory.tuple("Record$2"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$1")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$1")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$1")).product(factory.tuple("Record$2"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$2")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$2")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$1")).product(factory.tuple("Node$2")).product(factory.tuple("Record$2"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$0")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$0")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$0")).product(factory.tuple("Record$2"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$1")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$1")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$1")).product(factory.tuple("Record$2"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$2")).product(factory.tuple("Record$0"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$2")).product(factory.tuple("Record$1"))); + x28_upper.add(factory.tuple("DB$0").product(factory.tuple("Query$0")).product(factory.tuple("Node$2")).product(factory.tuple("Node$2")).product(factory.tuple("Record$2"))); + bounds.bound(x28, x28_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x31=x8.intersection(x9); + Formula x30=x31.no(); + Expression x35=x8.union(x9); + Expression x34=x35.union(x10); + Expression x33=x7.intersection(x34); + Formula x32=x33.no(); + Expression x37=x13.intersection(x14); + Formula x36=x37.no(); + Expression x40=x13.union(x14); + Expression x39=x40.intersection(x15); + Formula x38=x39.no(); + Variable x43=Variable.unary("Lookup_this"); + Decls x42=x43.oneOf(x12); + Expression x46=x43.join(x19); + Formula x45=x46.one(); + Expression x49=x7.union(x34); + Expression x48=x49.union(x11); + Formula x47=x46.in(x48); + Formula x44=x45.and(x47); + Formula x41=x44.forAll(x42); + Expression x51=x19.join(Expression.UNIV); + Formula x50=x51.in(x12); + Variable x55=Variable.unary("Lookup_a"); + Expression x56=x13.join(x24); + Decls x54=x55.oneOf(x56); + Expression x59=x13.join(x22); + Expression x58=x55.join(x59); + Formula x57=x58.one(); + Formula x53=x57.forAll(x54); + Expression x63=x14.join(x23); + Expression x62=x63.join(x19); + Formula x61=x8.in(x62); + Formula x60=x61.not(); + Expression x66=x15.product(x25); + Expression x65=x15.join(x66); + Formula x64=x65.in(x6); + Expression x71=x15.product(x26); + Expression x70=x15.join(x71); + Expression x74=x15.join(x23); + Expression x75=x15.join(x20); + Expression x73=x74.difference(x75); + Expression x76=x15.join(x66); + Expression x72=x73.product(x76); + Formula x69=x70.in(x72); + Variable x79=Variable.unary(""); + Decls x78=x79.oneOf(x73); + Expression x81=x79.join(x70); + Expression x82=x15.join(x66); + Formula x80=x81.in(x82); + Formula x77=x80.forAll(x78); + Formula x68=x69.and(x77); + Variable x85=Variable.unary(""); + Decls x84=x85.oneOf(x76); + Expression x88=x70.join(x85); + Formula x87=x88.some(); + Expression x91=x15.join(x23); + Expression x92=x15.join(x20); + Expression x90=x91.difference(x92); + Formula x89=x88.in(x90); + Formula x86=x87.and(x89); + Formula x83=x86.forAll(x84); + Formula x67=x68.and(x83); + Expression x98=x15.join(x23); + Expression x97=x98.join(x19); + Formula x96=x8.in(x97); + Formula x95=x96.not(); + Variable x102=Variable.unary("Lookup_a"); + Expression x103=x15.join(x24); + Decls x101=x102.oneOf(x103); + Expression x105=x102.join(x26); + Formula x104=x105.no(); + Formula x100=x104.forAll(x101); + Variable x108=Variable.unary("Lookup_a"); + Expression x109=x15.join(x24); + Decls x107=x108.oneOf(x109); + Variable x113=Variable.unary("Lookup_v"); + Expression x115=x15.join(x22); + Expression x114=x108.join(x115); + Decls x112=x113.oneOf(x114); + Variable x117=Variable.unary("Lookup_v'"); + Decls x116=x117.oneOf(x114); + Decls x111=x112.and(x116); + Expression x121=x113.intersection(x117); + Formula x120=x121.no(); + Formula x119=x120.not(); + Expression x128=x15.join(x22); + Expression x127=x128.closure(); + Expression x137=Expression.INTS.union(x5); + Expression x136=x137.union(x6); + Expression x135=x136.union(x48); + Expression x134=x135.union(x12); + Expression x141=x40.union(x15); + Expression x140=x141.union(x16); + Expression x139=x140.union(x17); + Expression x133=x134.union(x139); + Expression x132=x133.union(x18); + Expression x131=x132.product(Expression.UNIV); + Expression x129=Expression.IDEN.intersection(x131); + Expression x126=x127.union(x129); + Expression x125=x113.join(x126); + Expression x124=x125.join(x26); + Expression x146=x15.join(x22); + Expression x145=x146.closure(); + Expression x148=x132.product(Expression.UNIV); + Expression x147=Expression.IDEN.intersection(x148); + Expression x144=x145.union(x147); + Expression x143=x117.join(x144); + Expression x142=x143.join(x26); + Expression x123=x124.intersection(x142); + Formula x122=x123.no(); + Formula x118=x119.or(x122); + Formula x110=x118.forAll(x111); + Formula x106=x110.forAll(x107); + Formula x99=x100.and(x106); + Formula x94=x95.and(x99); + Variable x151=Variable.unary("Lookup_v"); + Expression x152=x15.join(x23); + Decls x150=x151.oneOf(x152); + Expression x158=x15.join(x22); + Expression x157=x151.join(x158); + Formula x156=x157.no(); + Formula x155=x156.not(); + Expression x160=x151.join(x26); + Formula x159=x160.some(); + Formula x154=x155.or(x159); + Expression x163=x151.join(x26); + Expression x168=x15.join(x22); + Expression x167=x168.transpose(); + Expression x166=x167.closure(); + Expression x165=x151.join(x166); + Expression x164=x165.join(x26); + Expression x162=x163.intersection(x164); + Formula x161=x162.no(); + Formula x153=x154.and(x161); + Formula x149=x153.forAll(x150); + Formula x93=x94.and(x149); + Variable x171=Variable.unary("Lookup_this"); + Decls x170=x171.oneOf(x140); + Expression x173=x171.join(x23); + Expression x174=x171.join(x21); + Formula x172=x173.in(x174); + Formula x169=x172.forAll(x170); + Expression x176=x23.join(Expression.UNIV); + Formula x175=x176.in(x140); + Variable x179=Variable.unary("Lookup_this"); + Decls x178=x179.oneOf(x140); + Expression x181=x179.join(x24); + Expression x182=x179.join(x21); + Formula x180=x181.in(x182); + Formula x177=x180.forAll(x178); + Expression x184=x24.join(Expression.UNIV); + Formula x183=x184.in(x140); + Variable x187=Variable.unary("Lookup_this"); + Decls x186=x187.oneOf(x140); + Expression x191=x187.join(x20); + Expression x192=x187.join(x23); + Formula x190=x191.in(x192); + Expression x197=x187.join(x20); + Expression x196=x197.join(x19); + Formula x195=x196.eq(x9); + Expression x202=x187.join(x24); + Expression x201=x202.join(x19); + Formula x200=x201.in(x7); + Variable x205=Variable.unary("Lookup_v"); + Expression x206=x187.join(x23); + Decls x204=x205.oneOf(x206); + Expression x209=x187.join(x22); + Expression x208=x205.join(x209); + Expression x210=x187.join(x24); + Formula x207=x208.in(x210); + Formula x203=x207.forAll(x204); + Formula x199=x200.and(x203); + Expression x214=x19.transpose(); + Expression x213=x8.join(x214); + Expression x215=x187.join(x22); + Expression x212=x213.join(x215); + Formula x211=x212.no(); + Formula x198=x199.and(x211); + Formula x194=x195.and(x198); + Expression x218=x187.join(x23); + Expression x217=x218.join(x19); + Formula x216=x217.in(x34); + Formula x193=x194.and(x216); + Formula x189=x190.and(x193); + Expression x226=x187.join(x23); + Expression x227=x187.join(x20); + Expression x225=x226.difference(x227); + Expression x224=x225.join(x19); + Expression x229=x187.join(x24); + Expression x228=x229.join(x19); + Expression x223=x224.union(x228); + Formula x222=x9.in(x223); + Formula x221=x222.not(); + Variable x232=Variable.unary("Lookup_n"); + Expression x233=x187.join(x21); + Decls x231=x232.oneOf(x233); + Variable x237=Variable.unary("Lookup_c"); + Expression x239=x187.join(x22); + Expression x238=x232.join(x239); + Decls x236=x237.oneOf(x238); + Variable x241=Variable.unary("Lookup_c'"); + Decls x240=x241.oneOf(x238); + Decls x235=x236.and(x240); + Expression x244=x237.join(x19); + Expression x245=x241.join(x19); + Formula x243=x244.eq(x245); + Formula x242=x243.not(); + Formula x234=x242.forAll(x235); + Formula x230=x234.forAll(x231); + Formula x220=x221.and(x230); + Variable x248=Variable.unary("Lookup_a"); + Expression x249=x187.join(x24); + Decls x247=x248.oneOf(x249); + Expression x253=x187.join(x22); + Expression x252=x248.join(x253); + Expression x254=x187.join(x23); + Formula x251=x252.in(x254); + Expression x257=x187.join(x22); + Expression x256=x248.join(x257); + Formula x255=x256.some(); + Formula x250=x251.and(x255); + Formula x246=x250.forAll(x247); + Formula x219=x220.and(x246); + Formula x188=x189.and(x219); + Formula x185=x188.forAll(x186); + Variable x260=Variable.unary("Lookup_this"); + Decls x259=x260.oneOf(x139); + Expression x263=x260.join(x20); + Formula x262=x263.one(); + Formula x264=x263.in(x12); + Formula x261=x262.and(x264); + Formula x258=x261.forAll(x259); + Expression x266=x20.join(Expression.UNIV); + Formula x265=x266.in(x139); + Variable x269=Variable.unary("Lookup_this"); + Decls x268=x269.oneOf(x139); + Expression x271=x269.join(x21); + Formula x270=x271.in(x12); + Formula x267=x270.forAll(x268); + Expression x273=x21.join(Expression.UNIV); + Formula x272=x273.in(x139); + Variable x276=Variable.unary("Lookup_this"); + Decls x275=x276.oneOf(x139); + Expression x280=x276.join(x22); + Expression x282=x276.join(x21); + Expression x284=x276.join(x21); + Expression x285=x276.join(x20); + Expression x283=x284.difference(x285); + Expression x281=x282.product(x283); + Formula x279=x280.in(x281); + Variable x288=Variable.unary(""); + Decls x287=x288.oneOf(x282); + Expression x290=x288.join(x280); + Expression x292=x276.join(x21); + Expression x293=x276.join(x20); + Expression x291=x292.difference(x293); + Formula x289=x290.in(x291); + Formula x286=x289.forAll(x287); + Formula x278=x279.and(x286); + Variable x296=Variable.unary(""); + Decls x295=x296.oneOf(x283); + Expression x299=x280.join(x296); + Formula x298=x299.one(); + Expression x301=x276.join(x21); + Formula x300=x299.in(x301); + Formula x297=x298.and(x300); + Formula x294=x297.forAll(x295); + Formula x277=x278.and(x294); + Formula x274=x277.forAll(x275); + Expression x304=x22.join(Expression.UNIV); + Expression x303=x304.join(Expression.UNIV); + Formula x302=x303.in(x139); + Variable x307=Variable.unary("Lookup_this"); + Decls x306=x307.oneOf(x139); + Expression x310=x307.join(x21); + Expression x312=x307.join(x20); + Expression x315=x307.join(x22); + Expression x314=x315.closure(); + Expression x317=x132.product(Expression.UNIV); + Expression x316=Expression.IDEN.intersection(x317); + Expression x313=x314.union(x316); + Expression x311=x312.join(x313); + Formula x309=x310.eq(x311); + Expression x320=x307.join(x20); + Expression x321=x307.join(x22); + Expression x319=x320.join(x321); + Formula x318=x319.some(); + Formula x308=x309.and(x318); + Formula x305=x308.forAll(x306); + Expression x324=x18.product(x27); + Expression x323=x18.join(x324); + Expression x327=x12.product(x12); + Expression x326=x14.product(x327); + Expression x325=x13.product(x326); + Formula x322=x323.in(x325); + Expression x330=x18.product(x28); + Expression x329=x18.join(x330); + Expression x334=x12.product(x6); + Expression x333=x12.product(x334); + Expression x332=x13.product(x333); + Expression x331=x15.product(x332); + Formula x328=x329.in(x331); + Variable x337=Variable.unary("Lookup_q"); + Decls x336=x337.oneOf(x13); + Variable x340=Variable.unary("Lookup_a"); + Decls x339=x340.oneOf(x14); + Variable x343=Variable.unary("Lookup_nq"); + Decls x342=x343.oneOf(x12); + Variable x346=Variable.unary("Lookup_na"); + Decls x345=x346.oneOf(x12); + Expression x351=x337.join(x27); + Expression x350=x340.join(x351); + Expression x349=x343.join(x350); + Formula x348=x346.in(x349); + Expression x354=x343.join(x19); + Expression x356=x346.join(x19); + Expression x355=x8.union(x356); + Formula x353=x354.in(x355); + Variable x359=Variable.unary("Lookup_nq'"); + Expression x361=x337.join(x22); + Expression x360=x343.join(x361); + Decls x358=x359.oneOf(x360); + Variable x364=Variable.unary("Lookup_na'"); + Expression x366=x340.join(x22); + Expression x365=x346.join(x366); + Decls x363=x364.oneOf(x365); + Expression x370=x337.join(x27); + Expression x369=x340.join(x370); + Expression x368=x359.join(x369); + Formula x367=x364.in(x368); + Formula x362=x367.forSome(x363); + Formula x357=x362.forAll(x358); + Formula x352=x353.and(x357); + Formula x347=x348.iff(x352); + Formula x344=x347.forAll(x345); + Formula x341=x344.forAll(x342); + Formula x338=x341.forAll(x339); + Formula x335=x338.forAll(x336); + Variable x374=Variable.unary("Lookup_db"); + Decls x373=x374.oneOf(x15); + Variable x376=Variable.unary("Lookup_q"); + Decls x375=x376.oneOf(x13); + Variable x378=Variable.unary("Lookup_T"); + Decls x377=x378.oneOf(x12); + Variable x380=Variable.unary("Lookup_n"); + Decls x379=x380.oneOf(x12); + Variable x382=Variable.unary("Lookup_r"); + Decls x381=x382.oneOf(x6); + Decls x372=x373.and(x375).and(x377).and(x379).and(x381); + Expression x388=x374.join(x28); + Expression x387=x376.join(x388); + Expression x386=x378.join(x387); + Expression x385=x380.join(x386); + Formula x384=x382.in(x385); + Variable x391=Variable.unary("Lookup_na"); + Expression x393=x376.join(x22); + Expression x392=x380.join(x393); + Decls x390=x391.oneOf(x392); + Variable x396=Variable.unary("Lookup_nv"); + Expression x398=x376.join(x22); + Expression x397=x391.join(x398); + Decls x395=x396.oneOf(x397); + Variable x401=Variable.unary("Lookup_Ta"); + Expression x403=x374.join(x22); + Expression x402=x378.join(x403); + Decls x400=x401.oneOf(x402); + Expression x406=x401.join(x19); + Expression x407=x391.join(x19); + Formula x405=x406.eq(x407); + Expression x411=x396.join(x19); + Formula x410=x411.eq(x8); + Expression x416=x374.join(x22); + Expression x415=x416.closure(); + Expression x414=x401.join(x415); + Expression x417=x374.join(x71); + Expression x413=x414.join(x417); + Formula x412=x382.in(x413); + Formula x409=x410.implies(x412); + Formula x419=x410.not(); + Variable x422=Variable.unary("Lookup_Tv"); + Expression x424=x374.join(x22); + Expression x423=x401.join(x424); + Decls x421=x422.oneOf(x423); + Expression x427=x422.join(x19); + Expression x428=x396.join(x19); + Formula x426=x427.eq(x428); + Expression x433=x376.join(x22); + Expression x432=x396.join(x433); + Formula x431=x432.no(); + Expression x439=x374.join(x22); + Expression x438=x439.closure(); + Expression x441=x132.product(Expression.UNIV); + Expression x440=Expression.IDEN.intersection(x441); + Expression x437=x438.union(x440); + Expression x436=x422.join(x437); + Expression x442=x374.join(x71); + Expression x435=x436.join(x442); + Formula x434=x382.in(x435); + Formula x430=x431.implies(x434); + Formula x444=x431.not(); + Expression x449=x374.join(x28); + Expression x448=x376.join(x449); + Expression x447=x422.join(x448); + Expression x446=x396.join(x447); + Formula x445=x382.in(x446); + Formula x443=x444.implies(x445); + Formula x429=x430.and(x443); + Formula x425=x426.and(x429); + Formula x420=x425.forSome(x421); + Formula x418=x419.implies(x420); + Formula x408=x409.and(x418); + Formula x404=x405.and(x408); + Formula x399=x404.forSome(x400); + Formula x394=x399.forAll(x395); + Formula x389=x394.forAll(x390); + Formula x383=x384.iff(x389); + Formula x371=x383.forAll(x372); + Variable x453=Variable.unary("Lookup_db"); + Decls x452=x453.oneOf(x15); + Variable x455=Variable.unary("Lookup_q"); + Decls x454=x455.oneOf(x13); + Decls x451=x452.and(x454); + Expression x458=x455.join(x20); + Expression x460=x453.join(x20); + Expression x462=x453.join(x28); + Expression x461=x455.join(x462); + Expression x459=x460.join(x461); + Expression x457=x458.join(x459); + Formula x456=x457.in(x6); + Formula x450=x456.forSome(x451); + Formula x463=x0.eq(x0); + Formula x464=x1.eq(x1); + Formula x465=x2.eq(x2); + Formula x466=x3.eq(x3); + Formula x467=x4.eq(x4); + Formula x468=x5.eq(x5); + Formula x469=x6.eq(x6); + Formula x470=x7.eq(x7); + Formula x471=x8.eq(x8); + Formula x472=x9.eq(x9); + Formula x473=x10.eq(x10); + Formula x474=x11.eq(x11); + Formula x475=x12.eq(x12); + Formula x476=x13.eq(x13); + Formula x477=x14.eq(x14); + Formula x478=x15.eq(x15); + Formula x479=x16.eq(x16); + Formula x480=x17.eq(x17); + Formula x481=x18.eq(x18); + Formula x482=x19.eq(x19); + Formula x483=x20.eq(x20); + Formula x484=x21.eq(x21); + Formula x485=x22.eq(x22); + Formula x486=x23.eq(x23); + Formula x487=x24.eq(x24); + Formula x488=x25.eq(x25); + Formula x489=x26.eq(x26); + Formula x490=x27.eq(x27); + Formula x491=x28.eq(x28); + Formula x29=Formula.compose(FormulaOperator.AND, x30, x32, x36, x38, x41, x50, x53, x60, x64, x67, x93, x169, x175, x177, x183, x185, x258, x265, x267, x272, x274, x302, x305, x322, x328, x335, x371, x450, x463, x464, x465, x466, x467, x468, x469, x470, x471, x472, x473, x474, x475, x476, x477, x478, x479, x480, x481, x482, x483, x484, x485, x486, x487, x488, x489, x490, x491); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x29,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadLeaderHighestCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadLeaderHighestCheck.java new file mode 100644 index 0000000..155de90 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadLeaderHighestCheck.java @@ -0,0 +1,1536 @@ +package kodkod.examples.models.algorithm.election; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ringlead", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 14, + TernaryRelations =6, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 28, + TransitiveClosure = 1, + NestedQuantifiers = 3, + SetCardinality = 5, + Additions = 0, + Subtractions = 0, + Comparison = 17, + OrderedRelations = 2, + Constraints =28 +) + +public final class ringleadLeaderHighestCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("bool/True"); + Relation x7 = Relation.unary("bool/False"); + Relation x8 = Relation.unary("this/RingLeadNode"); + Relation x9 = Relation.unary("msg/Node remainder"); + Relation x10 = Relation.unary("this/RingLeadMsgState"); + Relation x11 = Relation.unary("msg/MsgState remainder"); + Relation x12 = Relation.unary("this/MsgViz"); + Relation x13 = Relation.unary("msg/Msg remainder"); + Relation x14 = Relation.unary("msg/Tick"); + Relation x15 = Relation.unary("this/RingLeadNodeState"); + Relation x16 = Relation.unary("msg/NodeState remainder"); + Relation x17 = Relation.unary("tickOrd/Ord"); + Relation x18 = Relation.unary("nodeOrd/Ord"); + Relation x19 = Relation.nary("this/RingLeadNode.rightNeighbor", 2); + Relation x20 = Relation.nary("this/RingLeadMsgState.id", 2); + Relation x21 = Relation.nary("this/MsgViz.vFrom", 2); + Relation x22 = Relation.nary("this/MsgViz.vTo", 2); + Relation x23 = Relation.nary("this/MsgViz.vId", 2); + Relation x24 = Relation.nary("this/RingLeadNodeState.leader", 2); + Relation x25 = Relation.nary("msg/MsgState.from", 2); + Relation x26 = Relation.nary("msg/MsgState.to", 2); + Relation x27 = Relation.nary("msg/Msg.state", 2); + Relation x28 = Relation.nary("msg/Msg.sentOn", 2); + Relation x29 = Relation.nary("msg/Msg.readOn", 3); + Relation x30 = Relation.nary("msg/Tick.state", 3); + Relation x31 = Relation.nary("msg/Tick.visible", 3); + Relation x32 = Relation.nary("msg/Tick.read", 3); + Relation x33 = Relation.nary("msg/Tick.sent", 3); + Relation x34 = Relation.nary("msg/Tick.available", 2); + Relation x35 = Relation.nary("msg/Tick.needsToSend", 3); + Relation x36 = Relation.unary("tickOrd/Ord.First"); + Relation x37 = Relation.nary("tickOrd/Ord.Next", 2); + Relation x38 = Relation.unary("nodeOrd/Ord.First"); + Relation x39 = Relation.nary("nodeOrd/Ord.Next", 2); + Relation x40 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "bool/False$0", + "bool/True$0", "msg/Msg$0", "msg/Msg$1", "msg/Msg$2", "msg/Msg$3", "msg/Msg$4", + "msg/MsgState$0", "msg/MsgState$1", "msg/MsgState$2", "msg/MsgState$3", "msg/MsgState$4", "msg/Node$0", + "msg/Node$1", "msg/Node$2", "msg/NodeState$0", "msg/NodeState$1", "msg/Tick$0", "msg/Tick$1", + "msg/Tick$2", "msg/Tick$3", "msg/Tick$4", "nodeOrd/Ord$0", "tickOrd/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("bool/True$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("bool/False$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("msg/Node$0")); + x8_upper.add(factory.tuple("msg/Node$1")); + x8_upper.add(factory.tuple("msg/Node$2")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("msg/Node$0")); + x9_upper.add(factory.tuple("msg/Node$1")); + x9_upper.add(factory.tuple("msg/Node$2")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("msg/MsgState$0")); + x10_upper.add(factory.tuple("msg/MsgState$1")); + x10_upper.add(factory.tuple("msg/MsgState$2")); + x10_upper.add(factory.tuple("msg/MsgState$3")); + x10_upper.add(factory.tuple("msg/MsgState$4")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("msg/MsgState$0")); + x11_upper.add(factory.tuple("msg/MsgState$1")); + x11_upper.add(factory.tuple("msg/MsgState$2")); + x11_upper.add(factory.tuple("msg/MsgState$3")); + x11_upper.add(factory.tuple("msg/MsgState$4")); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("msg/Msg$0")); + x12_upper.add(factory.tuple("msg/Msg$1")); + x12_upper.add(factory.tuple("msg/Msg$2")); + x12_upper.add(factory.tuple("msg/Msg$3")); + x12_upper.add(factory.tuple("msg/Msg$4")); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("msg/Msg$0")); + x13_upper.add(factory.tuple("msg/Msg$1")); + x13_upper.add(factory.tuple("msg/Msg$2")); + x13_upper.add(factory.tuple("msg/Msg$3")); + x13_upper.add(factory.tuple("msg/Msg$4")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("msg/Tick$0")); + x14_upper.add(factory.tuple("msg/Tick$1")); + x14_upper.add(factory.tuple("msg/Tick$2")); + x14_upper.add(factory.tuple("msg/Tick$3")); + x14_upper.add(factory.tuple("msg/Tick$4")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("msg/NodeState$0")); + x15_upper.add(factory.tuple("msg/NodeState$1")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("msg/NodeState$0")); + x16_upper.add(factory.tuple("msg/NodeState$1")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("tickOrd/Ord$0")); + bounds.boundExactly(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("nodeOrd/Ord$0")); + bounds.boundExactly(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$0"))); + x19_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$1"))); + x19_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$2"))); + x19_upper.add(factory.tuple("msg/Node$1").product(factory.tuple("msg/Node$0"))); + x19_upper.add(factory.tuple("msg/Node$1").product(factory.tuple("msg/Node$1"))); + x19_upper.add(factory.tuple("msg/Node$1").product(factory.tuple("msg/Node$2"))); + x19_upper.add(factory.tuple("msg/Node$2").product(factory.tuple("msg/Node$0"))); + x19_upper.add(factory.tuple("msg/Node$2").product(factory.tuple("msg/Node$1"))); + x19_upper.add(factory.tuple("msg/Node$2").product(factory.tuple("msg/Node$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + x20_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$1"))); + x20_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$2"))); + x20_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$0"))); + x20_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$1"))); + x20_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$2"))); + x20_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$0"))); + x20_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$1"))); + x20_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$2"))); + x20_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$0"))); + x20_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$1"))); + x20_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$2"))); + x20_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$0"))); + x20_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$1"))); + x20_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$2"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + x21_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1"))); + x21_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2"))); + x21_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0"))); + x21_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1"))); + x21_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2"))); + x21_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0"))); + x21_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1"))); + x21_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2"))); + x21_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0"))); + x21_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1"))); + x21_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2"))); + x21_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0"))); + x21_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1"))); + x21_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(2); + x22_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + x22_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1"))); + x22_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2"))); + x22_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0"))); + x22_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1"))); + x22_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2"))); + x22_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0"))); + x22_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1"))); + x22_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2"))); + x22_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0"))); + x22_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1"))); + x22_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2"))); + x22_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0"))); + x22_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1"))); + x22_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2"))); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + x23_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1"))); + x23_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2"))); + x23_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0"))); + x23_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1"))); + x23_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2"))); + x23_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0"))); + x23_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1"))); + x23_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2"))); + x23_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0"))); + x23_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1"))); + x23_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2"))); + x23_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0"))); + x23_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1"))); + x23_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(2); + x24_upper.add(factory.tuple("msg/NodeState$0").product(factory.tuple("bool/True$0"))); + x24_upper.add(factory.tuple("msg/NodeState$0").product(factory.tuple("bool/False$0"))); + x24_upper.add(factory.tuple("msg/NodeState$1").product(factory.tuple("bool/True$0"))); + x24_upper.add(factory.tuple("msg/NodeState$1").product(factory.tuple("bool/False$0"))); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(2); + x25_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + x25_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$1"))); + x25_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$2"))); + x25_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$0"))); + x25_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$1"))); + x25_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$2"))); + x25_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$0"))); + x25_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$1"))); + x25_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$2"))); + x25_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$0"))); + x25_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$1"))); + x25_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$2"))); + x25_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$0"))); + x25_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$1"))); + x25_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$2"))); + bounds.bound(x25, x25_upper); + + TupleSet x26_upper = factory.noneOf(2); + x26_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + x26_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$1"))); + x26_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$2"))); + x26_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$0"))); + x26_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$1"))); + x26_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$2"))); + x26_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$0"))); + x26_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$1"))); + x26_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$2"))); + x26_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$0"))); + x26_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$1"))); + x26_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$2"))); + x26_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$0"))); + x26_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$1"))); + x26_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$2"))); + bounds.bound(x26, x26_upper); + + TupleSet x27_upper = factory.noneOf(2); + x27_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/MsgState$0"))); + x27_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/MsgState$1"))); + x27_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/MsgState$2"))); + x27_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/MsgState$3"))); + x27_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/MsgState$4"))); + x27_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/MsgState$0"))); + x27_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/MsgState$1"))); + x27_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/MsgState$2"))); + x27_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/MsgState$3"))); + x27_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/MsgState$4"))); + x27_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/MsgState$0"))); + x27_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/MsgState$1"))); + x27_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/MsgState$2"))); + x27_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/MsgState$3"))); + x27_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/MsgState$4"))); + x27_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/MsgState$0"))); + x27_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/MsgState$1"))); + x27_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/MsgState$2"))); + x27_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/MsgState$3"))); + x27_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/MsgState$4"))); + x27_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/MsgState$0"))); + x27_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/MsgState$1"))); + x27_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/MsgState$2"))); + x27_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/MsgState$3"))); + x27_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/MsgState$4"))); + bounds.bound(x27, x27_upper); + + TupleSet x28_upper = factory.noneOf(2); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$0"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$1"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$2"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$3"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$4"))); + x28_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Tick$0"))); + x28_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Tick$1"))); + x28_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Tick$2"))); + x28_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Tick$3"))); + x28_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Tick$4"))); + x28_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Tick$0"))); + x28_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Tick$1"))); + x28_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Tick$2"))); + x28_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Tick$3"))); + x28_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Tick$4"))); + x28_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Tick$0"))); + x28_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Tick$1"))); + x28_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Tick$2"))); + x28_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Tick$3"))); + x28_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Tick$4"))); + x28_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Tick$0"))); + x28_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Tick$1"))); + x28_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Tick$2"))); + x28_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Tick$3"))); + x28_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Tick$4"))); + bounds.bound(x28, x28_upper); + + TupleSet x29_upper = factory.noneOf(3); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$4"))); + bounds.bound(x29, x29_upper); + + TupleSet x30_upper = factory.noneOf(3); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$1"))); + bounds.bound(x30, x30_upper); + + TupleSet x31_upper = factory.noneOf(3); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + bounds.bound(x31, x31_upper); + + TupleSet x32_upper = factory.noneOf(3); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + bounds.bound(x32, x32_upper); + + TupleSet x33_upper = factory.noneOf(3); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + bounds.bound(x33, x33_upper); + + TupleSet x34_upper = factory.noneOf(2); + x34_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Msg$1"))); + x34_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Msg$2"))); + x34_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Msg$3"))); + x34_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Msg$4"))); + x34_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Msg$1"))); + x34_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Msg$2"))); + x34_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Msg$3"))); + x34_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Msg$4"))); + x34_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Msg$1"))); + x34_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Msg$2"))); + x34_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Msg$3"))); + x34_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Msg$4"))); + x34_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Msg$1"))); + x34_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Msg$2"))); + x34_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Msg$3"))); + x34_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Msg$4"))); + x34_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Msg$1"))); + x34_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Msg$2"))); + x34_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Msg$3"))); + x34_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Msg$4"))); + bounds.bound(x34, x34_upper); + + TupleSet x35_upper = factory.noneOf(3); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + bounds.bound(x35, x35_upper); + + TupleSet x36_upper = factory.noneOf(1); + x36_upper.add(factory.tuple("msg/Tick$0")); + x36_upper.add(factory.tuple("msg/Tick$1")); + x36_upper.add(factory.tuple("msg/Tick$2")); + x36_upper.add(factory.tuple("msg/Tick$3")); + x36_upper.add(factory.tuple("msg/Tick$4")); + bounds.bound(x36, x36_upper); + + TupleSet x37_upper = factory.noneOf(2); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$3"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$4"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$3"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$4"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$3"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$4"))); + x37_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Tick$3"))); + x37_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Tick$4"))); + x37_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Tick$3"))); + x37_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Tick$4"))); + bounds.bound(x37, x37_upper); + + TupleSet x38_upper = factory.noneOf(1); + x38_upper.add(factory.tuple("msg/Node$0")); + x38_upper.add(factory.tuple("msg/Node$1")); + x38_upper.add(factory.tuple("msg/Node$2")); + bounds.bound(x38, x38_upper); + + TupleSet x39_upper = factory.noneOf(2); + x39_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$0"))); + x39_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$1"))); + x39_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$2"))); + x39_upper.add(factory.tuple("msg/Node$1").product(factory.tuple("msg/Node$0"))); + x39_upper.add(factory.tuple("msg/Node$1").product(factory.tuple("msg/Node$1"))); + x39_upper.add(factory.tuple("msg/Node$1").product(factory.tuple("msg/Node$2"))); + x39_upper.add(factory.tuple("msg/Node$2").product(factory.tuple("msg/Node$0"))); + x39_upper.add(factory.tuple("msg/Node$2").product(factory.tuple("msg/Node$1"))); + x39_upper.add(factory.tuple("msg/Node$2").product(factory.tuple("msg/Node$2"))); + bounds.bound(x39, x39_upper); + + TupleSet x40_upper = factory.noneOf(1); + x40_upper.add(factory.tuple("msg/Tick$0")); + x40_upper.add(factory.tuple("msg/Tick$1")); + x40_upper.add(factory.tuple("msg/Tick$2")); + x40_upper.add(factory.tuple("msg/Tick$3")); + x40_upper.add(factory.tuple("msg/Tick$4")); + bounds.bound(x40, x40_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x43=x6.intersection(x7); + Formula x42=x43.no(); + Variable x46=Variable.unary("LeaderHighest_this"); + Decls x45=x46.oneOf(x8); + Expression x49=x46.join(x19); + Formula x48=x49.one(); + Expression x51=x8.union(x9); + Formula x50=x49.in(x51); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x53=x19.join(Expression.UNIV); + Formula x52=x53.in(x8); + Variable x57=Variable.unary("LeaderHighest_this"); + Decls x56=x57.oneOf(x10); + Expression x60=x57.join(x20); + Formula x59=x60.one(); + Formula x61=x60.in(x51); + Formula x58=x59.and(x61); + Formula x55=x58.forAll(x56); + Expression x63=x20.join(Expression.UNIV); + Formula x62=x63.in(x10); + Variable x66=Variable.unary("LeaderHighest_this"); + Expression x67=x10.union(x11); + Decls x65=x66.oneOf(x67); + Expression x70=x66.join(x25); + Formula x69=x70.one(); + Formula x71=x70.in(x51); + Formula x68=x69.and(x71); + Formula x64=x68.forAll(x65); + Expression x73=x25.join(Expression.UNIV); + Formula x72=x73.in(x67); + Variable x76=Variable.unary("LeaderHighest_this"); + Decls x75=x76.oneOf(x67); + Expression x78=x76.join(x26); + Formula x77=x78.in(x51); + Formula x74=x77.forAll(x75); + Expression x80=x26.join(Expression.UNIV); + Formula x79=x80.in(x67); + Variable x83=Variable.unary("LeaderHighest_this"); + Decls x82=x83.oneOf(x12); + Expression x86=x83.join(x21); + Formula x85=x86.one(); + Formula x87=x86.in(x51); + Formula x84=x85.and(x87); + Formula x81=x84.forAll(x82); + Expression x89=x21.join(Expression.UNIV); + Formula x88=x89.in(x12); + Variable x92=Variable.unary("LeaderHighest_this"); + Decls x91=x92.oneOf(x12); + Expression x94=x92.join(x22); + Formula x93=x94.in(x51); + Formula x90=x93.forAll(x91); + Expression x96=x22.join(Expression.UNIV); + Formula x95=x96.in(x12); + Variable x99=Variable.unary("LeaderHighest_this"); + Decls x98=x99.oneOf(x12); + Expression x102=x99.join(x23); + Formula x101=x102.one(); + Formula x103=x102.in(x51); + Formula x100=x101.and(x103); + Formula x97=x100.forAll(x98); + Expression x105=x23.join(Expression.UNIV); + Formula x104=x105.in(x12); + Variable x108=Variable.unary("LeaderHighest_this"); + Expression x109=x12.union(x13); + Decls x107=x108.oneOf(x109); + Expression x112=x108.join(x27); + Formula x111=x112.one(); + Formula x113=x112.in(x67); + Formula x110=x111.and(x113); + Formula x106=x110.forAll(x107); + Expression x115=x27.join(Expression.UNIV); + Formula x114=x115.in(x109); + Variable x118=Variable.unary("LeaderHighest_this"); + Decls x117=x118.oneOf(x109); + Expression x121=x118.join(x28); + Formula x120=x121.one(); + Formula x122=x121.in(x14); + Formula x119=x120.and(x122); + Formula x116=x119.forAll(x117); + Expression x124=x28.join(Expression.UNIV); + Formula x123=x124.in(x109); + Variable x127=Variable.unary("LeaderHighest_this"); + Decls x126=x127.oneOf(x109); + Expression x131=x127.join(x29); + Expression x132=x51.product(x14); + Formula x130=x131.in(x132); + Variable x135=Variable.unary(""); + Decls x134=x135.oneOf(x51); + Expression x138=x135.join(x131); + Formula x137=x138.lone(); + Formula x139=x138.in(x14); + Formula x136=x137.and(x139); + Formula x133=x136.forAll(x134); + Formula x129=x130.and(x133); + Variable x142=Variable.unary(""); + Decls x141=x142.oneOf(x14); + Expression x144=x131.join(x142); + Formula x143=x144.in(x51); + Formula x140=x143.forAll(x141); + Formula x128=x129.and(x140); + Formula x125=x128.forAll(x126); + Expression x147=x29.join(Expression.UNIV); + Expression x146=x147.join(Expression.UNIV); + Formula x145=x146.in(x109); + Variable x150=Variable.unary("LeaderHighest_this"); + Decls x149=x150.oneOf(x109); + Expression x153=x150.join(x29); + Expression x152=x153.join(x14); + Expression x155=x150.join(x27); + Expression x154=x155.join(x26); + Formula x151=x152.in(x154); + Formula x148=x151.forAll(x149); + Variable x158=Variable.unary("LeaderHighest_this"); + Decls x157=x158.oneOf(x14); + Expression x162=x158.join(x30); + Expression x164=x15.union(x16); + Expression x163=x51.product(x164); + Formula x161=x162.in(x163); + Variable x167=Variable.unary(""); + Decls x166=x167.oneOf(x51); + Expression x170=x167.join(x162); + Formula x169=x170.one(); + Formula x171=x170.in(x164); + Formula x168=x169.and(x171); + Formula x165=x168.forAll(x166); + Formula x160=x161.and(x165); + Variable x174=Variable.unary(""); + Decls x173=x174.oneOf(x164); + Expression x176=x162.join(x174); + Formula x175=x176.in(x51); + Formula x172=x175.forAll(x173); + Formula x159=x160.and(x172); + Formula x156=x159.forAll(x157); + Expression x179=x30.join(Expression.UNIV); + Expression x178=x179.join(Expression.UNIV); + Formula x177=x178.in(x14); + Variable x182=Variable.unary("LeaderHighest_this"); + Decls x181=x182.oneOf(x14); + Expression x184=x182.join(x31); + Expression x185=x51.product(x109); + Formula x183=x184.in(x185); + Formula x180=x183.forAll(x181); + Expression x188=x31.join(Expression.UNIV); + Expression x187=x188.join(Expression.UNIV); + Formula x186=x187.in(x14); + Variable x191=Variable.unary("LeaderHighest_this"); + Decls x190=x191.oneOf(x14); + Expression x193=x191.join(x32); + Expression x194=x51.product(x109); + Formula x192=x193.in(x194); + Formula x189=x192.forAll(x190); + Expression x197=x32.join(Expression.UNIV); + Expression x196=x197.join(Expression.UNIV); + Formula x195=x196.in(x14); + Variable x200=Variable.unary("LeaderHighest_this"); + Decls x199=x200.oneOf(x14); + Expression x202=x200.join(x33); + Expression x203=x51.product(x109); + Formula x201=x202.in(x203); + Formula x198=x201.forAll(x199); + Expression x206=x33.join(Expression.UNIV); + Expression x205=x206.join(Expression.UNIV); + Formula x204=x205.in(x14); + Variable x209=Variable.unary("LeaderHighest_this"); + Decls x208=x209.oneOf(x14); + Expression x211=x209.join(x34); + Formula x210=x211.in(x109); + Formula x207=x210.forAll(x208); + Expression x213=x34.join(Expression.UNIV); + Formula x212=x213.in(x14); + Variable x216=Variable.unary("LeaderHighest_this"); + Decls x215=x216.oneOf(x14); + Expression x218=x216.join(x35); + Expression x219=x51.product(x109); + Formula x217=x218.in(x219); + Formula x214=x217.forAll(x215); + Expression x222=x35.join(Expression.UNIV); + Expression x221=x222.join(Expression.UNIV); + Formula x220=x221.in(x14); + Variable x225=Variable.unary("LeaderHighest_this"); + Decls x224=x225.oneOf(x15); + Expression x228=x225.join(x24); + Formula x227=x228.one(); + Expression x230=x6.union(x7); + Formula x229=x228.in(x230); + Formula x226=x227.and(x229); + Formula x223=x226.forAll(x224); + Expression x232=x24.join(Expression.UNIV); + Formula x231=x232.in(x15); + Expression x235=x17.product(x36); + Expression x234=x17.join(x235); + Formula x233=x234.in(x14); + Expression x238=x17.product(x37); + Expression x237=x17.join(x238); + Expression x239=x14.product(x14); + Formula x236=x237.in(x239); + Formula x240=x37.totalOrder(x14,x36,x40); + Expression x243=x18.product(x38); + Expression x242=x18.join(x243); + Formula x241=x242.in(x51); + Expression x246=x18.product(x39); + Expression x245=x18.join(x246); + Expression x247=x51.product(x51); + Formula x244=x245.in(x247); + Variable x252=Variable.unary(""); + Decls x251=x252.oneOf(x51); + Formula x256=x252.eq(x38); + Expression x258=x39.join(x252); + Formula x257=x258.one(); + Formula x255=x256.or(x257); + Expression x262=x39.join(x51); + Expression x261=x51.difference(x262); + Formula x260=x252.eq(x261); + Expression x264=x252.join(x39); + Formula x263=x264.one(); + Formula x259=x260.or(x263); + Formula x254=x255.and(x259); + Expression x268=x39.closure(); + Expression x267=x252.join(x268); + Formula x266=x252.in(x267); + Formula x265=x266.not(); + Formula x253=x254.and(x265); + Formula x250=x253.forAll(x251); + Expression x271=x39.reflexiveClosure(); + Expression x270=x38.join(x271); + Formula x269=x51.in(x270); + Formula x249=x250.and(x269); + Expression x273=x39.join(x38); + Formula x272=x273.no(); + Formula x248=x249.and(x272); + Formula x275=x51.one(); + Variable x278=Variable.unary("LeaderHighest_n"); + Decls x277=x278.oneOf(x51); + Expression x281=x278.join(x19); + Formula x280=x278.eq(x281); + Formula x279=x280.not(); + Formula x276=x279.forAll(x277); + Formula x274=x275.or(x276); + Variable x284=Variable.unary("LeaderHighest_n"); + Decls x283=x284.oneOf(x51); + Expression x287=x19.closure(); + Expression x286=x284.join(x287); + Formula x285=x51.in(x286); + Formula x282=x285.forAll(x283); + Formula x288=x12.eq(x109); + Expression x290=x27.join(x25); + Formula x289=x21.eq(x290); + Expression x292=x27.join(x26); + Formula x291=x22.eq(x292); + Expression x294=x27.join(x20); + Formula x293=x23.eq(x294); + Variable x297=Variable.unary("LeaderHighest_n"); + Decls x296=x297.oneOf(x51); + Expression x301=x36.join(x30); + Expression x300=x297.join(x301); + Expression x299=x300.join(x24); + Formula x298=x299.eq(x7); + Formula x295=x298.forAll(x296); + Variable x304=Variable.unary("LeaderHighest_n"); + Decls x303=x304.oneOf(x51); + Variable x308=Variable.unary("LeaderHighest_t"); + Expression x311=x37.join(x14); + Expression x310=x14.difference(x311); + Expression x309=x14.difference(x310); + Decls x307=x308.oneOf(x309); + Formula x314=x308.eq(x36); + Expression x319=x308.join(x33); + Expression x318=x304.join(x319); + Formula x317=x318.one(); + Expression x325=x308.join(x35); + Expression x324=x304.join(x325); + IntExpression x323=x324.count(); + IntExpression x326=IntConstant.constant(1); + Formula x322=x323.eq(x326); + Expression x329=x318.join(x27); + Expression x328=x329.join(x20); + Formula x327=x328.eq(x304); + Formula x321=x322.and(x327); + Expression x334=x308.join(x37); + Expression x333=x334.join(x30); + Expression x332=x304.join(x333); + Expression x331=x332.join(x24); + Formula x330=x331.eq(x7); + Formula x320=x321.and(x330); + Formula x316=x317.and(x320); + Expression x337=x318.join(x27); + Expression x336=x337.join(x26); + Expression x338=x304.join(x19); + Formula x335=x336.eq(x338); + Formula x315=x316.and(x335); + Formula x313=x314.implies(x315); + Formula x340=x314.not(); + Expression x346=x308.join(x32); + Expression x345=x304.join(x346); + Expression x348=x308.join(x31); + Expression x347=x304.join(x348); + Formula x344=x345.eq(x347); + Variable x352=Variable.unary("RingLeadTransHelper_received"); + Decls x351=x352.oneOf(x345); + Expression x357=x352.join(x27); + Expression x356=x357.join(x20); + Expression x359=x39.closure(); + Expression x358=x304.join(x359); + Formula x355=x356.in(x358); + Formula x354=x355.not(); + Variable x363=Variable.unary("RingLeadTransHelper_weSend"); + Expression x365=x308.join(x33); + Expression x364=x304.join(x365); + Decls x362=x363.oneOf(x364); + Expression x369=x363.join(x27); + Expression x368=x369.join(x20); + Expression x371=x352.join(x27); + Expression x370=x371.join(x20); + Formula x367=x368.eq(x370); + Expression x374=x363.join(x27); + Expression x373=x374.join(x26); + Expression x375=x304.join(x19); + Formula x372=x373.eq(x375); + Formula x366=x367.and(x372); + Expression x361=x366.comprehension(x362); + Formula x360=x361.one(); + Formula x353=x354.or(x360); + Formula x350=x353.forAll(x351); + Expression x379=x308.join(x35); + Expression x378=x304.join(x379); + IntExpression x377=x378.count(); + Variable x383=Variable.unary("RingLeadTransHelper_m"); + Decls x382=x383.oneOf(x345); + Expression x386=x383.join(x27); + Expression x385=x386.join(x20); + Expression x388=x39.closure(); + Expression x387=x304.join(x388); + Formula x384=x385.in(x387); + Expression x381=x384.comprehension(x382); + IntExpression x380=x381.count(); + Formula x376=x377.eq(x380); + Formula x349=x350.and(x376); + Formula x343=x344.and(x349); + Variable x391=Variable.unary("RingLeadTransHelper_weSend"); + Decls x390=x391.oneOf(x364); + Expression x396=x391.join(x27); + Expression x395=x396.join(x20); + Expression x398=x39.closure(); + Expression x397=x304.join(x398); + Formula x394=x395.in(x397); + Expression x401=x345.join(x27); + Expression x400=x401.join(x20); + Formula x399=x395.in(x400); + Formula x393=x394.and(x399); + Expression x404=x391.join(x27); + Expression x403=x404.join(x26); + Expression x405=x304.join(x19); + Formula x402=x403.eq(x405); + Formula x392=x393.and(x402); + Formula x389=x392.forAll(x390); + Formula x342=x343.and(x389); + Expression x411=x308.join(x37); + Expression x410=x411.join(x30); + Expression x409=x304.join(x410); + Expression x408=x409.join(x24); + Formula x407=x408.eq(x6); + Expression x416=x308.join(x30); + Expression x415=x304.join(x416); + Expression x414=x415.join(x24); + Formula x413=x414.eq(x6); + Expression x419=x345.join(x27); + Expression x418=x419.join(x20); + Formula x417=x304.in(x418); + Formula x412=x413.or(x417); + Formula x406=x407.iff(x412); + Formula x341=x342.and(x406); + Formula x339=x340.implies(x341); + Formula x312=x313.and(x339); + Formula x306=x312.forAll(x307); + Expression x424=x310.join(x32); + Expression x423=x304.join(x424); + Expression x426=x310.join(x31); + Expression x425=x304.join(x426); + Formula x422=x423.eq(x425); + Variable x430=Variable.unary("RingLeadTransHelper_received"); + Decls x429=x430.oneOf(x423); + Expression x435=x430.join(x27); + Expression x434=x435.join(x20); + Expression x437=x39.closure(); + Expression x436=x304.join(x437); + Formula x433=x434.in(x436); + Formula x432=x433.not(); + Variable x441=Variable.unary("RingLeadTransHelper_weSend"); + Expression x443=x310.join(x33); + Expression x442=x304.join(x443); + Decls x440=x441.oneOf(x442); + Expression x447=x441.join(x27); + Expression x446=x447.join(x20); + Expression x449=x430.join(x27); + Expression x448=x449.join(x20); + Formula x445=x446.eq(x448); + Expression x452=x441.join(x27); + Expression x451=x452.join(x26); + Expression x453=x304.join(x19); + Formula x450=x451.eq(x453); + Formula x444=x445.and(x450); + Expression x439=x444.comprehension(x440); + Formula x438=x439.one(); + Formula x431=x432.or(x438); + Formula x428=x431.forAll(x429); + Expression x457=x310.join(x35); + Expression x456=x304.join(x457); + IntExpression x455=x456.count(); + Variable x461=Variable.unary("RingLeadTransHelper_m"); + Decls x460=x461.oneOf(x423); + Expression x464=x461.join(x27); + Expression x463=x464.join(x20); + Expression x466=x39.closure(); + Expression x465=x304.join(x466); + Formula x462=x463.in(x465); + Expression x459=x462.comprehension(x460); + IntExpression x458=x459.count(); + Formula x454=x455.eq(x458); + Formula x427=x428.and(x454); + Formula x421=x422.and(x427); + Variable x469=Variable.unary("RingLeadTransHelper_weSend"); + Decls x468=x469.oneOf(x442); + Expression x474=x469.join(x27); + Expression x473=x474.join(x20); + Expression x476=x39.closure(); + Expression x475=x304.join(x476); + Formula x472=x473.in(x475); + Expression x479=x423.join(x27); + Expression x478=x479.join(x20); + Formula x477=x473.in(x478); + Formula x471=x472.and(x477); + Expression x482=x469.join(x27); + Expression x481=x482.join(x26); + Expression x483=x304.join(x19); + Formula x480=x481.eq(x483); + Formula x470=x471.and(x480); + Formula x467=x470.forAll(x468); + Formula x420=x421.and(x467); + Formula x305=x306.and(x420); + Formula x302=x305.forAll(x303); + Formula x484=x8.eq(x51); + Formula x485=x10.eq(x67); + Formula x486=x15.eq(x164); + Expression x489=x36.join(x31); + Expression x488=x51.join(x489); + Formula x487=x488.no(); + Variable x492=Variable.unary("LeaderHighest_pre"); + Expression x493=x14.difference(x310); + Decls x491=x492.oneOf(x493); + Expression x496=x492.join(x37); + Expression x495=x496.join(x34); + Expression x498=x492.join(x34); + Expression x500=x492.join(x33); + Expression x499=x51.join(x500); + Expression x497=x498.difference(x499); + Formula x494=x495.eq(x497); + Formula x490=x494.forAll(x491); + Variable x503=Variable.unary("LeaderHighest_t"); + Decls x502=x503.oneOf(x14); + Expression x508=x503.join(x33); + Expression x507=x51.join(x508); + Expression x509=x503.join(x34); + Formula x506=x507.in(x509); + Expression x515=x503.join(x33); + Expression x514=x51.join(x515); + Expression x513=x514.join(x28); + Formula x512=x513.in(x503); + Expression x518=x503.join(x33); + Expression x517=x51.join(x518); + Expression x520=x503.join(x33); + Expression x519=x51.join(x520); + Formula x516=x517.eq(x519); + Formula x511=x512.and(x516); + Variable x524=Variable.unary("LeaderHighest_n"); + Decls x523=x524.oneOf(x51); + Variable x526=Variable.unary("LeaderHighest_m"); + Decls x525=x526.oneOf(x109); + Decls x522=x523.and(x525); + Expression x531=x526.join(x29); + Expression x530=x524.join(x531); + Formula x529=x530.eq(x503); + Formula x528=x529.not(); + Expression x534=x503.join(x32); + Expression x533=x524.join(x534); + Formula x532=x526.in(x533); + Formula x527=x528.or(x532); + Formula x521=x527.forAll(x522); + Formula x510=x511.and(x521); + Formula x505=x506.and(x510); + Expression x541=x503.join(x32); + Expression x540=x51.join(x541); + Expression x539=x540.join(x29); + Expression x538=x51.join(x539); + Formula x537=x538.in(x503); + Variable x544=Variable.unary("LeaderHighest_n"); + Decls x543=x544.oneOf(x51); + Expression x549=x503.join(x33); + Expression x548=x544.join(x549); + Expression x547=x548.join(x27); + Expression x546=x547.join(x25); + Formula x545=x546.in(x544); + Formula x542=x545.forAll(x543); + Formula x536=x537.and(x542); + Variable x553=Variable.unary("LeaderHighest_n"); + Decls x552=x553.oneOf(x51); + Variable x555=Variable.unary("LeaderHighest_m"); + Decls x554=x555.oneOf(x109); + Decls x551=x552.and(x554); + Expression x561=x503.join(x31); + Expression x560=x553.join(x561); + Formula x559=x555.in(x560); + Formula x558=x559.not(); + Expression x565=x555.join(x27); + Expression x564=x565.join(x26); + Formula x563=x553.in(x564); + Expression x567=x555.join(x28); + Expression x570=x37.transpose(); + Expression x569=x570.closure(); + Expression x568=x503.join(x569); + Formula x566=x567.in(x568); + Formula x562=x563.and(x566); + Formula x557=x558.or(x562); + Expression x575=x503.join(x32); + Expression x574=x553.join(x575); + Formula x573=x555.in(x574); + Formula x572=x573.not(); + Expression x581=x37.closure(); + Expression x580=x503.join(x581); + Expression x579=x580.join(x31); + Expression x578=x553.join(x579); + Formula x577=x555.in(x578); + Formula x576=x577.not(); + Formula x571=x572.or(x576); + Formula x556=x557.and(x571); + Formula x550=x556.forAll(x551); + Formula x535=x536.and(x550); + Formula x504=x505.and(x535); + Formula x501=x504.forAll(x502); + Expression x584=x14.join(x33); + Expression x583=x51.join(x584); + Formula x582=x109.in(x583); + Formula x585=x32.in(x31); + Variable x590=Variable.unary("LeaderHighest_t"); + Decls x589=x590.oneOf(x14); + Variable x592=Variable.unary("LeaderHighest_n"); + Decls x591=x592.oneOf(x51); + Decls x588=x589.and(x591); + Expression x598=x590.join(x30); + Expression x597=x592.join(x598); + Expression x596=x597.join(x24); + Formula x595=x596.eq(x6); + Formula x594=x595.not(); + Expression x601=x39.join(x51); + Expression x600=x51.difference(x601); + Formula x599=x592.eq(x600); + Formula x593=x594.or(x599); + Formula x587=x593.forAll(x588); + Formula x586=x587.not(); + Formula x602=x0.eq(x0); + Formula x603=x1.eq(x1); + Formula x604=x2.eq(x2); + Formula x605=x3.eq(x3); + Formula x606=x4.eq(x4); + Formula x607=x5.eq(x5); + Formula x608=x6.eq(x6); + Formula x609=x7.eq(x7); + Formula x610=x8.eq(x8); + Formula x611=x9.eq(x9); + Formula x612=x10.eq(x10); + Formula x613=x11.eq(x11); + Formula x614=x12.eq(x12); + Formula x615=x13.eq(x13); + Formula x616=x14.eq(x14); + Formula x617=x15.eq(x15); + Formula x618=x16.eq(x16); + Formula x619=x17.eq(x17); + Formula x620=x18.eq(x18); + Formula x621=x19.eq(x19); + Formula x622=x20.eq(x20); + Formula x623=x21.eq(x21); + Formula x624=x22.eq(x22); + Formula x625=x23.eq(x23); + Formula x626=x24.eq(x24); + Formula x627=x25.eq(x25); + Formula x628=x26.eq(x26); + Formula x629=x27.eq(x27); + Formula x630=x28.eq(x28); + Formula x631=x29.eq(x29); + Formula x632=x30.eq(x30); + Formula x633=x31.eq(x31); + Formula x634=x32.eq(x32); + Formula x635=x33.eq(x33); + Formula x636=x34.eq(x34); + Formula x637=x35.eq(x35); + Formula x638=x36.eq(x36); + Formula x639=x37.eq(x37); + Formula x640=x38.eq(x38); + Formula x641=x39.eq(x39); + Formula x642=x40.eq(x40); + Formula x41=Formula.compose(FormulaOperator.AND, x42, x44, x52, x55, x62, x64, x72, x74, x79, x81, x88, x90, x95, x97, x104, x106, x114, x116, x123, x125, x145, x148, x156, x177, x180, x186, x189, x195, x198, x204, x207, x212, x214, x220, x223, x231, x233, x236, x240, x241, x244, x248, x274, x282, x288, x289, x291, x293, x295, x302, x484, x485, x486, x487, x490, x501, x582, x585, x586, x602, x603, x604, x605, x606, x607, x608, x609, x610, x611, x612, x613, x614, x615, x616, x617, x618, x619, x620, x621, x622, x623, x624, x625, x626, x627, x628, x629, x630, x631, x632, x633, x634, x635, x636, x637, x638, x639, x640, x641, x642); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x41,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadLivenessCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadLivenessCheck.java new file mode 100644 index 0000000..8ce2605 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadLivenessCheck.java @@ -0,0 +1,1179 @@ +package kodkod.examples.models.algorithm.election; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ringlead", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 14, + TernaryRelations =6, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 28, + TransitiveClosure = 1, + NestedQuantifiers = 3, + SetCardinality = 5, + Additions = 0, + Subtractions = 0, + Comparison = 17, + OrderedRelations = 2, + Constraints =28 +) + +public final class ringleadLivenessCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("bool/True"); + Relation x7 = Relation.unary("bool/False"); + Relation x8 = Relation.unary("this/RingLeadNode"); + Relation x9 = Relation.unary("msg/Node remainder"); + Relation x10 = Relation.unary("this/RingLeadMsgState"); + Relation x11 = Relation.unary("msg/MsgState remainder"); + Relation x12 = Relation.unary("this/MsgViz"); + Relation x13 = Relation.unary("msg/Msg remainder"); + Relation x14 = Relation.unary("msg/Tick"); + Relation x15 = Relation.unary("this/RingLeadNodeState"); + Relation x16 = Relation.unary("msg/NodeState remainder"); + Relation x17 = Relation.unary("tickOrd/Ord"); + Relation x18 = Relation.unary("nodeOrd/Ord"); + Relation x19 = Relation.nary("this/RingLeadNode.rightNeighbor", 2); + Relation x20 = Relation.nary("this/RingLeadMsgState.id", 2); + Relation x21 = Relation.nary("this/MsgViz.vFrom", 2); + Relation x22 = Relation.nary("this/MsgViz.vTo", 2); + Relation x23 = Relation.nary("this/MsgViz.vId", 2); + Relation x24 = Relation.nary("this/RingLeadNodeState.leader", 2); + Relation x25 = Relation.nary("msg/MsgState.from", 2); + Relation x26 = Relation.nary("msg/MsgState.to", 2); + Relation x27 = Relation.nary("msg/Msg.state", 2); + Relation x28 = Relation.nary("msg/Msg.sentOn", 2); + Relation x29 = Relation.nary("msg/Msg.readOn", 3); + Relation x30 = Relation.nary("msg/Tick.state", 3); + Relation x31 = Relation.nary("msg/Tick.visible", 3); + Relation x32 = Relation.nary("msg/Tick.read", 3); + Relation x33 = Relation.nary("msg/Tick.sent", 3); + Relation x34 = Relation.nary("msg/Tick.available", 2); + Relation x35 = Relation.nary("msg/Tick.needsToSend", 3); + Relation x36 = Relation.unary("tickOrd/Ord.First"); + Relation x37 = Relation.nary("tickOrd/Ord.Next", 2); + Relation x38 = Relation.unary("nodeOrd/Ord.First"); + Relation x39 = Relation.nary("nodeOrd/Ord.Next", 2); + Relation x40 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "bool/False$0", + "bool/True$0", "msg/Msg$0", "msg/MsgState$0", "msg/Node$0", "msg/NodeState$0", "msg/NodeState$1", + "msg/Tick$0", "msg/Tick$1", "msg/Tick$2", "nodeOrd/Ord$0", "tickOrd/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("bool/True$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("bool/False$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("msg/Node$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("msg/Node$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("msg/MsgState$0")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("msg/MsgState$0")); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("msg/Msg$0")); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("msg/Msg$0")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("msg/Tick$0")); + x14_upper.add(factory.tuple("msg/Tick$1")); + x14_upper.add(factory.tuple("msg/Tick$2")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("msg/NodeState$0")); + x15_upper.add(factory.tuple("msg/NodeState$1")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("msg/NodeState$0")); + x16_upper.add(factory.tuple("msg/NodeState$1")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("tickOrd/Ord$0")); + bounds.boundExactly(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("nodeOrd/Ord$0")); + bounds.boundExactly(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(2); + x22_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(2); + x24_upper.add(factory.tuple("msg/NodeState$0").product(factory.tuple("bool/True$0"))); + x24_upper.add(factory.tuple("msg/NodeState$0").product(factory.tuple("bool/False$0"))); + x24_upper.add(factory.tuple("msg/NodeState$1").product(factory.tuple("bool/True$0"))); + x24_upper.add(factory.tuple("msg/NodeState$1").product(factory.tuple("bool/False$0"))); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(2); + x25_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x25, x25_upper); + + TupleSet x26_upper = factory.noneOf(2); + x26_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x26, x26_upper); + + TupleSet x27_upper = factory.noneOf(2); + x27_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/MsgState$0"))); + bounds.bound(x27, x27_upper); + + TupleSet x28_upper = factory.noneOf(2); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$0"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$1"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$2"))); + bounds.bound(x28, x28_upper); + + TupleSet x29_upper = factory.noneOf(3); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$2"))); + bounds.bound(x29, x29_upper); + + TupleSet x30_upper = factory.noneOf(3); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + bounds.bound(x30, x30_upper); + + TupleSet x31_upper = factory.noneOf(3); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + bounds.bound(x31, x31_upper); + + TupleSet x32_upper = factory.noneOf(3); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + bounds.bound(x32, x32_upper); + + TupleSet x33_upper = factory.noneOf(3); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + bounds.bound(x33, x33_upper); + + TupleSet x34_upper = factory.noneOf(2); + x34_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Msg$0"))); + bounds.bound(x34, x34_upper); + + TupleSet x35_upper = factory.noneOf(3); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + bounds.bound(x35, x35_upper); + + TupleSet x36_upper = factory.noneOf(1); + x36_upper.add(factory.tuple("msg/Tick$0")); + x36_upper.add(factory.tuple("msg/Tick$1")); + x36_upper.add(factory.tuple("msg/Tick$2")); + bounds.bound(x36, x36_upper); + + TupleSet x37_upper = factory.noneOf(2); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$2"))); + bounds.bound(x37, x37_upper); + + TupleSet x38_upper = factory.noneOf(1); + x38_upper.add(factory.tuple("msg/Node$0")); + bounds.bound(x38, x38_upper); + + TupleSet x39_upper = factory.noneOf(2); + x39_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x39, x39_upper); + + TupleSet x40_upper = factory.noneOf(1); + x40_upper.add(factory.tuple("msg/Tick$0")); + x40_upper.add(factory.tuple("msg/Tick$1")); + x40_upper.add(factory.tuple("msg/Tick$2")); + bounds.bound(x40, x40_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x43=x6.intersection(x7); + Formula x42=x43.no(); + Variable x46=Variable.unary("NeverFindLeader_this"); + Decls x45=x46.oneOf(x8); + Expression x49=x46.join(x19); + Formula x48=x49.one(); + Expression x51=x8.union(x9); + Formula x50=x49.in(x51); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x53=x19.join(Expression.UNIV); + Formula x52=x53.in(x8); + Variable x57=Variable.unary("NeverFindLeader_this"); + Decls x56=x57.oneOf(x10); + Expression x60=x57.join(x20); + Formula x59=x60.one(); + Formula x61=x60.in(x51); + Formula x58=x59.and(x61); + Formula x55=x58.forAll(x56); + Expression x63=x20.join(Expression.UNIV); + Formula x62=x63.in(x10); + Variable x66=Variable.unary("NeverFindLeader_this"); + Expression x67=x10.union(x11); + Decls x65=x66.oneOf(x67); + Expression x70=x66.join(x25); + Formula x69=x70.one(); + Formula x71=x70.in(x51); + Formula x68=x69.and(x71); + Formula x64=x68.forAll(x65); + Expression x73=x25.join(Expression.UNIV); + Formula x72=x73.in(x67); + Variable x76=Variable.unary("NeverFindLeader_this"); + Decls x75=x76.oneOf(x67); + Expression x78=x76.join(x26); + Formula x77=x78.in(x51); + Formula x74=x77.forAll(x75); + Expression x80=x26.join(Expression.UNIV); + Formula x79=x80.in(x67); + Variable x83=Variable.unary("NeverFindLeader_this"); + Decls x82=x83.oneOf(x12); + Expression x86=x83.join(x21); + Formula x85=x86.one(); + Formula x87=x86.in(x51); + Formula x84=x85.and(x87); + Formula x81=x84.forAll(x82); + Expression x89=x21.join(Expression.UNIV); + Formula x88=x89.in(x12); + Variable x92=Variable.unary("NeverFindLeader_this"); + Decls x91=x92.oneOf(x12); + Expression x94=x92.join(x22); + Formula x93=x94.in(x51); + Formula x90=x93.forAll(x91); + Expression x96=x22.join(Expression.UNIV); + Formula x95=x96.in(x12); + Variable x99=Variable.unary("NeverFindLeader_this"); + Decls x98=x99.oneOf(x12); + Expression x102=x99.join(x23); + Formula x101=x102.one(); + Formula x103=x102.in(x51); + Formula x100=x101.and(x103); + Formula x97=x100.forAll(x98); + Expression x105=x23.join(Expression.UNIV); + Formula x104=x105.in(x12); + Variable x108=Variable.unary("NeverFindLeader_this"); + Expression x109=x12.union(x13); + Decls x107=x108.oneOf(x109); + Expression x112=x108.join(x27); + Formula x111=x112.one(); + Formula x113=x112.in(x67); + Formula x110=x111.and(x113); + Formula x106=x110.forAll(x107); + Expression x115=x27.join(Expression.UNIV); + Formula x114=x115.in(x109); + Variable x118=Variable.unary("NeverFindLeader_this"); + Decls x117=x118.oneOf(x109); + Expression x121=x118.join(x28); + Formula x120=x121.one(); + Formula x122=x121.in(x14); + Formula x119=x120.and(x122); + Formula x116=x119.forAll(x117); + Expression x124=x28.join(Expression.UNIV); + Formula x123=x124.in(x109); + Variable x127=Variable.unary("NeverFindLeader_this"); + Decls x126=x127.oneOf(x109); + Expression x131=x127.join(x29); + Expression x132=x51.product(x14); + Formula x130=x131.in(x132); + Variable x135=Variable.unary(""); + Decls x134=x135.oneOf(x51); + Expression x138=x135.join(x131); + Formula x137=x138.lone(); + Formula x139=x138.in(x14); + Formula x136=x137.and(x139); + Formula x133=x136.forAll(x134); + Formula x129=x130.and(x133); + Variable x142=Variable.unary(""); + Decls x141=x142.oneOf(x14); + Expression x144=x131.join(x142); + Formula x143=x144.in(x51); + Formula x140=x143.forAll(x141); + Formula x128=x129.and(x140); + Formula x125=x128.forAll(x126); + Expression x147=x29.join(Expression.UNIV); + Expression x146=x147.join(Expression.UNIV); + Formula x145=x146.in(x109); + Variable x150=Variable.unary("NeverFindLeader_this"); + Decls x149=x150.oneOf(x109); + Expression x153=x150.join(x29); + Expression x152=x153.join(x14); + Expression x155=x150.join(x27); + Expression x154=x155.join(x26); + Formula x151=x152.in(x154); + Formula x148=x151.forAll(x149); + Variable x158=Variable.unary("NeverFindLeader_this"); + Decls x157=x158.oneOf(x14); + Expression x162=x158.join(x30); + Expression x164=x15.union(x16); + Expression x163=x51.product(x164); + Formula x161=x162.in(x163); + Variable x167=Variable.unary(""); + Decls x166=x167.oneOf(x51); + Expression x170=x167.join(x162); + Formula x169=x170.one(); + Formula x171=x170.in(x164); + Formula x168=x169.and(x171); + Formula x165=x168.forAll(x166); + Formula x160=x161.and(x165); + Variable x174=Variable.unary(""); + Decls x173=x174.oneOf(x164); + Expression x176=x162.join(x174); + Formula x175=x176.in(x51); + Formula x172=x175.forAll(x173); + Formula x159=x160.and(x172); + Formula x156=x159.forAll(x157); + Expression x179=x30.join(Expression.UNIV); + Expression x178=x179.join(Expression.UNIV); + Formula x177=x178.in(x14); + Variable x182=Variable.unary("NeverFindLeader_this"); + Decls x181=x182.oneOf(x14); + Expression x184=x182.join(x31); + Expression x185=x51.product(x109); + Formula x183=x184.in(x185); + Formula x180=x183.forAll(x181); + Expression x188=x31.join(Expression.UNIV); + Expression x187=x188.join(Expression.UNIV); + Formula x186=x187.in(x14); + Variable x191=Variable.unary("NeverFindLeader_this"); + Decls x190=x191.oneOf(x14); + Expression x193=x191.join(x32); + Expression x194=x51.product(x109); + Formula x192=x193.in(x194); + Formula x189=x192.forAll(x190); + Expression x197=x32.join(Expression.UNIV); + Expression x196=x197.join(Expression.UNIV); + Formula x195=x196.in(x14); + Variable x200=Variable.unary("NeverFindLeader_this"); + Decls x199=x200.oneOf(x14); + Expression x202=x200.join(x33); + Expression x203=x51.product(x109); + Formula x201=x202.in(x203); + Formula x198=x201.forAll(x199); + Expression x206=x33.join(Expression.UNIV); + Expression x205=x206.join(Expression.UNIV); + Formula x204=x205.in(x14); + Variable x209=Variable.unary("NeverFindLeader_this"); + Decls x208=x209.oneOf(x14); + Expression x211=x209.join(x34); + Formula x210=x211.in(x109); + Formula x207=x210.forAll(x208); + Expression x213=x34.join(Expression.UNIV); + Formula x212=x213.in(x14); + Variable x216=Variable.unary("NeverFindLeader_this"); + Decls x215=x216.oneOf(x14); + Expression x218=x216.join(x35); + Expression x219=x51.product(x109); + Formula x217=x218.in(x219); + Formula x214=x217.forAll(x215); + Expression x222=x35.join(Expression.UNIV); + Expression x221=x222.join(Expression.UNIV); + Formula x220=x221.in(x14); + Variable x225=Variable.unary("NeverFindLeader_this"); + Decls x224=x225.oneOf(x15); + Expression x228=x225.join(x24); + Formula x227=x228.one(); + Expression x230=x6.union(x7); + Formula x229=x228.in(x230); + Formula x226=x227.and(x229); + Formula x223=x226.forAll(x224); + Expression x232=x24.join(Expression.UNIV); + Formula x231=x232.in(x15); + Expression x235=x17.product(x36); + Expression x234=x17.join(x235); + Formula x233=x234.in(x14); + Expression x238=x17.product(x37); + Expression x237=x17.join(x238); + Expression x239=x14.product(x14); + Formula x236=x237.in(x239); + Formula x240=x37.totalOrder(x14,x36,x40); + Expression x243=x18.product(x38); + Expression x242=x18.join(x243); + Formula x241=x242.in(x51); + Expression x246=x18.product(x39); + Expression x245=x18.join(x246); + Expression x247=x51.product(x51); + Formula x244=x245.in(x247); + Variable x252=Variable.unary(""); + Decls x251=x252.oneOf(x51); + Formula x256=x252.eq(x38); + Expression x258=x39.join(x252); + Formula x257=x258.one(); + Formula x255=x256.or(x257); + Expression x262=x39.join(x51); + Expression x261=x51.difference(x262); + Formula x260=x252.eq(x261); + Expression x264=x252.join(x39); + Formula x263=x264.one(); + Formula x259=x260.or(x263); + Formula x254=x255.and(x259); + Expression x268=x39.closure(); + Expression x267=x252.join(x268); + Formula x266=x252.in(x267); + Formula x265=x266.not(); + Formula x253=x254.and(x265); + Formula x250=x253.forAll(x251); + Expression x271=x39.reflexiveClosure(); + Expression x270=x38.join(x271); + Formula x269=x51.in(x270); + Formula x249=x250.and(x269); + Expression x273=x39.join(x38); + Formula x272=x273.no(); + Formula x248=x249.and(x272); + Formula x275=x51.one(); + Variable x278=Variable.unary("NeverFindLeader_n"); + Decls x277=x278.oneOf(x51); + Expression x281=x278.join(x19); + Formula x280=x278.eq(x281); + Formula x279=x280.not(); + Formula x276=x279.forAll(x277); + Formula x274=x275.or(x276); + Variable x284=Variable.unary("NeverFindLeader_n"); + Decls x283=x284.oneOf(x51); + Expression x287=x19.closure(); + Expression x286=x284.join(x287); + Formula x285=x51.in(x286); + Formula x282=x285.forAll(x283); + Formula x288=x12.eq(x109); + Expression x290=x27.join(x25); + Formula x289=x21.eq(x290); + Expression x292=x27.join(x26); + Formula x291=x22.eq(x292); + Expression x294=x27.join(x20); + Formula x293=x23.eq(x294); + Variable x297=Variable.unary("NeverFindLeader_n"); + Decls x296=x297.oneOf(x51); + Expression x301=x36.join(x30); + Expression x300=x297.join(x301); + Expression x299=x300.join(x24); + Formula x298=x299.eq(x7); + Formula x295=x298.forAll(x296); + Variable x304=Variable.unary("NeverFindLeader_n"); + Decls x303=x304.oneOf(x51); + Variable x308=Variable.unary("NeverFindLeader_t"); + Expression x311=x37.join(x14); + Expression x310=x14.difference(x311); + Expression x309=x14.difference(x310); + Decls x307=x308.oneOf(x309); + Formula x314=x308.eq(x36); + Expression x319=x308.join(x33); + Expression x318=x304.join(x319); + Formula x317=x318.one(); + Expression x325=x308.join(x35); + Expression x324=x304.join(x325); + IntExpression x323=x324.count(); + IntExpression x326=IntConstant.constant(1); + Formula x322=x323.eq(x326); + Expression x329=x318.join(x27); + Expression x328=x329.join(x20); + Formula x327=x328.eq(x304); + Formula x321=x322.and(x327); + Expression x334=x308.join(x37); + Expression x333=x334.join(x30); + Expression x332=x304.join(x333); + Expression x331=x332.join(x24); + Formula x330=x331.eq(x7); + Formula x320=x321.and(x330); + Formula x316=x317.and(x320); + Expression x337=x318.join(x27); + Expression x336=x337.join(x26); + Expression x338=x304.join(x19); + Formula x335=x336.eq(x338); + Formula x315=x316.and(x335); + Formula x313=x314.implies(x315); + Formula x340=x314.not(); + Expression x346=x308.join(x32); + Expression x345=x304.join(x346); + Expression x348=x308.join(x31); + Expression x347=x304.join(x348); + Formula x344=x345.eq(x347); + Variable x352=Variable.unary("RingLeadTransHelper_received"); + Decls x351=x352.oneOf(x345); + Expression x357=x352.join(x27); + Expression x356=x357.join(x20); + Expression x359=x39.closure(); + Expression x358=x304.join(x359); + Formula x355=x356.in(x358); + Formula x354=x355.not(); + Variable x363=Variable.unary("RingLeadTransHelper_weSend"); + Expression x365=x308.join(x33); + Expression x364=x304.join(x365); + Decls x362=x363.oneOf(x364); + Expression x369=x363.join(x27); + Expression x368=x369.join(x20); + Expression x371=x352.join(x27); + Expression x370=x371.join(x20); + Formula x367=x368.eq(x370); + Expression x374=x363.join(x27); + Expression x373=x374.join(x26); + Expression x375=x304.join(x19); + Formula x372=x373.eq(x375); + Formula x366=x367.and(x372); + Expression x361=x366.comprehension(x362); + Formula x360=x361.one(); + Formula x353=x354.or(x360); + Formula x350=x353.forAll(x351); + Expression x379=x308.join(x35); + Expression x378=x304.join(x379); + IntExpression x377=x378.count(); + Variable x383=Variable.unary("RingLeadTransHelper_m"); + Decls x382=x383.oneOf(x345); + Expression x386=x383.join(x27); + Expression x385=x386.join(x20); + Expression x388=x39.closure(); + Expression x387=x304.join(x388); + Formula x384=x385.in(x387); + Expression x381=x384.comprehension(x382); + IntExpression x380=x381.count(); + Formula x376=x377.eq(x380); + Formula x349=x350.and(x376); + Formula x343=x344.and(x349); + Variable x391=Variable.unary("RingLeadTransHelper_weSend"); + Decls x390=x391.oneOf(x364); + Expression x396=x391.join(x27); + Expression x395=x396.join(x20); + Expression x398=x39.closure(); + Expression x397=x304.join(x398); + Formula x394=x395.in(x397); + Expression x401=x345.join(x27); + Expression x400=x401.join(x20); + Formula x399=x395.in(x400); + Formula x393=x394.and(x399); + Expression x404=x391.join(x27); + Expression x403=x404.join(x26); + Expression x405=x304.join(x19); + Formula x402=x403.eq(x405); + Formula x392=x393.and(x402); + Formula x389=x392.forAll(x390); + Formula x342=x343.and(x389); + Expression x411=x308.join(x37); + Expression x410=x411.join(x30); + Expression x409=x304.join(x410); + Expression x408=x409.join(x24); + Formula x407=x408.eq(x6); + Expression x416=x308.join(x30); + Expression x415=x304.join(x416); + Expression x414=x415.join(x24); + Formula x413=x414.eq(x6); + Expression x419=x345.join(x27); + Expression x418=x419.join(x20); + Formula x417=x304.in(x418); + Formula x412=x413.or(x417); + Formula x406=x407.iff(x412); + Formula x341=x342.and(x406); + Formula x339=x340.implies(x341); + Formula x312=x313.and(x339); + Formula x306=x312.forAll(x307); + Expression x424=x310.join(x32); + Expression x423=x304.join(x424); + Expression x426=x310.join(x31); + Expression x425=x304.join(x426); + Formula x422=x423.eq(x425); + Variable x430=Variable.unary("RingLeadTransHelper_received"); + Decls x429=x430.oneOf(x423); + Expression x435=x430.join(x27); + Expression x434=x435.join(x20); + Expression x437=x39.closure(); + Expression x436=x304.join(x437); + Formula x433=x434.in(x436); + Formula x432=x433.not(); + Variable x441=Variable.unary("RingLeadTransHelper_weSend"); + Expression x443=x310.join(x33); + Expression x442=x304.join(x443); + Decls x440=x441.oneOf(x442); + Expression x447=x441.join(x27); + Expression x446=x447.join(x20); + Expression x449=x430.join(x27); + Expression x448=x449.join(x20); + Formula x445=x446.eq(x448); + Expression x452=x441.join(x27); + Expression x451=x452.join(x26); + Expression x453=x304.join(x19); + Formula x450=x451.eq(x453); + Formula x444=x445.and(x450); + Expression x439=x444.comprehension(x440); + Formula x438=x439.one(); + Formula x431=x432.or(x438); + Formula x428=x431.forAll(x429); + Expression x457=x310.join(x35); + Expression x456=x304.join(x457); + IntExpression x455=x456.count(); + Variable x461=Variable.unary("RingLeadTransHelper_m"); + Decls x460=x461.oneOf(x423); + Expression x464=x461.join(x27); + Expression x463=x464.join(x20); + Expression x466=x39.closure(); + Expression x465=x304.join(x466); + Formula x462=x463.in(x465); + Expression x459=x462.comprehension(x460); + IntExpression x458=x459.count(); + Formula x454=x455.eq(x458); + Formula x427=x428.and(x454); + Formula x421=x422.and(x427); + Variable x469=Variable.unary("RingLeadTransHelper_weSend"); + Decls x468=x469.oneOf(x442); + Expression x474=x469.join(x27); + Expression x473=x474.join(x20); + Expression x476=x39.closure(); + Expression x475=x304.join(x476); + Formula x472=x473.in(x475); + Expression x479=x423.join(x27); + Expression x478=x479.join(x20); + Formula x477=x473.in(x478); + Formula x471=x472.and(x477); + Expression x482=x469.join(x27); + Expression x481=x482.join(x26); + Expression x483=x304.join(x19); + Formula x480=x481.eq(x483); + Formula x470=x471.and(x480); + Formula x467=x470.forAll(x468); + Formula x420=x421.and(x467); + Formula x305=x306.and(x420); + Formula x302=x305.forAll(x303); + Formula x484=x8.eq(x51); + Formula x485=x10.eq(x67); + Formula x486=x15.eq(x164); + Expression x489=x36.join(x31); + Expression x488=x51.join(x489); + Formula x487=x488.no(); + Variable x492=Variable.unary("NeverFindLeader_pre"); + Expression x493=x14.difference(x310); + Decls x491=x492.oneOf(x493); + Expression x496=x492.join(x37); + Expression x495=x496.join(x34); + Expression x498=x492.join(x34); + Expression x500=x492.join(x33); + Expression x499=x51.join(x500); + Expression x497=x498.difference(x499); + Formula x494=x495.eq(x497); + Formula x490=x494.forAll(x491); + Variable x503=Variable.unary("NeverFindLeader_t"); + Decls x502=x503.oneOf(x14); + Expression x508=x503.join(x33); + Expression x507=x51.join(x508); + Expression x509=x503.join(x34); + Formula x506=x507.in(x509); + Expression x515=x503.join(x33); + Expression x514=x51.join(x515); + Expression x513=x514.join(x28); + Formula x512=x513.in(x503); + Expression x518=x503.join(x33); + Expression x517=x51.join(x518); + Expression x520=x503.join(x33); + Expression x519=x51.join(x520); + Formula x516=x517.eq(x519); + Formula x511=x512.and(x516); + Variable x524=Variable.unary("NeverFindLeader_n"); + Decls x523=x524.oneOf(x51); + Variable x526=Variable.unary("NeverFindLeader_m"); + Decls x525=x526.oneOf(x109); + Decls x522=x523.and(x525); + Expression x531=x526.join(x29); + Expression x530=x524.join(x531); + Formula x529=x530.eq(x503); + Formula x528=x529.not(); + Expression x534=x503.join(x32); + Expression x533=x524.join(x534); + Formula x532=x526.in(x533); + Formula x527=x528.or(x532); + Formula x521=x527.forAll(x522); + Formula x510=x511.and(x521); + Formula x505=x506.and(x510); + Expression x541=x503.join(x32); + Expression x540=x51.join(x541); + Expression x539=x540.join(x29); + Expression x538=x51.join(x539); + Formula x537=x538.in(x503); + Variable x544=Variable.unary("NeverFindLeader_n"); + Decls x543=x544.oneOf(x51); + Expression x549=x503.join(x33); + Expression x548=x544.join(x549); + Expression x547=x548.join(x27); + Expression x546=x547.join(x25); + Formula x545=x546.in(x544); + Formula x542=x545.forAll(x543); + Formula x536=x537.and(x542); + Variable x553=Variable.unary("NeverFindLeader_n"); + Decls x552=x553.oneOf(x51); + Variable x555=Variable.unary("NeverFindLeader_m"); + Decls x554=x555.oneOf(x109); + Decls x551=x552.and(x554); + Expression x561=x503.join(x31); + Expression x560=x553.join(x561); + Formula x559=x555.in(x560); + Formula x558=x559.not(); + Expression x565=x555.join(x27); + Expression x564=x565.join(x26); + Formula x563=x553.in(x564); + Expression x567=x555.join(x28); + Expression x570=x37.transpose(); + Expression x569=x570.closure(); + Expression x568=x503.join(x569); + Formula x566=x567.in(x568); + Formula x562=x563.and(x566); + Formula x557=x558.or(x562); + Expression x575=x503.join(x32); + Expression x574=x553.join(x575); + Formula x573=x555.in(x574); + Formula x572=x573.not(); + Expression x581=x37.closure(); + Expression x580=x503.join(x581); + Expression x579=x580.join(x31); + Expression x578=x553.join(x579); + Formula x577=x555.in(x578); + Formula x576=x577.not(); + Formula x571=x572.or(x576); + Formula x556=x557.and(x571); + Formula x550=x556.forAll(x551); + Formula x535=x536.and(x550); + Formula x504=x505.and(x535); + Formula x501=x504.forAll(x502); + Expression x584=x14.join(x33); + Expression x583=x51.join(x584); + Formula x582=x109.in(x583); + Formula x585=x32.in(x31); + Variable x588=Variable.unary("Loop_t"); + Expression x589=x14.difference(x310); + Decls x587=x588.oneOf(x589); + Expression x593=x588.join(x30); + Expression x594=x310.join(x30); + Formula x592=x593.eq(x594); + Variable x597=Variable.nary("TicksEquivalent_r",2); + Variable x604=Variable.unary("MsgsLiveOnTick_future"); + Decls x603=x604.oneOf(x109); + Expression x606=x604.join(x28); + Expression x608=x37.closure(); + Expression x607=x588.join(x608); + Formula x605=x606.in(x607); + Expression x602=x605.comprehension(x603); + Expression x601=x109.difference(x602); + Variable x611=Variable.unary("MsgsLiveOnTick_past"); + Decls x610=x611.oneOf(x109); + Variable x614=Variable.unary("MsgsLiveOnTick_n"); + Expression x616=x611.join(x27); + Expression x615=x616.join(x26); + Decls x613=x614.oneOf(x615); + Expression x619=x611.join(x29); + Expression x618=x614.join(x619); + Expression x622=x37.transpose(); + Expression x621=x622.closure(); + Expression x620=x588.join(x621); + Formula x617=x618.in(x620); + Formula x612=x617.forAll(x613); + Expression x609=x612.comprehension(x610); + Expression x600=x601.difference(x609); + Expression x624=x588.join(x31); + Expression x623=x51.join(x624); + Expression x599=x600.difference(x623); + Variable x630=Variable.unary("MsgsLiveOnTick_future"); + Decls x629=x630.oneOf(x109); + Expression x632=x630.join(x28); + Expression x634=x37.closure(); + Expression x633=x310.join(x634); + Formula x631=x632.in(x633); + Expression x628=x631.comprehension(x629); + Expression x627=x109.difference(x628); + Variable x637=Variable.unary("MsgsLiveOnTick_past"); + Decls x636=x637.oneOf(x109); + Variable x640=Variable.unary("MsgsLiveOnTick_n"); + Expression x642=x637.join(x27); + Expression x641=x642.join(x26); + Decls x639=x640.oneOf(x641); + Expression x645=x637.join(x29); + Expression x644=x640.join(x645); + Expression x648=x37.transpose(); + Expression x647=x648.closure(); + Expression x646=x310.join(x647); + Formula x643=x644.in(x646); + Formula x638=x643.forAll(x639); + Expression x635=x638.comprehension(x636); + Expression x626=x627.difference(x635); + Expression x650=x310.join(x31); + Expression x649=x51.join(x650); + Expression x625=x626.difference(x649); + Expression x598=x599.product(x625); + Decls x596=x597.setOf(x598); + Variable x661=Variable.unary("MsgsLiveOnTick_future"); + Decls x660=x661.oneOf(x109); + Expression x663=x661.join(x28); + Expression x665=x37.closure(); + Expression x664=x588.join(x665); + Formula x662=x663.in(x664); + Expression x659=x662.comprehension(x660); + Expression x658=x109.difference(x659); + Variable x668=Variable.unary("MsgsLiveOnTick_past"); + Decls x667=x668.oneOf(x109); + Variable x671=Variable.unary("MsgsLiveOnTick_n"); + Expression x673=x668.join(x27); + Expression x672=x673.join(x26); + Decls x670=x671.oneOf(x672); + Expression x676=x668.join(x29); + Expression x675=x671.join(x676); + Expression x679=x37.transpose(); + Expression x678=x679.closure(); + Expression x677=x588.join(x678); + Formula x674=x675.in(x677); + Formula x669=x674.forAll(x670); + Expression x666=x669.comprehension(x667); + Expression x657=x658.difference(x666); + Expression x681=x588.join(x31); + Expression x680=x51.join(x681); + Expression x656=x657.difference(x680); + Variable x687=Variable.unary("MsgsLiveOnTick_future"); + Decls x686=x687.oneOf(x109); + Expression x689=x687.join(x28); + Expression x691=x37.closure(); + Expression x690=x310.join(x691); + Formula x688=x689.in(x690); + Expression x685=x688.comprehension(x686); + Expression x684=x109.difference(x685); + Variable x694=Variable.unary("MsgsLiveOnTick_past"); + Decls x693=x694.oneOf(x109); + Variable x697=Variable.unary("MsgsLiveOnTick_n"); + Expression x699=x694.join(x27); + Expression x698=x699.join(x26); + Decls x696=x697.oneOf(x698); + Expression x702=x694.join(x29); + Expression x701=x697.join(x702); + Expression x705=x37.transpose(); + Expression x704=x705.closure(); + Expression x703=x310.join(x704); + Formula x700=x701.in(x703); + Formula x695=x700.forAll(x696); + Expression x692=x695.comprehension(x693); + Expression x683=x684.difference(x692); + Expression x707=x310.join(x31); + Expression x706=x51.join(x707); + Expression x682=x683.difference(x706); + Expression x655=x656.product(x682); + Formula x654=x597.in(x655); + Variable x710=Variable.unary(""); + Decls x709=x710.oneOf(x656); + Expression x713=x710.join(x597); + Formula x712=x713.one(); + Variable x720=Variable.unary("MsgsLiveOnTick_future"); + Decls x719=x720.oneOf(x109); + Expression x722=x720.join(x28); + Expression x724=x37.closure(); + Expression x723=x310.join(x724); + Formula x721=x722.in(x723); + Expression x718=x721.comprehension(x719); + Expression x717=x109.difference(x718); + Variable x727=Variable.unary("MsgsLiveOnTick_past"); + Decls x726=x727.oneOf(x109); + Variable x730=Variable.unary("MsgsLiveOnTick_n"); + Expression x732=x727.join(x27); + Expression x731=x732.join(x26); + Decls x729=x730.oneOf(x731); + Expression x735=x727.join(x29); + Expression x734=x730.join(x735); + Expression x738=x37.transpose(); + Expression x737=x738.closure(); + Expression x736=x310.join(x737); + Formula x733=x734.in(x736); + Formula x728=x733.forAll(x729); + Expression x725=x728.comprehension(x726); + Expression x716=x717.difference(x725); + Expression x740=x310.join(x31); + Expression x739=x51.join(x740); + Expression x715=x716.difference(x739); + Formula x714=x713.in(x715); + Formula x711=x712.and(x714); + Formula x708=x711.forAll(x709); + Formula x653=x654.and(x708); + Variable x743=Variable.unary(""); + Decls x742=x743.oneOf(x682); + Expression x746=x597.join(x743); + Formula x745=x746.one(); + Variable x753=Variable.unary("MsgsLiveOnTick_future"); + Decls x752=x753.oneOf(x109); + Expression x755=x753.join(x28); + Expression x757=x37.closure(); + Expression x756=x588.join(x757); + Formula x754=x755.in(x756); + Expression x751=x754.comprehension(x752); + Expression x750=x109.difference(x751); + Variable x760=Variable.unary("MsgsLiveOnTick_past"); + Decls x759=x760.oneOf(x109); + Variable x763=Variable.unary("MsgsLiveOnTick_n"); + Expression x765=x760.join(x27); + Expression x764=x765.join(x26); + Decls x762=x763.oneOf(x764); + Expression x768=x760.join(x29); + Expression x767=x763.join(x768); + Expression x771=x37.transpose(); + Expression x770=x771.closure(); + Expression x769=x588.join(x770); + Formula x766=x767.in(x769); + Formula x761=x766.forAll(x762); + Expression x758=x761.comprehension(x759); + Expression x749=x750.difference(x758); + Expression x773=x588.join(x31); + Expression x772=x51.join(x773); + Expression x748=x749.difference(x772); + Formula x747=x746.in(x748); + Formula x744=x745.and(x747); + Formula x741=x744.forAll(x742); + Formula x652=x653.and(x741); + Variable x776=Variable.unary("TicksEquivalent_m1"); + Expression x786=Expression.INTS.union(x5); + Expression x785=x786.union(x230); + Expression x784=x785.union(x51); + Expression x783=x784.union(x67); + Expression x782=x783.union(x109); + Expression x781=x782.union(x14); + Expression x780=x781.union(x164); + Expression x779=x780.union(x17); + Expression x778=x779.union(x18); + Expression x777=x597.join(x778); + Decls x775=x776.oneOf(x777); + Expression x789=x776.join(x27); + Expression x791=x776.join(x597); + Expression x790=x791.join(x27); + Formula x788=x789.eq(x790); + Formula x774=x788.forAll(x775); + Formula x651=x652.and(x774); + Formula x595=x651.forSome(x596); + Formula x591=x592.and(x595); + Variable x794=Variable.nary("TicksEquivalent_r",2); + Expression x797=x588.join(x31); + Expression x796=x51.join(x797); + Expression x799=x310.join(x31); + Expression x798=x51.join(x799); + Expression x795=x796.product(x798); + Decls x793=x794.setOf(x795); + Expression x806=x588.join(x31); + Expression x805=x51.join(x806); + Expression x808=x310.join(x31); + Expression x807=x51.join(x808); + Expression x804=x805.product(x807); + Formula x803=x794.in(x804); + Variable x811=Variable.unary(""); + Decls x810=x811.oneOf(x805); + Expression x814=x811.join(x794); + Formula x813=x814.one(); + Expression x817=x310.join(x31); + Expression x816=x51.join(x817); + Formula x815=x814.in(x816); + Formula x812=x813.and(x815); + Formula x809=x812.forAll(x810); + Formula x802=x803.and(x809); + Variable x820=Variable.unary(""); + Decls x819=x820.oneOf(x807); + Expression x823=x794.join(x820); + Formula x822=x823.one(); + Expression x826=x588.join(x31); + Expression x825=x51.join(x826); + Formula x824=x823.in(x825); + Formula x821=x822.and(x824); + Formula x818=x821.forAll(x819); + Formula x801=x802.and(x818); + Variable x829=Variable.unary("TicksEquivalent_m1"); + Expression x830=x794.join(x778); + Decls x828=x829.oneOf(x830); + Expression x832=x829.join(x27); + Expression x834=x829.join(x794); + Expression x833=x834.join(x27); + Formula x831=x832.eq(x833); + Formula x827=x831.forAll(x828); + Formula x800=x801.and(x827); + Formula x792=x800.forSome(x793); + Formula x590=x591.and(x792); + Formula x586=x590.forSome(x587); + Variable x837=Variable.unary("NeverFindLeader_t"); + Decls x836=x837.oneOf(x14); + Variable x841=Variable.unary("SomeLeaderAtTick_n"); + Decls x840=x841.oneOf(x51); + Expression x845=x837.join(x30); + Expression x844=x841.join(x845); + Expression x843=x844.join(x24); + Formula x842=x843.eq(x6); + Formula x839=x842.forSome(x840); + Formula x838=x839.not(); + Formula x835=x838.forAll(x836); + Formula x846=x0.eq(x0); + Formula x847=x1.eq(x1); + Formula x848=x2.eq(x2); + Formula x849=x3.eq(x3); + Formula x850=x4.eq(x4); + Formula x851=x5.eq(x5); + Formula x852=x6.eq(x6); + Formula x853=x7.eq(x7); + Formula x854=x8.eq(x8); + Formula x855=x9.eq(x9); + Formula x856=x10.eq(x10); + Formula x857=x11.eq(x11); + Formula x858=x12.eq(x12); + Formula x859=x13.eq(x13); + Formula x860=x14.eq(x14); + Formula x861=x15.eq(x15); + Formula x862=x16.eq(x16); + Formula x863=x17.eq(x17); + Formula x864=x18.eq(x18); + Formula x865=x19.eq(x19); + Formula x866=x20.eq(x20); + Formula x867=x21.eq(x21); + Formula x868=x22.eq(x22); + Formula x869=x23.eq(x23); + Formula x870=x24.eq(x24); + Formula x871=x25.eq(x25); + Formula x872=x26.eq(x26); + Formula x873=x27.eq(x27); + Formula x874=x28.eq(x28); + Formula x875=x29.eq(x29); + Formula x876=x30.eq(x30); + Formula x877=x31.eq(x31); + Formula x878=x32.eq(x32); + Formula x879=x33.eq(x33); + Formula x880=x34.eq(x34); + Formula x881=x35.eq(x35); + Formula x882=x36.eq(x36); + Formula x883=x37.eq(x37); + Formula x884=x38.eq(x38); + Formula x885=x39.eq(x39); + Formula x886=x40.eq(x40); + Formula x41=Formula.compose(FormulaOperator.AND, x42, x44, x52, x55, x62, x64, x72, x74, x79, x81, x88, x90, x95, x97, x104, x106, x114, x116, x123, x125, x145, x148, x156, x177, x180, x186, x189, x195, x198, x204, x207, x212, x214, x220, x223, x231, x233, x236, x240, x241, x244, x248, x274, x282, x288, x289, x291, x293, x295, x302, x484, x485, x486, x487, x490, x501, x582, x585, x586, x835, x846, x847, x848, x849, x850, x851, x852, x853, x854, x855, x856, x857, x858, x859, x860, x861, x862, x863, x864, x865, x866, x867, x868, x869, x870, x871, x872, x873, x874, x875, x876, x877, x878, x879, x880, x881, x882, x883, x884, x885, x886); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x41,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadNeverFindLeaderRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadNeverFindLeaderRun.java new file mode 100644 index 0000000..7395d0a --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadNeverFindLeaderRun.java @@ -0,0 +1,1179 @@ +package kodkod.examples.models.algorithm.election; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ringlead", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 14, + TernaryRelations =6, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 28, + TransitiveClosure = 1, + NestedQuantifiers = 3, + SetCardinality = 5, + Additions = 0, + Subtractions = 0, + Comparison = 17, + OrderedRelations = 2, + Constraints =28 +) + +public final class ringleadNeverFindLeaderRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("bool/True"); + Relation x7 = Relation.unary("bool/False"); + Relation x8 = Relation.unary("this/RingLeadNode"); + Relation x9 = Relation.unary("msg/Node remainder"); + Relation x10 = Relation.unary("this/RingLeadMsgState"); + Relation x11 = Relation.unary("msg/MsgState remainder"); + Relation x12 = Relation.unary("this/MsgViz"); + Relation x13 = Relation.unary("msg/Msg remainder"); + Relation x14 = Relation.unary("msg/Tick"); + Relation x15 = Relation.unary("this/RingLeadNodeState"); + Relation x16 = Relation.unary("msg/NodeState remainder"); + Relation x17 = Relation.unary("tickOrd/Ord"); + Relation x18 = Relation.unary("nodeOrd/Ord"); + Relation x19 = Relation.nary("this/RingLeadNode.rightNeighbor", 2); + Relation x20 = Relation.nary("this/RingLeadMsgState.id", 2); + Relation x21 = Relation.nary("this/MsgViz.vFrom", 2); + Relation x22 = Relation.nary("this/MsgViz.vTo", 2); + Relation x23 = Relation.nary("this/MsgViz.vId", 2); + Relation x24 = Relation.nary("this/RingLeadNodeState.leader", 2); + Relation x25 = Relation.nary("msg/MsgState.from", 2); + Relation x26 = Relation.nary("msg/MsgState.to", 2); + Relation x27 = Relation.nary("msg/Msg.state", 2); + Relation x28 = Relation.nary("msg/Msg.sentOn", 2); + Relation x29 = Relation.nary("msg/Msg.readOn", 3); + Relation x30 = Relation.nary("msg/Tick.state", 3); + Relation x31 = Relation.nary("msg/Tick.visible", 3); + Relation x32 = Relation.nary("msg/Tick.read", 3); + Relation x33 = Relation.nary("msg/Tick.sent", 3); + Relation x34 = Relation.nary("msg/Tick.available", 2); + Relation x35 = Relation.nary("msg/Tick.needsToSend", 3); + Relation x36 = Relation.unary("tickOrd/Ord.First"); + Relation x37 = Relation.nary("tickOrd/Ord.Next", 2); + Relation x38 = Relation.unary("nodeOrd/Ord.First"); + Relation x39 = Relation.nary("nodeOrd/Ord.Next", 2); + Relation x40 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "bool/False$0", + "bool/True$0", "msg/Msg$0", "msg/MsgState$0", "msg/Node$0", "msg/NodeState$0", "msg/NodeState$1", + "msg/Tick$0", "msg/Tick$1", "msg/Tick$2", "nodeOrd/Ord$0", "tickOrd/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("bool/True$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("bool/False$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("msg/Node$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("msg/Node$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("msg/MsgState$0")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("msg/MsgState$0")); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("msg/Msg$0")); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("msg/Msg$0")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("msg/Tick$0")); + x14_upper.add(factory.tuple("msg/Tick$1")); + x14_upper.add(factory.tuple("msg/Tick$2")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("msg/NodeState$0")); + x15_upper.add(factory.tuple("msg/NodeState$1")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("msg/NodeState$0")); + x16_upper.add(factory.tuple("msg/NodeState$1")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("tickOrd/Ord$0")); + bounds.boundExactly(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("nodeOrd/Ord$0")); + bounds.boundExactly(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(2); + x22_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(2); + x24_upper.add(factory.tuple("msg/NodeState$0").product(factory.tuple("bool/True$0"))); + x24_upper.add(factory.tuple("msg/NodeState$0").product(factory.tuple("bool/False$0"))); + x24_upper.add(factory.tuple("msg/NodeState$1").product(factory.tuple("bool/True$0"))); + x24_upper.add(factory.tuple("msg/NodeState$1").product(factory.tuple("bool/False$0"))); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(2); + x25_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x25, x25_upper); + + TupleSet x26_upper = factory.noneOf(2); + x26_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x26, x26_upper); + + TupleSet x27_upper = factory.noneOf(2); + x27_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/MsgState$0"))); + bounds.bound(x27, x27_upper); + + TupleSet x28_upper = factory.noneOf(2); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$0"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$1"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$2"))); + bounds.bound(x28, x28_upper); + + TupleSet x29_upper = factory.noneOf(3); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$2"))); + bounds.bound(x29, x29_upper); + + TupleSet x30_upper = factory.noneOf(3); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + bounds.bound(x30, x30_upper); + + TupleSet x31_upper = factory.noneOf(3); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + bounds.bound(x31, x31_upper); + + TupleSet x32_upper = factory.noneOf(3); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + bounds.bound(x32, x32_upper); + + TupleSet x33_upper = factory.noneOf(3); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + bounds.bound(x33, x33_upper); + + TupleSet x34_upper = factory.noneOf(2); + x34_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Msg$0"))); + bounds.bound(x34, x34_upper); + + TupleSet x35_upper = factory.noneOf(3); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + bounds.bound(x35, x35_upper); + + TupleSet x36_upper = factory.noneOf(1); + x36_upper.add(factory.tuple("msg/Tick$0")); + x36_upper.add(factory.tuple("msg/Tick$1")); + x36_upper.add(factory.tuple("msg/Tick$2")); + bounds.bound(x36, x36_upper); + + TupleSet x37_upper = factory.noneOf(2); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$2"))); + bounds.bound(x37, x37_upper); + + TupleSet x38_upper = factory.noneOf(1); + x38_upper.add(factory.tuple("msg/Node$0")); + bounds.bound(x38, x38_upper); + + TupleSet x39_upper = factory.noneOf(2); + x39_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x39, x39_upper); + + TupleSet x40_upper = factory.noneOf(1); + x40_upper.add(factory.tuple("msg/Tick$0")); + x40_upper.add(factory.tuple("msg/Tick$1")); + x40_upper.add(factory.tuple("msg/Tick$2")); + bounds.bound(x40, x40_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x43=x6.intersection(x7); + Formula x42=x43.no(); + Variable x46=Variable.unary("NeverFindLeader_this"); + Decls x45=x46.oneOf(x8); + Expression x49=x46.join(x19); + Formula x48=x49.one(); + Expression x51=x8.union(x9); + Formula x50=x49.in(x51); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x53=x19.join(Expression.UNIV); + Formula x52=x53.in(x8); + Variable x57=Variable.unary("NeverFindLeader_this"); + Decls x56=x57.oneOf(x10); + Expression x60=x57.join(x20); + Formula x59=x60.one(); + Formula x61=x60.in(x51); + Formula x58=x59.and(x61); + Formula x55=x58.forAll(x56); + Expression x63=x20.join(Expression.UNIV); + Formula x62=x63.in(x10); + Variable x66=Variable.unary("NeverFindLeader_this"); + Expression x67=x10.union(x11); + Decls x65=x66.oneOf(x67); + Expression x70=x66.join(x25); + Formula x69=x70.one(); + Formula x71=x70.in(x51); + Formula x68=x69.and(x71); + Formula x64=x68.forAll(x65); + Expression x73=x25.join(Expression.UNIV); + Formula x72=x73.in(x67); + Variable x76=Variable.unary("NeverFindLeader_this"); + Decls x75=x76.oneOf(x67); + Expression x78=x76.join(x26); + Formula x77=x78.in(x51); + Formula x74=x77.forAll(x75); + Expression x80=x26.join(Expression.UNIV); + Formula x79=x80.in(x67); + Variable x83=Variable.unary("NeverFindLeader_this"); + Decls x82=x83.oneOf(x12); + Expression x86=x83.join(x21); + Formula x85=x86.one(); + Formula x87=x86.in(x51); + Formula x84=x85.and(x87); + Formula x81=x84.forAll(x82); + Expression x89=x21.join(Expression.UNIV); + Formula x88=x89.in(x12); + Variable x92=Variable.unary("NeverFindLeader_this"); + Decls x91=x92.oneOf(x12); + Expression x94=x92.join(x22); + Formula x93=x94.in(x51); + Formula x90=x93.forAll(x91); + Expression x96=x22.join(Expression.UNIV); + Formula x95=x96.in(x12); + Variable x99=Variable.unary("NeverFindLeader_this"); + Decls x98=x99.oneOf(x12); + Expression x102=x99.join(x23); + Formula x101=x102.one(); + Formula x103=x102.in(x51); + Formula x100=x101.and(x103); + Formula x97=x100.forAll(x98); + Expression x105=x23.join(Expression.UNIV); + Formula x104=x105.in(x12); + Variable x108=Variable.unary("NeverFindLeader_this"); + Expression x109=x12.union(x13); + Decls x107=x108.oneOf(x109); + Expression x112=x108.join(x27); + Formula x111=x112.one(); + Formula x113=x112.in(x67); + Formula x110=x111.and(x113); + Formula x106=x110.forAll(x107); + Expression x115=x27.join(Expression.UNIV); + Formula x114=x115.in(x109); + Variable x118=Variable.unary("NeverFindLeader_this"); + Decls x117=x118.oneOf(x109); + Expression x121=x118.join(x28); + Formula x120=x121.one(); + Formula x122=x121.in(x14); + Formula x119=x120.and(x122); + Formula x116=x119.forAll(x117); + Expression x124=x28.join(Expression.UNIV); + Formula x123=x124.in(x109); + Variable x127=Variable.unary("NeverFindLeader_this"); + Decls x126=x127.oneOf(x109); + Expression x131=x127.join(x29); + Expression x132=x51.product(x14); + Formula x130=x131.in(x132); + Variable x135=Variable.unary(""); + Decls x134=x135.oneOf(x51); + Expression x138=x135.join(x131); + Formula x137=x138.lone(); + Formula x139=x138.in(x14); + Formula x136=x137.and(x139); + Formula x133=x136.forAll(x134); + Formula x129=x130.and(x133); + Variable x142=Variable.unary(""); + Decls x141=x142.oneOf(x14); + Expression x144=x131.join(x142); + Formula x143=x144.in(x51); + Formula x140=x143.forAll(x141); + Formula x128=x129.and(x140); + Formula x125=x128.forAll(x126); + Expression x147=x29.join(Expression.UNIV); + Expression x146=x147.join(Expression.UNIV); + Formula x145=x146.in(x109); + Variable x150=Variable.unary("NeverFindLeader_this"); + Decls x149=x150.oneOf(x109); + Expression x153=x150.join(x29); + Expression x152=x153.join(x14); + Expression x155=x150.join(x27); + Expression x154=x155.join(x26); + Formula x151=x152.in(x154); + Formula x148=x151.forAll(x149); + Variable x158=Variable.unary("NeverFindLeader_this"); + Decls x157=x158.oneOf(x14); + Expression x162=x158.join(x30); + Expression x164=x15.union(x16); + Expression x163=x51.product(x164); + Formula x161=x162.in(x163); + Variable x167=Variable.unary(""); + Decls x166=x167.oneOf(x51); + Expression x170=x167.join(x162); + Formula x169=x170.one(); + Formula x171=x170.in(x164); + Formula x168=x169.and(x171); + Formula x165=x168.forAll(x166); + Formula x160=x161.and(x165); + Variable x174=Variable.unary(""); + Decls x173=x174.oneOf(x164); + Expression x176=x162.join(x174); + Formula x175=x176.in(x51); + Formula x172=x175.forAll(x173); + Formula x159=x160.and(x172); + Formula x156=x159.forAll(x157); + Expression x179=x30.join(Expression.UNIV); + Expression x178=x179.join(Expression.UNIV); + Formula x177=x178.in(x14); + Variable x182=Variable.unary("NeverFindLeader_this"); + Decls x181=x182.oneOf(x14); + Expression x184=x182.join(x31); + Expression x185=x51.product(x109); + Formula x183=x184.in(x185); + Formula x180=x183.forAll(x181); + Expression x188=x31.join(Expression.UNIV); + Expression x187=x188.join(Expression.UNIV); + Formula x186=x187.in(x14); + Variable x191=Variable.unary("NeverFindLeader_this"); + Decls x190=x191.oneOf(x14); + Expression x193=x191.join(x32); + Expression x194=x51.product(x109); + Formula x192=x193.in(x194); + Formula x189=x192.forAll(x190); + Expression x197=x32.join(Expression.UNIV); + Expression x196=x197.join(Expression.UNIV); + Formula x195=x196.in(x14); + Variable x200=Variable.unary("NeverFindLeader_this"); + Decls x199=x200.oneOf(x14); + Expression x202=x200.join(x33); + Expression x203=x51.product(x109); + Formula x201=x202.in(x203); + Formula x198=x201.forAll(x199); + Expression x206=x33.join(Expression.UNIV); + Expression x205=x206.join(Expression.UNIV); + Formula x204=x205.in(x14); + Variable x209=Variable.unary("NeverFindLeader_this"); + Decls x208=x209.oneOf(x14); + Expression x211=x209.join(x34); + Formula x210=x211.in(x109); + Formula x207=x210.forAll(x208); + Expression x213=x34.join(Expression.UNIV); + Formula x212=x213.in(x14); + Variable x216=Variable.unary("NeverFindLeader_this"); + Decls x215=x216.oneOf(x14); + Expression x218=x216.join(x35); + Expression x219=x51.product(x109); + Formula x217=x218.in(x219); + Formula x214=x217.forAll(x215); + Expression x222=x35.join(Expression.UNIV); + Expression x221=x222.join(Expression.UNIV); + Formula x220=x221.in(x14); + Variable x225=Variable.unary("NeverFindLeader_this"); + Decls x224=x225.oneOf(x15); + Expression x228=x225.join(x24); + Formula x227=x228.one(); + Expression x230=x6.union(x7); + Formula x229=x228.in(x230); + Formula x226=x227.and(x229); + Formula x223=x226.forAll(x224); + Expression x232=x24.join(Expression.UNIV); + Formula x231=x232.in(x15); + Expression x235=x17.product(x36); + Expression x234=x17.join(x235); + Formula x233=x234.in(x14); + Expression x238=x17.product(x37); + Expression x237=x17.join(x238); + Expression x239=x14.product(x14); + Formula x236=x237.in(x239); + Formula x240=x37.totalOrder(x14,x36,x40); + Expression x243=x18.product(x38); + Expression x242=x18.join(x243); + Formula x241=x242.in(x51); + Expression x246=x18.product(x39); + Expression x245=x18.join(x246); + Expression x247=x51.product(x51); + Formula x244=x245.in(x247); + Variable x252=Variable.unary(""); + Decls x251=x252.oneOf(x51); + Formula x256=x252.eq(x38); + Expression x258=x39.join(x252); + Formula x257=x258.one(); + Formula x255=x256.or(x257); + Expression x262=x39.join(x51); + Expression x261=x51.difference(x262); + Formula x260=x252.eq(x261); + Expression x264=x252.join(x39); + Formula x263=x264.one(); + Formula x259=x260.or(x263); + Formula x254=x255.and(x259); + Expression x268=x39.closure(); + Expression x267=x252.join(x268); + Formula x266=x252.in(x267); + Formula x265=x266.not(); + Formula x253=x254.and(x265); + Formula x250=x253.forAll(x251); + Expression x271=x39.reflexiveClosure(); + Expression x270=x38.join(x271); + Formula x269=x51.in(x270); + Formula x249=x250.and(x269); + Expression x273=x39.join(x38); + Formula x272=x273.no(); + Formula x248=x249.and(x272); + Formula x275=x51.one(); + Variable x278=Variable.unary("NeverFindLeader_n"); + Decls x277=x278.oneOf(x51); + Expression x281=x278.join(x19); + Formula x280=x278.eq(x281); + Formula x279=x280.not(); + Formula x276=x279.forAll(x277); + Formula x274=x275.or(x276); + Variable x284=Variable.unary("NeverFindLeader_n"); + Decls x283=x284.oneOf(x51); + Expression x287=x19.closure(); + Expression x286=x284.join(x287); + Formula x285=x51.in(x286); + Formula x282=x285.forAll(x283); + Formula x288=x12.eq(x109); + Expression x290=x27.join(x25); + Formula x289=x21.eq(x290); + Expression x292=x27.join(x26); + Formula x291=x22.eq(x292); + Expression x294=x27.join(x20); + Formula x293=x23.eq(x294); + Variable x297=Variable.unary("NeverFindLeader_n"); + Decls x296=x297.oneOf(x51); + Expression x301=x36.join(x30); + Expression x300=x297.join(x301); + Expression x299=x300.join(x24); + Formula x298=x299.eq(x7); + Formula x295=x298.forAll(x296); + Variable x304=Variable.unary("NeverFindLeader_n"); + Decls x303=x304.oneOf(x51); + Variable x308=Variable.unary("NeverFindLeader_t"); + Expression x311=x37.join(x14); + Expression x310=x14.difference(x311); + Expression x309=x14.difference(x310); + Decls x307=x308.oneOf(x309); + Formula x314=x308.eq(x36); + Expression x319=x308.join(x33); + Expression x318=x304.join(x319); + Formula x317=x318.one(); + Expression x325=x308.join(x35); + Expression x324=x304.join(x325); + IntExpression x323=x324.count(); + IntExpression x326=IntConstant.constant(1); + Formula x322=x323.eq(x326); + Expression x329=x318.join(x27); + Expression x328=x329.join(x20); + Formula x327=x328.eq(x304); + Formula x321=x322.and(x327); + Expression x334=x308.join(x37); + Expression x333=x334.join(x30); + Expression x332=x304.join(x333); + Expression x331=x332.join(x24); + Formula x330=x331.eq(x7); + Formula x320=x321.and(x330); + Formula x316=x317.and(x320); + Expression x337=x318.join(x27); + Expression x336=x337.join(x26); + Expression x338=x304.join(x19); + Formula x335=x336.eq(x338); + Formula x315=x316.and(x335); + Formula x313=x314.implies(x315); + Formula x340=x314.not(); + Expression x346=x308.join(x32); + Expression x345=x304.join(x346); + Expression x348=x308.join(x31); + Expression x347=x304.join(x348); + Formula x344=x345.eq(x347); + Variable x352=Variable.unary("RingLeadTransHelper_received"); + Decls x351=x352.oneOf(x345); + Expression x357=x352.join(x27); + Expression x356=x357.join(x20); + Expression x359=x39.closure(); + Expression x358=x304.join(x359); + Formula x355=x356.in(x358); + Formula x354=x355.not(); + Variable x363=Variable.unary("RingLeadTransHelper_weSend"); + Expression x365=x308.join(x33); + Expression x364=x304.join(x365); + Decls x362=x363.oneOf(x364); + Expression x369=x363.join(x27); + Expression x368=x369.join(x20); + Expression x371=x352.join(x27); + Expression x370=x371.join(x20); + Formula x367=x368.eq(x370); + Expression x374=x363.join(x27); + Expression x373=x374.join(x26); + Expression x375=x304.join(x19); + Formula x372=x373.eq(x375); + Formula x366=x367.and(x372); + Expression x361=x366.comprehension(x362); + Formula x360=x361.one(); + Formula x353=x354.or(x360); + Formula x350=x353.forAll(x351); + Expression x379=x308.join(x35); + Expression x378=x304.join(x379); + IntExpression x377=x378.count(); + Variable x383=Variable.unary("RingLeadTransHelper_m"); + Decls x382=x383.oneOf(x345); + Expression x386=x383.join(x27); + Expression x385=x386.join(x20); + Expression x388=x39.closure(); + Expression x387=x304.join(x388); + Formula x384=x385.in(x387); + Expression x381=x384.comprehension(x382); + IntExpression x380=x381.count(); + Formula x376=x377.eq(x380); + Formula x349=x350.and(x376); + Formula x343=x344.and(x349); + Variable x391=Variable.unary("RingLeadTransHelper_weSend"); + Decls x390=x391.oneOf(x364); + Expression x396=x391.join(x27); + Expression x395=x396.join(x20); + Expression x398=x39.closure(); + Expression x397=x304.join(x398); + Formula x394=x395.in(x397); + Expression x401=x345.join(x27); + Expression x400=x401.join(x20); + Formula x399=x395.in(x400); + Formula x393=x394.and(x399); + Expression x404=x391.join(x27); + Expression x403=x404.join(x26); + Expression x405=x304.join(x19); + Formula x402=x403.eq(x405); + Formula x392=x393.and(x402); + Formula x389=x392.forAll(x390); + Formula x342=x343.and(x389); + Expression x411=x308.join(x37); + Expression x410=x411.join(x30); + Expression x409=x304.join(x410); + Expression x408=x409.join(x24); + Formula x407=x408.eq(x6); + Expression x416=x308.join(x30); + Expression x415=x304.join(x416); + Expression x414=x415.join(x24); + Formula x413=x414.eq(x6); + Expression x419=x345.join(x27); + Expression x418=x419.join(x20); + Formula x417=x304.in(x418); + Formula x412=x413.or(x417); + Formula x406=x407.iff(x412); + Formula x341=x342.and(x406); + Formula x339=x340.implies(x341); + Formula x312=x313.and(x339); + Formula x306=x312.forAll(x307); + Expression x424=x310.join(x32); + Expression x423=x304.join(x424); + Expression x426=x310.join(x31); + Expression x425=x304.join(x426); + Formula x422=x423.eq(x425); + Variable x430=Variable.unary("RingLeadTransHelper_received"); + Decls x429=x430.oneOf(x423); + Expression x435=x430.join(x27); + Expression x434=x435.join(x20); + Expression x437=x39.closure(); + Expression x436=x304.join(x437); + Formula x433=x434.in(x436); + Formula x432=x433.not(); + Variable x441=Variable.unary("RingLeadTransHelper_weSend"); + Expression x443=x310.join(x33); + Expression x442=x304.join(x443); + Decls x440=x441.oneOf(x442); + Expression x447=x441.join(x27); + Expression x446=x447.join(x20); + Expression x449=x430.join(x27); + Expression x448=x449.join(x20); + Formula x445=x446.eq(x448); + Expression x452=x441.join(x27); + Expression x451=x452.join(x26); + Expression x453=x304.join(x19); + Formula x450=x451.eq(x453); + Formula x444=x445.and(x450); + Expression x439=x444.comprehension(x440); + Formula x438=x439.one(); + Formula x431=x432.or(x438); + Formula x428=x431.forAll(x429); + Expression x457=x310.join(x35); + Expression x456=x304.join(x457); + IntExpression x455=x456.count(); + Variable x461=Variable.unary("RingLeadTransHelper_m"); + Decls x460=x461.oneOf(x423); + Expression x464=x461.join(x27); + Expression x463=x464.join(x20); + Expression x466=x39.closure(); + Expression x465=x304.join(x466); + Formula x462=x463.in(x465); + Expression x459=x462.comprehension(x460); + IntExpression x458=x459.count(); + Formula x454=x455.eq(x458); + Formula x427=x428.and(x454); + Formula x421=x422.and(x427); + Variable x469=Variable.unary("RingLeadTransHelper_weSend"); + Decls x468=x469.oneOf(x442); + Expression x474=x469.join(x27); + Expression x473=x474.join(x20); + Expression x476=x39.closure(); + Expression x475=x304.join(x476); + Formula x472=x473.in(x475); + Expression x479=x423.join(x27); + Expression x478=x479.join(x20); + Formula x477=x473.in(x478); + Formula x471=x472.and(x477); + Expression x482=x469.join(x27); + Expression x481=x482.join(x26); + Expression x483=x304.join(x19); + Formula x480=x481.eq(x483); + Formula x470=x471.and(x480); + Formula x467=x470.forAll(x468); + Formula x420=x421.and(x467); + Formula x305=x306.and(x420); + Formula x302=x305.forAll(x303); + Formula x484=x8.eq(x51); + Formula x485=x10.eq(x67); + Formula x486=x15.eq(x164); + Expression x489=x36.join(x31); + Expression x488=x51.join(x489); + Formula x487=x488.no(); + Variable x492=Variable.unary("NeverFindLeader_pre"); + Expression x493=x14.difference(x310); + Decls x491=x492.oneOf(x493); + Expression x496=x492.join(x37); + Expression x495=x496.join(x34); + Expression x498=x492.join(x34); + Expression x500=x492.join(x33); + Expression x499=x51.join(x500); + Expression x497=x498.difference(x499); + Formula x494=x495.eq(x497); + Formula x490=x494.forAll(x491); + Variable x503=Variable.unary("NeverFindLeader_t"); + Decls x502=x503.oneOf(x14); + Expression x508=x503.join(x33); + Expression x507=x51.join(x508); + Expression x509=x503.join(x34); + Formula x506=x507.in(x509); + Expression x515=x503.join(x33); + Expression x514=x51.join(x515); + Expression x513=x514.join(x28); + Formula x512=x513.in(x503); + Expression x518=x503.join(x33); + Expression x517=x51.join(x518); + Expression x520=x503.join(x33); + Expression x519=x51.join(x520); + Formula x516=x517.eq(x519); + Formula x511=x512.and(x516); + Variable x524=Variable.unary("NeverFindLeader_n"); + Decls x523=x524.oneOf(x51); + Variable x526=Variable.unary("NeverFindLeader_m"); + Decls x525=x526.oneOf(x109); + Decls x522=x523.and(x525); + Expression x531=x526.join(x29); + Expression x530=x524.join(x531); + Formula x529=x530.eq(x503); + Formula x528=x529.not(); + Expression x534=x503.join(x32); + Expression x533=x524.join(x534); + Formula x532=x526.in(x533); + Formula x527=x528.or(x532); + Formula x521=x527.forAll(x522); + Formula x510=x511.and(x521); + Formula x505=x506.and(x510); + Expression x541=x503.join(x32); + Expression x540=x51.join(x541); + Expression x539=x540.join(x29); + Expression x538=x51.join(x539); + Formula x537=x538.in(x503); + Variable x544=Variable.unary("NeverFindLeader_n"); + Decls x543=x544.oneOf(x51); + Expression x549=x503.join(x33); + Expression x548=x544.join(x549); + Expression x547=x548.join(x27); + Expression x546=x547.join(x25); + Formula x545=x546.in(x544); + Formula x542=x545.forAll(x543); + Formula x536=x537.and(x542); + Variable x553=Variable.unary("NeverFindLeader_n"); + Decls x552=x553.oneOf(x51); + Variable x555=Variable.unary("NeverFindLeader_m"); + Decls x554=x555.oneOf(x109); + Decls x551=x552.and(x554); + Expression x561=x503.join(x31); + Expression x560=x553.join(x561); + Formula x559=x555.in(x560); + Formula x558=x559.not(); + Expression x565=x555.join(x27); + Expression x564=x565.join(x26); + Formula x563=x553.in(x564); + Expression x567=x555.join(x28); + Expression x570=x37.transpose(); + Expression x569=x570.closure(); + Expression x568=x503.join(x569); + Formula x566=x567.in(x568); + Formula x562=x563.and(x566); + Formula x557=x558.or(x562); + Expression x575=x503.join(x32); + Expression x574=x553.join(x575); + Formula x573=x555.in(x574); + Formula x572=x573.not(); + Expression x581=x37.closure(); + Expression x580=x503.join(x581); + Expression x579=x580.join(x31); + Expression x578=x553.join(x579); + Formula x577=x555.in(x578); + Formula x576=x577.not(); + Formula x571=x572.or(x576); + Formula x556=x557.and(x571); + Formula x550=x556.forAll(x551); + Formula x535=x536.and(x550); + Formula x504=x505.and(x535); + Formula x501=x504.forAll(x502); + Expression x584=x14.join(x33); + Expression x583=x51.join(x584); + Formula x582=x109.in(x583); + Formula x585=x32.in(x31); + Variable x588=Variable.unary("Loop_t"); + Expression x589=x14.difference(x310); + Decls x587=x588.oneOf(x589); + Expression x593=x588.join(x30); + Expression x594=x310.join(x30); + Formula x592=x593.eq(x594); + Variable x597=Variable.nary("TicksEquivalent_r",2); + Variable x604=Variable.unary("MsgsLiveOnTick_future"); + Decls x603=x604.oneOf(x109); + Expression x606=x604.join(x28); + Expression x608=x37.closure(); + Expression x607=x588.join(x608); + Formula x605=x606.in(x607); + Expression x602=x605.comprehension(x603); + Expression x601=x109.difference(x602); + Variable x611=Variable.unary("MsgsLiveOnTick_past"); + Decls x610=x611.oneOf(x109); + Variable x614=Variable.unary("MsgsLiveOnTick_n"); + Expression x616=x611.join(x27); + Expression x615=x616.join(x26); + Decls x613=x614.oneOf(x615); + Expression x619=x611.join(x29); + Expression x618=x614.join(x619); + Expression x622=x37.transpose(); + Expression x621=x622.closure(); + Expression x620=x588.join(x621); + Formula x617=x618.in(x620); + Formula x612=x617.forAll(x613); + Expression x609=x612.comprehension(x610); + Expression x600=x601.difference(x609); + Expression x624=x588.join(x31); + Expression x623=x51.join(x624); + Expression x599=x600.difference(x623); + Variable x630=Variable.unary("MsgsLiveOnTick_future"); + Decls x629=x630.oneOf(x109); + Expression x632=x630.join(x28); + Expression x634=x37.closure(); + Expression x633=x310.join(x634); + Formula x631=x632.in(x633); + Expression x628=x631.comprehension(x629); + Expression x627=x109.difference(x628); + Variable x637=Variable.unary("MsgsLiveOnTick_past"); + Decls x636=x637.oneOf(x109); + Variable x640=Variable.unary("MsgsLiveOnTick_n"); + Expression x642=x637.join(x27); + Expression x641=x642.join(x26); + Decls x639=x640.oneOf(x641); + Expression x645=x637.join(x29); + Expression x644=x640.join(x645); + Expression x648=x37.transpose(); + Expression x647=x648.closure(); + Expression x646=x310.join(x647); + Formula x643=x644.in(x646); + Formula x638=x643.forAll(x639); + Expression x635=x638.comprehension(x636); + Expression x626=x627.difference(x635); + Expression x650=x310.join(x31); + Expression x649=x51.join(x650); + Expression x625=x626.difference(x649); + Expression x598=x599.product(x625); + Decls x596=x597.setOf(x598); + Variable x661=Variable.unary("MsgsLiveOnTick_future"); + Decls x660=x661.oneOf(x109); + Expression x663=x661.join(x28); + Expression x665=x37.closure(); + Expression x664=x588.join(x665); + Formula x662=x663.in(x664); + Expression x659=x662.comprehension(x660); + Expression x658=x109.difference(x659); + Variable x668=Variable.unary("MsgsLiveOnTick_past"); + Decls x667=x668.oneOf(x109); + Variable x671=Variable.unary("MsgsLiveOnTick_n"); + Expression x673=x668.join(x27); + Expression x672=x673.join(x26); + Decls x670=x671.oneOf(x672); + Expression x676=x668.join(x29); + Expression x675=x671.join(x676); + Expression x679=x37.transpose(); + Expression x678=x679.closure(); + Expression x677=x588.join(x678); + Formula x674=x675.in(x677); + Formula x669=x674.forAll(x670); + Expression x666=x669.comprehension(x667); + Expression x657=x658.difference(x666); + Expression x681=x588.join(x31); + Expression x680=x51.join(x681); + Expression x656=x657.difference(x680); + Variable x687=Variable.unary("MsgsLiveOnTick_future"); + Decls x686=x687.oneOf(x109); + Expression x689=x687.join(x28); + Expression x691=x37.closure(); + Expression x690=x310.join(x691); + Formula x688=x689.in(x690); + Expression x685=x688.comprehension(x686); + Expression x684=x109.difference(x685); + Variable x694=Variable.unary("MsgsLiveOnTick_past"); + Decls x693=x694.oneOf(x109); + Variable x697=Variable.unary("MsgsLiveOnTick_n"); + Expression x699=x694.join(x27); + Expression x698=x699.join(x26); + Decls x696=x697.oneOf(x698); + Expression x702=x694.join(x29); + Expression x701=x697.join(x702); + Expression x705=x37.transpose(); + Expression x704=x705.closure(); + Expression x703=x310.join(x704); + Formula x700=x701.in(x703); + Formula x695=x700.forAll(x696); + Expression x692=x695.comprehension(x693); + Expression x683=x684.difference(x692); + Expression x707=x310.join(x31); + Expression x706=x51.join(x707); + Expression x682=x683.difference(x706); + Expression x655=x656.product(x682); + Formula x654=x597.in(x655); + Variable x710=Variable.unary(""); + Decls x709=x710.oneOf(x656); + Expression x713=x710.join(x597); + Formula x712=x713.one(); + Variable x720=Variable.unary("MsgsLiveOnTick_future"); + Decls x719=x720.oneOf(x109); + Expression x722=x720.join(x28); + Expression x724=x37.closure(); + Expression x723=x310.join(x724); + Formula x721=x722.in(x723); + Expression x718=x721.comprehension(x719); + Expression x717=x109.difference(x718); + Variable x727=Variable.unary("MsgsLiveOnTick_past"); + Decls x726=x727.oneOf(x109); + Variable x730=Variable.unary("MsgsLiveOnTick_n"); + Expression x732=x727.join(x27); + Expression x731=x732.join(x26); + Decls x729=x730.oneOf(x731); + Expression x735=x727.join(x29); + Expression x734=x730.join(x735); + Expression x738=x37.transpose(); + Expression x737=x738.closure(); + Expression x736=x310.join(x737); + Formula x733=x734.in(x736); + Formula x728=x733.forAll(x729); + Expression x725=x728.comprehension(x726); + Expression x716=x717.difference(x725); + Expression x740=x310.join(x31); + Expression x739=x51.join(x740); + Expression x715=x716.difference(x739); + Formula x714=x713.in(x715); + Formula x711=x712.and(x714); + Formula x708=x711.forAll(x709); + Formula x653=x654.and(x708); + Variable x743=Variable.unary(""); + Decls x742=x743.oneOf(x682); + Expression x746=x597.join(x743); + Formula x745=x746.one(); + Variable x753=Variable.unary("MsgsLiveOnTick_future"); + Decls x752=x753.oneOf(x109); + Expression x755=x753.join(x28); + Expression x757=x37.closure(); + Expression x756=x588.join(x757); + Formula x754=x755.in(x756); + Expression x751=x754.comprehension(x752); + Expression x750=x109.difference(x751); + Variable x760=Variable.unary("MsgsLiveOnTick_past"); + Decls x759=x760.oneOf(x109); + Variable x763=Variable.unary("MsgsLiveOnTick_n"); + Expression x765=x760.join(x27); + Expression x764=x765.join(x26); + Decls x762=x763.oneOf(x764); + Expression x768=x760.join(x29); + Expression x767=x763.join(x768); + Expression x771=x37.transpose(); + Expression x770=x771.closure(); + Expression x769=x588.join(x770); + Formula x766=x767.in(x769); + Formula x761=x766.forAll(x762); + Expression x758=x761.comprehension(x759); + Expression x749=x750.difference(x758); + Expression x773=x588.join(x31); + Expression x772=x51.join(x773); + Expression x748=x749.difference(x772); + Formula x747=x746.in(x748); + Formula x744=x745.and(x747); + Formula x741=x744.forAll(x742); + Formula x652=x653.and(x741); + Variable x776=Variable.unary("TicksEquivalent_m1"); + Expression x786=Expression.INTS.union(x5); + Expression x785=x786.union(x230); + Expression x784=x785.union(x51); + Expression x783=x784.union(x67); + Expression x782=x783.union(x109); + Expression x781=x782.union(x14); + Expression x780=x781.union(x164); + Expression x779=x780.union(x17); + Expression x778=x779.union(x18); + Expression x777=x597.join(x778); + Decls x775=x776.oneOf(x777); + Expression x789=x776.join(x27); + Expression x791=x776.join(x597); + Expression x790=x791.join(x27); + Formula x788=x789.eq(x790); + Formula x774=x788.forAll(x775); + Formula x651=x652.and(x774); + Formula x595=x651.forSome(x596); + Formula x591=x592.and(x595); + Variable x794=Variable.nary("TicksEquivalent_r",2); + Expression x797=x588.join(x31); + Expression x796=x51.join(x797); + Expression x799=x310.join(x31); + Expression x798=x51.join(x799); + Expression x795=x796.product(x798); + Decls x793=x794.setOf(x795); + Expression x806=x588.join(x31); + Expression x805=x51.join(x806); + Expression x808=x310.join(x31); + Expression x807=x51.join(x808); + Expression x804=x805.product(x807); + Formula x803=x794.in(x804); + Variable x811=Variable.unary(""); + Decls x810=x811.oneOf(x805); + Expression x814=x811.join(x794); + Formula x813=x814.one(); + Expression x817=x310.join(x31); + Expression x816=x51.join(x817); + Formula x815=x814.in(x816); + Formula x812=x813.and(x815); + Formula x809=x812.forAll(x810); + Formula x802=x803.and(x809); + Variable x820=Variable.unary(""); + Decls x819=x820.oneOf(x807); + Expression x823=x794.join(x820); + Formula x822=x823.one(); + Expression x826=x588.join(x31); + Expression x825=x51.join(x826); + Formula x824=x823.in(x825); + Formula x821=x822.and(x824); + Formula x818=x821.forAll(x819); + Formula x801=x802.and(x818); + Variable x829=Variable.unary("TicksEquivalent_m1"); + Expression x830=x794.join(x778); + Decls x828=x829.oneOf(x830); + Expression x832=x829.join(x27); + Expression x834=x829.join(x794); + Expression x833=x834.join(x27); + Formula x831=x832.eq(x833); + Formula x827=x831.forAll(x828); + Formula x800=x801.and(x827); + Formula x792=x800.forSome(x793); + Formula x590=x591.and(x792); + Formula x586=x590.forSome(x587); + Variable x837=Variable.unary("NeverFindLeader_t"); + Decls x836=x837.oneOf(x14); + Variable x841=Variable.unary("SomeLeaderAtTick_n"); + Decls x840=x841.oneOf(x51); + Expression x845=x837.join(x30); + Expression x844=x841.join(x845); + Expression x843=x844.join(x24); + Formula x842=x843.eq(x6); + Formula x839=x842.forSome(x840); + Formula x838=x839.not(); + Formula x835=x838.forAll(x836); + Formula x846=x0.eq(x0); + Formula x847=x1.eq(x1); + Formula x848=x2.eq(x2); + Formula x849=x3.eq(x3); + Formula x850=x4.eq(x4); + Formula x851=x5.eq(x5); + Formula x852=x6.eq(x6); + Formula x853=x7.eq(x7); + Formula x854=x8.eq(x8); + Formula x855=x9.eq(x9); + Formula x856=x10.eq(x10); + Formula x857=x11.eq(x11); + Formula x858=x12.eq(x12); + Formula x859=x13.eq(x13); + Formula x860=x14.eq(x14); + Formula x861=x15.eq(x15); + Formula x862=x16.eq(x16); + Formula x863=x17.eq(x17); + Formula x864=x18.eq(x18); + Formula x865=x19.eq(x19); + Formula x866=x20.eq(x20); + Formula x867=x21.eq(x21); + Formula x868=x22.eq(x22); + Formula x869=x23.eq(x23); + Formula x870=x24.eq(x24); + Formula x871=x25.eq(x25); + Formula x872=x26.eq(x26); + Formula x873=x27.eq(x27); + Formula x874=x28.eq(x28); + Formula x875=x29.eq(x29); + Formula x876=x30.eq(x30); + Formula x877=x31.eq(x31); + Formula x878=x32.eq(x32); + Formula x879=x33.eq(x33); + Formula x880=x34.eq(x34); + Formula x881=x35.eq(x35); + Formula x882=x36.eq(x36); + Formula x883=x37.eq(x37); + Formula x884=x38.eq(x38); + Formula x885=x39.eq(x39); + Formula x886=x40.eq(x40); + Formula x41=Formula.compose(FormulaOperator.AND, x42, x44, x52, x55, x62, x64, x72, x74, x79, x81, x88, x90, x95, x97, x104, x106, x114, x116, x123, x125, x145, x148, x156, x177, x180, x186, x189, x195, x198, x204, x207, x212, x214, x220, x223, x231, x233, x236, x240, x241, x244, x248, x274, x282, x288, x289, x291, x293, x295, x302, x484, x485, x486, x487, x490, x501, x582, x585, x586, x835, x846, x847, x848, x849, x850, x851, x852, x853, x854, x855, x856, x857, x858, x859, x860, x861, x862, x863, x864, x865, x866, x867, x868, x869, x870, x871, x872, x873, x874, x875, x876, x877, x878, x879, x880, x881, x882, x883, x884, x885, x886); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x41,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadOneLeaderCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadOneLeaderCheck.java new file mode 100644 index 0000000..c067c78 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadOneLeaderCheck.java @@ -0,0 +1,1179 @@ +package kodkod.examples.models.algorithm.election; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ringlead", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 14, + TernaryRelations =6, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 28, + TransitiveClosure = 1, + NestedQuantifiers = 3, + SetCardinality = 5, + Additions = 0, + Subtractions = 0, + Comparison = 17, + OrderedRelations = 2, + Constraints =28 +) + +public final class ringleadOneLeaderCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("bool/True"); + Relation x7 = Relation.unary("bool/False"); + Relation x8 = Relation.unary("this/RingLeadNode"); + Relation x9 = Relation.unary("msg/Node remainder"); + Relation x10 = Relation.unary("this/RingLeadMsgState"); + Relation x11 = Relation.unary("msg/MsgState remainder"); + Relation x12 = Relation.unary("this/MsgViz"); + Relation x13 = Relation.unary("msg/Msg remainder"); + Relation x14 = Relation.unary("msg/Tick"); + Relation x15 = Relation.unary("this/RingLeadNodeState"); + Relation x16 = Relation.unary("msg/NodeState remainder"); + Relation x17 = Relation.unary("tickOrd/Ord"); + Relation x18 = Relation.unary("nodeOrd/Ord"); + Relation x19 = Relation.nary("this/RingLeadNode.rightNeighbor", 2); + Relation x20 = Relation.nary("this/RingLeadMsgState.id", 2); + Relation x21 = Relation.nary("this/MsgViz.vFrom", 2); + Relation x22 = Relation.nary("this/MsgViz.vTo", 2); + Relation x23 = Relation.nary("this/MsgViz.vId", 2); + Relation x24 = Relation.nary("this/RingLeadNodeState.leader", 2); + Relation x25 = Relation.nary("msg/MsgState.from", 2); + Relation x26 = Relation.nary("msg/MsgState.to", 2); + Relation x27 = Relation.nary("msg/Msg.state", 2); + Relation x28 = Relation.nary("msg/Msg.sentOn", 2); + Relation x29 = Relation.nary("msg/Msg.readOn", 3); + Relation x30 = Relation.nary("msg/Tick.state", 3); + Relation x31 = Relation.nary("msg/Tick.visible", 3); + Relation x32 = Relation.nary("msg/Tick.read", 3); + Relation x33 = Relation.nary("msg/Tick.sent", 3); + Relation x34 = Relation.nary("msg/Tick.available", 2); + Relation x35 = Relation.nary("msg/Tick.needsToSend", 3); + Relation x36 = Relation.unary("tickOrd/Ord.First"); + Relation x37 = Relation.nary("tickOrd/Ord.Next", 2); + Relation x38 = Relation.unary("nodeOrd/Ord.First"); + Relation x39 = Relation.nary("nodeOrd/Ord.Next", 2); + Relation x40 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "bool/False$0", + "bool/True$0", "msg/Msg$0", "msg/MsgState$0", "msg/Node$0", "msg/NodeState$0", "msg/NodeState$1", + "msg/Tick$0", "msg/Tick$1", "msg/Tick$2", "nodeOrd/Ord$0", "tickOrd/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("bool/True$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("bool/False$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("msg/Node$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("msg/Node$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("msg/MsgState$0")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("msg/MsgState$0")); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("msg/Msg$0")); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("msg/Msg$0")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("msg/Tick$0")); + x14_upper.add(factory.tuple("msg/Tick$1")); + x14_upper.add(factory.tuple("msg/Tick$2")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("msg/NodeState$0")); + x15_upper.add(factory.tuple("msg/NodeState$1")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("msg/NodeState$0")); + x16_upper.add(factory.tuple("msg/NodeState$1")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("tickOrd/Ord$0")); + bounds.boundExactly(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("nodeOrd/Ord$0")); + bounds.boundExactly(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(2); + x22_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(2); + x24_upper.add(factory.tuple("msg/NodeState$0").product(factory.tuple("bool/True$0"))); + x24_upper.add(factory.tuple("msg/NodeState$0").product(factory.tuple("bool/False$0"))); + x24_upper.add(factory.tuple("msg/NodeState$1").product(factory.tuple("bool/True$0"))); + x24_upper.add(factory.tuple("msg/NodeState$1").product(factory.tuple("bool/False$0"))); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(2); + x25_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x25, x25_upper); + + TupleSet x26_upper = factory.noneOf(2); + x26_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x26, x26_upper); + + TupleSet x27_upper = factory.noneOf(2); + x27_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/MsgState$0"))); + bounds.bound(x27, x27_upper); + + TupleSet x28_upper = factory.noneOf(2); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$0"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$1"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$2"))); + bounds.bound(x28, x28_upper); + + TupleSet x29_upper = factory.noneOf(3); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$2"))); + bounds.bound(x29, x29_upper); + + TupleSet x30_upper = factory.noneOf(3); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + bounds.bound(x30, x30_upper); + + TupleSet x31_upper = factory.noneOf(3); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + bounds.bound(x31, x31_upper); + + TupleSet x32_upper = factory.noneOf(3); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + bounds.bound(x32, x32_upper); + + TupleSet x33_upper = factory.noneOf(3); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + bounds.bound(x33, x33_upper); + + TupleSet x34_upper = factory.noneOf(2); + x34_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Msg$0"))); + bounds.bound(x34, x34_upper); + + TupleSet x35_upper = factory.noneOf(3); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + bounds.bound(x35, x35_upper); + + TupleSet x36_upper = factory.noneOf(1); + x36_upper.add(factory.tuple("msg/Tick$0")); + x36_upper.add(factory.tuple("msg/Tick$1")); + x36_upper.add(factory.tuple("msg/Tick$2")); + bounds.bound(x36, x36_upper); + + TupleSet x37_upper = factory.noneOf(2); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$2"))); + bounds.bound(x37, x37_upper); + + TupleSet x38_upper = factory.noneOf(1); + x38_upper.add(factory.tuple("msg/Node$0")); + bounds.bound(x38, x38_upper); + + TupleSet x39_upper = factory.noneOf(2); + x39_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$0"))); + bounds.bound(x39, x39_upper); + + TupleSet x40_upper = factory.noneOf(1); + x40_upper.add(factory.tuple("msg/Tick$0")); + x40_upper.add(factory.tuple("msg/Tick$1")); + x40_upper.add(factory.tuple("msg/Tick$2")); + bounds.bound(x40, x40_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x43=x6.intersection(x7); + Formula x42=x43.no(); + Variable x46=Variable.unary("NeverFindLeader_this"); + Decls x45=x46.oneOf(x8); + Expression x49=x46.join(x19); + Formula x48=x49.one(); + Expression x51=x8.union(x9); + Formula x50=x49.in(x51); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x53=x19.join(Expression.UNIV); + Formula x52=x53.in(x8); + Variable x57=Variable.unary("NeverFindLeader_this"); + Decls x56=x57.oneOf(x10); + Expression x60=x57.join(x20); + Formula x59=x60.one(); + Formula x61=x60.in(x51); + Formula x58=x59.and(x61); + Formula x55=x58.forAll(x56); + Expression x63=x20.join(Expression.UNIV); + Formula x62=x63.in(x10); + Variable x66=Variable.unary("NeverFindLeader_this"); + Expression x67=x10.union(x11); + Decls x65=x66.oneOf(x67); + Expression x70=x66.join(x25); + Formula x69=x70.one(); + Formula x71=x70.in(x51); + Formula x68=x69.and(x71); + Formula x64=x68.forAll(x65); + Expression x73=x25.join(Expression.UNIV); + Formula x72=x73.in(x67); + Variable x76=Variable.unary("NeverFindLeader_this"); + Decls x75=x76.oneOf(x67); + Expression x78=x76.join(x26); + Formula x77=x78.in(x51); + Formula x74=x77.forAll(x75); + Expression x80=x26.join(Expression.UNIV); + Formula x79=x80.in(x67); + Variable x83=Variable.unary("NeverFindLeader_this"); + Decls x82=x83.oneOf(x12); + Expression x86=x83.join(x21); + Formula x85=x86.one(); + Formula x87=x86.in(x51); + Formula x84=x85.and(x87); + Formula x81=x84.forAll(x82); + Expression x89=x21.join(Expression.UNIV); + Formula x88=x89.in(x12); + Variable x92=Variable.unary("NeverFindLeader_this"); + Decls x91=x92.oneOf(x12); + Expression x94=x92.join(x22); + Formula x93=x94.in(x51); + Formula x90=x93.forAll(x91); + Expression x96=x22.join(Expression.UNIV); + Formula x95=x96.in(x12); + Variable x99=Variable.unary("NeverFindLeader_this"); + Decls x98=x99.oneOf(x12); + Expression x102=x99.join(x23); + Formula x101=x102.one(); + Formula x103=x102.in(x51); + Formula x100=x101.and(x103); + Formula x97=x100.forAll(x98); + Expression x105=x23.join(Expression.UNIV); + Formula x104=x105.in(x12); + Variable x108=Variable.unary("NeverFindLeader_this"); + Expression x109=x12.union(x13); + Decls x107=x108.oneOf(x109); + Expression x112=x108.join(x27); + Formula x111=x112.one(); + Formula x113=x112.in(x67); + Formula x110=x111.and(x113); + Formula x106=x110.forAll(x107); + Expression x115=x27.join(Expression.UNIV); + Formula x114=x115.in(x109); + Variable x118=Variable.unary("NeverFindLeader_this"); + Decls x117=x118.oneOf(x109); + Expression x121=x118.join(x28); + Formula x120=x121.one(); + Formula x122=x121.in(x14); + Formula x119=x120.and(x122); + Formula x116=x119.forAll(x117); + Expression x124=x28.join(Expression.UNIV); + Formula x123=x124.in(x109); + Variable x127=Variable.unary("NeverFindLeader_this"); + Decls x126=x127.oneOf(x109); + Expression x131=x127.join(x29); + Expression x132=x51.product(x14); + Formula x130=x131.in(x132); + Variable x135=Variable.unary(""); + Decls x134=x135.oneOf(x51); + Expression x138=x135.join(x131); + Formula x137=x138.lone(); + Formula x139=x138.in(x14); + Formula x136=x137.and(x139); + Formula x133=x136.forAll(x134); + Formula x129=x130.and(x133); + Variable x142=Variable.unary(""); + Decls x141=x142.oneOf(x14); + Expression x144=x131.join(x142); + Formula x143=x144.in(x51); + Formula x140=x143.forAll(x141); + Formula x128=x129.and(x140); + Formula x125=x128.forAll(x126); + Expression x147=x29.join(Expression.UNIV); + Expression x146=x147.join(Expression.UNIV); + Formula x145=x146.in(x109); + Variable x150=Variable.unary("NeverFindLeader_this"); + Decls x149=x150.oneOf(x109); + Expression x153=x150.join(x29); + Expression x152=x153.join(x14); + Expression x155=x150.join(x27); + Expression x154=x155.join(x26); + Formula x151=x152.in(x154); + Formula x148=x151.forAll(x149); + Variable x158=Variable.unary("NeverFindLeader_this"); + Decls x157=x158.oneOf(x14); + Expression x162=x158.join(x30); + Expression x164=x15.union(x16); + Expression x163=x51.product(x164); + Formula x161=x162.in(x163); + Variable x167=Variable.unary(""); + Decls x166=x167.oneOf(x51); + Expression x170=x167.join(x162); + Formula x169=x170.one(); + Formula x171=x170.in(x164); + Formula x168=x169.and(x171); + Formula x165=x168.forAll(x166); + Formula x160=x161.and(x165); + Variable x174=Variable.unary(""); + Decls x173=x174.oneOf(x164); + Expression x176=x162.join(x174); + Formula x175=x176.in(x51); + Formula x172=x175.forAll(x173); + Formula x159=x160.and(x172); + Formula x156=x159.forAll(x157); + Expression x179=x30.join(Expression.UNIV); + Expression x178=x179.join(Expression.UNIV); + Formula x177=x178.in(x14); + Variable x182=Variable.unary("NeverFindLeader_this"); + Decls x181=x182.oneOf(x14); + Expression x184=x182.join(x31); + Expression x185=x51.product(x109); + Formula x183=x184.in(x185); + Formula x180=x183.forAll(x181); + Expression x188=x31.join(Expression.UNIV); + Expression x187=x188.join(Expression.UNIV); + Formula x186=x187.in(x14); + Variable x191=Variable.unary("NeverFindLeader_this"); + Decls x190=x191.oneOf(x14); + Expression x193=x191.join(x32); + Expression x194=x51.product(x109); + Formula x192=x193.in(x194); + Formula x189=x192.forAll(x190); + Expression x197=x32.join(Expression.UNIV); + Expression x196=x197.join(Expression.UNIV); + Formula x195=x196.in(x14); + Variable x200=Variable.unary("NeverFindLeader_this"); + Decls x199=x200.oneOf(x14); + Expression x202=x200.join(x33); + Expression x203=x51.product(x109); + Formula x201=x202.in(x203); + Formula x198=x201.forAll(x199); + Expression x206=x33.join(Expression.UNIV); + Expression x205=x206.join(Expression.UNIV); + Formula x204=x205.in(x14); + Variable x209=Variable.unary("NeverFindLeader_this"); + Decls x208=x209.oneOf(x14); + Expression x211=x209.join(x34); + Formula x210=x211.in(x109); + Formula x207=x210.forAll(x208); + Expression x213=x34.join(Expression.UNIV); + Formula x212=x213.in(x14); + Variable x216=Variable.unary("NeverFindLeader_this"); + Decls x215=x216.oneOf(x14); + Expression x218=x216.join(x35); + Expression x219=x51.product(x109); + Formula x217=x218.in(x219); + Formula x214=x217.forAll(x215); + Expression x222=x35.join(Expression.UNIV); + Expression x221=x222.join(Expression.UNIV); + Formula x220=x221.in(x14); + Variable x225=Variable.unary("NeverFindLeader_this"); + Decls x224=x225.oneOf(x15); + Expression x228=x225.join(x24); + Formula x227=x228.one(); + Expression x230=x6.union(x7); + Formula x229=x228.in(x230); + Formula x226=x227.and(x229); + Formula x223=x226.forAll(x224); + Expression x232=x24.join(Expression.UNIV); + Formula x231=x232.in(x15); + Expression x235=x17.product(x36); + Expression x234=x17.join(x235); + Formula x233=x234.in(x14); + Expression x238=x17.product(x37); + Expression x237=x17.join(x238); + Expression x239=x14.product(x14); + Formula x236=x237.in(x239); + Formula x240=x37.totalOrder(x14,x36,x40); + Expression x243=x18.product(x38); + Expression x242=x18.join(x243); + Formula x241=x242.in(x51); + Expression x246=x18.product(x39); + Expression x245=x18.join(x246); + Expression x247=x51.product(x51); + Formula x244=x245.in(x247); + Variable x252=Variable.unary(""); + Decls x251=x252.oneOf(x51); + Formula x256=x252.eq(x38); + Expression x258=x39.join(x252); + Formula x257=x258.one(); + Formula x255=x256.or(x257); + Expression x262=x39.join(x51); + Expression x261=x51.difference(x262); + Formula x260=x252.eq(x261); + Expression x264=x252.join(x39); + Formula x263=x264.one(); + Formula x259=x260.or(x263); + Formula x254=x255.and(x259); + Expression x268=x39.closure(); + Expression x267=x252.join(x268); + Formula x266=x252.in(x267); + Formula x265=x266.not(); + Formula x253=x254.and(x265); + Formula x250=x253.forAll(x251); + Expression x271=x39.reflexiveClosure(); + Expression x270=x38.join(x271); + Formula x269=x51.in(x270); + Formula x249=x250.and(x269); + Expression x273=x39.join(x38); + Formula x272=x273.no(); + Formula x248=x249.and(x272); + Formula x275=x51.one(); + Variable x278=Variable.unary("NeverFindLeader_n"); + Decls x277=x278.oneOf(x51); + Expression x281=x278.join(x19); + Formula x280=x278.eq(x281); + Formula x279=x280.not(); + Formula x276=x279.forAll(x277); + Formula x274=x275.or(x276); + Variable x284=Variable.unary("NeverFindLeader_n"); + Decls x283=x284.oneOf(x51); + Expression x287=x19.closure(); + Expression x286=x284.join(x287); + Formula x285=x51.in(x286); + Formula x282=x285.forAll(x283); + Formula x288=x12.eq(x109); + Expression x290=x27.join(x25); + Formula x289=x21.eq(x290); + Expression x292=x27.join(x26); + Formula x291=x22.eq(x292); + Expression x294=x27.join(x20); + Formula x293=x23.eq(x294); + Variable x297=Variable.unary("NeverFindLeader_n"); + Decls x296=x297.oneOf(x51); + Expression x301=x36.join(x30); + Expression x300=x297.join(x301); + Expression x299=x300.join(x24); + Formula x298=x299.eq(x7); + Formula x295=x298.forAll(x296); + Variable x304=Variable.unary("NeverFindLeader_n"); + Decls x303=x304.oneOf(x51); + Variable x308=Variable.unary("NeverFindLeader_t"); + Expression x311=x37.join(x14); + Expression x310=x14.difference(x311); + Expression x309=x14.difference(x310); + Decls x307=x308.oneOf(x309); + Formula x314=x308.eq(x36); + Expression x319=x308.join(x33); + Expression x318=x304.join(x319); + Formula x317=x318.one(); + Expression x325=x308.join(x35); + Expression x324=x304.join(x325); + IntExpression x323=x324.count(); + IntExpression x326=IntConstant.constant(1); + Formula x322=x323.eq(x326); + Expression x329=x318.join(x27); + Expression x328=x329.join(x20); + Formula x327=x328.eq(x304); + Formula x321=x322.and(x327); + Expression x334=x308.join(x37); + Expression x333=x334.join(x30); + Expression x332=x304.join(x333); + Expression x331=x332.join(x24); + Formula x330=x331.eq(x7); + Formula x320=x321.and(x330); + Formula x316=x317.and(x320); + Expression x337=x318.join(x27); + Expression x336=x337.join(x26); + Expression x338=x304.join(x19); + Formula x335=x336.eq(x338); + Formula x315=x316.and(x335); + Formula x313=x314.implies(x315); + Formula x340=x314.not(); + Expression x346=x308.join(x32); + Expression x345=x304.join(x346); + Expression x348=x308.join(x31); + Expression x347=x304.join(x348); + Formula x344=x345.eq(x347); + Variable x352=Variable.unary("RingLeadTransHelper_received"); + Decls x351=x352.oneOf(x345); + Expression x357=x352.join(x27); + Expression x356=x357.join(x20); + Expression x359=x39.closure(); + Expression x358=x304.join(x359); + Formula x355=x356.in(x358); + Formula x354=x355.not(); + Variable x363=Variable.unary("RingLeadTransHelper_weSend"); + Expression x365=x308.join(x33); + Expression x364=x304.join(x365); + Decls x362=x363.oneOf(x364); + Expression x369=x363.join(x27); + Expression x368=x369.join(x20); + Expression x371=x352.join(x27); + Expression x370=x371.join(x20); + Formula x367=x368.eq(x370); + Expression x374=x363.join(x27); + Expression x373=x374.join(x26); + Expression x375=x304.join(x19); + Formula x372=x373.eq(x375); + Formula x366=x367.and(x372); + Expression x361=x366.comprehension(x362); + Formula x360=x361.one(); + Formula x353=x354.or(x360); + Formula x350=x353.forAll(x351); + Expression x379=x308.join(x35); + Expression x378=x304.join(x379); + IntExpression x377=x378.count(); + Variable x383=Variable.unary("RingLeadTransHelper_m"); + Decls x382=x383.oneOf(x345); + Expression x386=x383.join(x27); + Expression x385=x386.join(x20); + Expression x388=x39.closure(); + Expression x387=x304.join(x388); + Formula x384=x385.in(x387); + Expression x381=x384.comprehension(x382); + IntExpression x380=x381.count(); + Formula x376=x377.eq(x380); + Formula x349=x350.and(x376); + Formula x343=x344.and(x349); + Variable x391=Variable.unary("RingLeadTransHelper_weSend"); + Decls x390=x391.oneOf(x364); + Expression x396=x391.join(x27); + Expression x395=x396.join(x20); + Expression x398=x39.closure(); + Expression x397=x304.join(x398); + Formula x394=x395.in(x397); + Expression x401=x345.join(x27); + Expression x400=x401.join(x20); + Formula x399=x395.in(x400); + Formula x393=x394.and(x399); + Expression x404=x391.join(x27); + Expression x403=x404.join(x26); + Expression x405=x304.join(x19); + Formula x402=x403.eq(x405); + Formula x392=x393.and(x402); + Formula x389=x392.forAll(x390); + Formula x342=x343.and(x389); + Expression x411=x308.join(x37); + Expression x410=x411.join(x30); + Expression x409=x304.join(x410); + Expression x408=x409.join(x24); + Formula x407=x408.eq(x6); + Expression x416=x308.join(x30); + Expression x415=x304.join(x416); + Expression x414=x415.join(x24); + Formula x413=x414.eq(x6); + Expression x419=x345.join(x27); + Expression x418=x419.join(x20); + Formula x417=x304.in(x418); + Formula x412=x413.or(x417); + Formula x406=x407.iff(x412); + Formula x341=x342.and(x406); + Formula x339=x340.implies(x341); + Formula x312=x313.and(x339); + Formula x306=x312.forAll(x307); + Expression x424=x310.join(x32); + Expression x423=x304.join(x424); + Expression x426=x310.join(x31); + Expression x425=x304.join(x426); + Formula x422=x423.eq(x425); + Variable x430=Variable.unary("RingLeadTransHelper_received"); + Decls x429=x430.oneOf(x423); + Expression x435=x430.join(x27); + Expression x434=x435.join(x20); + Expression x437=x39.closure(); + Expression x436=x304.join(x437); + Formula x433=x434.in(x436); + Formula x432=x433.not(); + Variable x441=Variable.unary("RingLeadTransHelper_weSend"); + Expression x443=x310.join(x33); + Expression x442=x304.join(x443); + Decls x440=x441.oneOf(x442); + Expression x447=x441.join(x27); + Expression x446=x447.join(x20); + Expression x449=x430.join(x27); + Expression x448=x449.join(x20); + Formula x445=x446.eq(x448); + Expression x452=x441.join(x27); + Expression x451=x452.join(x26); + Expression x453=x304.join(x19); + Formula x450=x451.eq(x453); + Formula x444=x445.and(x450); + Expression x439=x444.comprehension(x440); + Formula x438=x439.one(); + Formula x431=x432.or(x438); + Formula x428=x431.forAll(x429); + Expression x457=x310.join(x35); + Expression x456=x304.join(x457); + IntExpression x455=x456.count(); + Variable x461=Variable.unary("RingLeadTransHelper_m"); + Decls x460=x461.oneOf(x423); + Expression x464=x461.join(x27); + Expression x463=x464.join(x20); + Expression x466=x39.closure(); + Expression x465=x304.join(x466); + Formula x462=x463.in(x465); + Expression x459=x462.comprehension(x460); + IntExpression x458=x459.count(); + Formula x454=x455.eq(x458); + Formula x427=x428.and(x454); + Formula x421=x422.and(x427); + Variable x469=Variable.unary("RingLeadTransHelper_weSend"); + Decls x468=x469.oneOf(x442); + Expression x474=x469.join(x27); + Expression x473=x474.join(x20); + Expression x476=x39.closure(); + Expression x475=x304.join(x476); + Formula x472=x473.in(x475); + Expression x479=x423.join(x27); + Expression x478=x479.join(x20); + Formula x477=x473.in(x478); + Formula x471=x472.and(x477); + Expression x482=x469.join(x27); + Expression x481=x482.join(x26); + Expression x483=x304.join(x19); + Formula x480=x481.eq(x483); + Formula x470=x471.and(x480); + Formula x467=x470.forAll(x468); + Formula x420=x421.and(x467); + Formula x305=x306.and(x420); + Formula x302=x305.forAll(x303); + Formula x484=x8.eq(x51); + Formula x485=x10.eq(x67); + Formula x486=x15.eq(x164); + Expression x489=x36.join(x31); + Expression x488=x51.join(x489); + Formula x487=x488.no(); + Variable x492=Variable.unary("NeverFindLeader_pre"); + Expression x493=x14.difference(x310); + Decls x491=x492.oneOf(x493); + Expression x496=x492.join(x37); + Expression x495=x496.join(x34); + Expression x498=x492.join(x34); + Expression x500=x492.join(x33); + Expression x499=x51.join(x500); + Expression x497=x498.difference(x499); + Formula x494=x495.eq(x497); + Formula x490=x494.forAll(x491); + Variable x503=Variable.unary("NeverFindLeader_t"); + Decls x502=x503.oneOf(x14); + Expression x508=x503.join(x33); + Expression x507=x51.join(x508); + Expression x509=x503.join(x34); + Formula x506=x507.in(x509); + Expression x515=x503.join(x33); + Expression x514=x51.join(x515); + Expression x513=x514.join(x28); + Formula x512=x513.in(x503); + Expression x518=x503.join(x33); + Expression x517=x51.join(x518); + Expression x520=x503.join(x33); + Expression x519=x51.join(x520); + Formula x516=x517.eq(x519); + Formula x511=x512.and(x516); + Variable x524=Variable.unary("NeverFindLeader_n"); + Decls x523=x524.oneOf(x51); + Variable x526=Variable.unary("NeverFindLeader_m"); + Decls x525=x526.oneOf(x109); + Decls x522=x523.and(x525); + Expression x531=x526.join(x29); + Expression x530=x524.join(x531); + Formula x529=x530.eq(x503); + Formula x528=x529.not(); + Expression x534=x503.join(x32); + Expression x533=x524.join(x534); + Formula x532=x526.in(x533); + Formula x527=x528.or(x532); + Formula x521=x527.forAll(x522); + Formula x510=x511.and(x521); + Formula x505=x506.and(x510); + Expression x541=x503.join(x32); + Expression x540=x51.join(x541); + Expression x539=x540.join(x29); + Expression x538=x51.join(x539); + Formula x537=x538.in(x503); + Variable x544=Variable.unary("NeverFindLeader_n"); + Decls x543=x544.oneOf(x51); + Expression x549=x503.join(x33); + Expression x548=x544.join(x549); + Expression x547=x548.join(x27); + Expression x546=x547.join(x25); + Formula x545=x546.in(x544); + Formula x542=x545.forAll(x543); + Formula x536=x537.and(x542); + Variable x553=Variable.unary("NeverFindLeader_n"); + Decls x552=x553.oneOf(x51); + Variable x555=Variable.unary("NeverFindLeader_m"); + Decls x554=x555.oneOf(x109); + Decls x551=x552.and(x554); + Expression x561=x503.join(x31); + Expression x560=x553.join(x561); + Formula x559=x555.in(x560); + Formula x558=x559.not(); + Expression x565=x555.join(x27); + Expression x564=x565.join(x26); + Formula x563=x553.in(x564); + Expression x567=x555.join(x28); + Expression x570=x37.transpose(); + Expression x569=x570.closure(); + Expression x568=x503.join(x569); + Formula x566=x567.in(x568); + Formula x562=x563.and(x566); + Formula x557=x558.or(x562); + Expression x575=x503.join(x32); + Expression x574=x553.join(x575); + Formula x573=x555.in(x574); + Formula x572=x573.not(); + Expression x581=x37.closure(); + Expression x580=x503.join(x581); + Expression x579=x580.join(x31); + Expression x578=x553.join(x579); + Formula x577=x555.in(x578); + Formula x576=x577.not(); + Formula x571=x572.or(x576); + Formula x556=x557.and(x571); + Formula x550=x556.forAll(x551); + Formula x535=x536.and(x550); + Formula x504=x505.and(x535); + Formula x501=x504.forAll(x502); + Expression x584=x14.join(x33); + Expression x583=x51.join(x584); + Formula x582=x109.in(x583); + Formula x585=x32.in(x31); + Variable x588=Variable.unary("Loop_t"); + Expression x589=x14.difference(x310); + Decls x587=x588.oneOf(x589); + Expression x593=x588.join(x30); + Expression x594=x310.join(x30); + Formula x592=x593.eq(x594); + Variable x597=Variable.nary("TicksEquivalent_r",2); + Variable x604=Variable.unary("MsgsLiveOnTick_future"); + Decls x603=x604.oneOf(x109); + Expression x606=x604.join(x28); + Expression x608=x37.closure(); + Expression x607=x588.join(x608); + Formula x605=x606.in(x607); + Expression x602=x605.comprehension(x603); + Expression x601=x109.difference(x602); + Variable x611=Variable.unary("MsgsLiveOnTick_past"); + Decls x610=x611.oneOf(x109); + Variable x614=Variable.unary("MsgsLiveOnTick_n"); + Expression x616=x611.join(x27); + Expression x615=x616.join(x26); + Decls x613=x614.oneOf(x615); + Expression x619=x611.join(x29); + Expression x618=x614.join(x619); + Expression x622=x37.transpose(); + Expression x621=x622.closure(); + Expression x620=x588.join(x621); + Formula x617=x618.in(x620); + Formula x612=x617.forAll(x613); + Expression x609=x612.comprehension(x610); + Expression x600=x601.difference(x609); + Expression x624=x588.join(x31); + Expression x623=x51.join(x624); + Expression x599=x600.difference(x623); + Variable x630=Variable.unary("MsgsLiveOnTick_future"); + Decls x629=x630.oneOf(x109); + Expression x632=x630.join(x28); + Expression x634=x37.closure(); + Expression x633=x310.join(x634); + Formula x631=x632.in(x633); + Expression x628=x631.comprehension(x629); + Expression x627=x109.difference(x628); + Variable x637=Variable.unary("MsgsLiveOnTick_past"); + Decls x636=x637.oneOf(x109); + Variable x640=Variable.unary("MsgsLiveOnTick_n"); + Expression x642=x637.join(x27); + Expression x641=x642.join(x26); + Decls x639=x640.oneOf(x641); + Expression x645=x637.join(x29); + Expression x644=x640.join(x645); + Expression x648=x37.transpose(); + Expression x647=x648.closure(); + Expression x646=x310.join(x647); + Formula x643=x644.in(x646); + Formula x638=x643.forAll(x639); + Expression x635=x638.comprehension(x636); + Expression x626=x627.difference(x635); + Expression x650=x310.join(x31); + Expression x649=x51.join(x650); + Expression x625=x626.difference(x649); + Expression x598=x599.product(x625); + Decls x596=x597.setOf(x598); + Variable x661=Variable.unary("MsgsLiveOnTick_future"); + Decls x660=x661.oneOf(x109); + Expression x663=x661.join(x28); + Expression x665=x37.closure(); + Expression x664=x588.join(x665); + Formula x662=x663.in(x664); + Expression x659=x662.comprehension(x660); + Expression x658=x109.difference(x659); + Variable x668=Variable.unary("MsgsLiveOnTick_past"); + Decls x667=x668.oneOf(x109); + Variable x671=Variable.unary("MsgsLiveOnTick_n"); + Expression x673=x668.join(x27); + Expression x672=x673.join(x26); + Decls x670=x671.oneOf(x672); + Expression x676=x668.join(x29); + Expression x675=x671.join(x676); + Expression x679=x37.transpose(); + Expression x678=x679.closure(); + Expression x677=x588.join(x678); + Formula x674=x675.in(x677); + Formula x669=x674.forAll(x670); + Expression x666=x669.comprehension(x667); + Expression x657=x658.difference(x666); + Expression x681=x588.join(x31); + Expression x680=x51.join(x681); + Expression x656=x657.difference(x680); + Variable x687=Variable.unary("MsgsLiveOnTick_future"); + Decls x686=x687.oneOf(x109); + Expression x689=x687.join(x28); + Expression x691=x37.closure(); + Expression x690=x310.join(x691); + Formula x688=x689.in(x690); + Expression x685=x688.comprehension(x686); + Expression x684=x109.difference(x685); + Variable x694=Variable.unary("MsgsLiveOnTick_past"); + Decls x693=x694.oneOf(x109); + Variable x697=Variable.unary("MsgsLiveOnTick_n"); + Expression x699=x694.join(x27); + Expression x698=x699.join(x26); + Decls x696=x697.oneOf(x698); + Expression x702=x694.join(x29); + Expression x701=x697.join(x702); + Expression x705=x37.transpose(); + Expression x704=x705.closure(); + Expression x703=x310.join(x704); + Formula x700=x701.in(x703); + Formula x695=x700.forAll(x696); + Expression x692=x695.comprehension(x693); + Expression x683=x684.difference(x692); + Expression x707=x310.join(x31); + Expression x706=x51.join(x707); + Expression x682=x683.difference(x706); + Expression x655=x656.product(x682); + Formula x654=x597.in(x655); + Variable x710=Variable.unary(""); + Decls x709=x710.oneOf(x656); + Expression x713=x710.join(x597); + Formula x712=x713.one(); + Variable x720=Variable.unary("MsgsLiveOnTick_future"); + Decls x719=x720.oneOf(x109); + Expression x722=x720.join(x28); + Expression x724=x37.closure(); + Expression x723=x310.join(x724); + Formula x721=x722.in(x723); + Expression x718=x721.comprehension(x719); + Expression x717=x109.difference(x718); + Variable x727=Variable.unary("MsgsLiveOnTick_past"); + Decls x726=x727.oneOf(x109); + Variable x730=Variable.unary("MsgsLiveOnTick_n"); + Expression x732=x727.join(x27); + Expression x731=x732.join(x26); + Decls x729=x730.oneOf(x731); + Expression x735=x727.join(x29); + Expression x734=x730.join(x735); + Expression x738=x37.transpose(); + Expression x737=x738.closure(); + Expression x736=x310.join(x737); + Formula x733=x734.in(x736); + Formula x728=x733.forAll(x729); + Expression x725=x728.comprehension(x726); + Expression x716=x717.difference(x725); + Expression x740=x310.join(x31); + Expression x739=x51.join(x740); + Expression x715=x716.difference(x739); + Formula x714=x713.in(x715); + Formula x711=x712.and(x714); + Formula x708=x711.forAll(x709); + Formula x653=x654.and(x708); + Variable x743=Variable.unary(""); + Decls x742=x743.oneOf(x682); + Expression x746=x597.join(x743); + Formula x745=x746.one(); + Variable x753=Variable.unary("MsgsLiveOnTick_future"); + Decls x752=x753.oneOf(x109); + Expression x755=x753.join(x28); + Expression x757=x37.closure(); + Expression x756=x588.join(x757); + Formula x754=x755.in(x756); + Expression x751=x754.comprehension(x752); + Expression x750=x109.difference(x751); + Variable x760=Variable.unary("MsgsLiveOnTick_past"); + Decls x759=x760.oneOf(x109); + Variable x763=Variable.unary("MsgsLiveOnTick_n"); + Expression x765=x760.join(x27); + Expression x764=x765.join(x26); + Decls x762=x763.oneOf(x764); + Expression x768=x760.join(x29); + Expression x767=x763.join(x768); + Expression x771=x37.transpose(); + Expression x770=x771.closure(); + Expression x769=x588.join(x770); + Formula x766=x767.in(x769); + Formula x761=x766.forAll(x762); + Expression x758=x761.comprehension(x759); + Expression x749=x750.difference(x758); + Expression x773=x588.join(x31); + Expression x772=x51.join(x773); + Expression x748=x749.difference(x772); + Formula x747=x746.in(x748); + Formula x744=x745.and(x747); + Formula x741=x744.forAll(x742); + Formula x652=x653.and(x741); + Variable x776=Variable.unary("TicksEquivalent_m1"); + Expression x786=Expression.INTS.union(x5); + Expression x785=x786.union(x230); + Expression x784=x785.union(x51); + Expression x783=x784.union(x67); + Expression x782=x783.union(x109); + Expression x781=x782.union(x14); + Expression x780=x781.union(x164); + Expression x779=x780.union(x17); + Expression x778=x779.union(x18); + Expression x777=x597.join(x778); + Decls x775=x776.oneOf(x777); + Expression x789=x776.join(x27); + Expression x791=x776.join(x597); + Expression x790=x791.join(x27); + Formula x788=x789.eq(x790); + Formula x774=x788.forAll(x775); + Formula x651=x652.and(x774); + Formula x595=x651.forSome(x596); + Formula x591=x592.and(x595); + Variable x794=Variable.nary("TicksEquivalent_r",2); + Expression x797=x588.join(x31); + Expression x796=x51.join(x797); + Expression x799=x310.join(x31); + Expression x798=x51.join(x799); + Expression x795=x796.product(x798); + Decls x793=x794.setOf(x795); + Expression x806=x588.join(x31); + Expression x805=x51.join(x806); + Expression x808=x310.join(x31); + Expression x807=x51.join(x808); + Expression x804=x805.product(x807); + Formula x803=x794.in(x804); + Variable x811=Variable.unary(""); + Decls x810=x811.oneOf(x805); + Expression x814=x811.join(x794); + Formula x813=x814.one(); + Expression x817=x310.join(x31); + Expression x816=x51.join(x817); + Formula x815=x814.in(x816); + Formula x812=x813.and(x815); + Formula x809=x812.forAll(x810); + Formula x802=x803.and(x809); + Variable x820=Variable.unary(""); + Decls x819=x820.oneOf(x807); + Expression x823=x794.join(x820); + Formula x822=x823.one(); + Expression x826=x588.join(x31); + Expression x825=x51.join(x826); + Formula x824=x823.in(x825); + Formula x821=x822.and(x824); + Formula x818=x821.forAll(x819); + Formula x801=x802.and(x818); + Variable x829=Variable.unary("TicksEquivalent_m1"); + Expression x830=x794.join(x778); + Decls x828=x829.oneOf(x830); + Expression x832=x829.join(x27); + Expression x834=x829.join(x794); + Expression x833=x834.join(x27); + Formula x831=x832.eq(x833); + Formula x827=x831.forAll(x828); + Formula x800=x801.and(x827); + Formula x792=x800.forSome(x793); + Formula x590=x591.and(x792); + Formula x586=x590.forSome(x587); + Variable x837=Variable.unary("NeverFindLeader_t"); + Decls x836=x837.oneOf(x14); + Variable x841=Variable.unary("SomeLeaderAtTick_n"); + Decls x840=x841.oneOf(x51); + Expression x845=x837.join(x30); + Expression x844=x841.join(x845); + Expression x843=x844.join(x24); + Formula x842=x843.eq(x6); + Formula x839=x842.forSome(x840); + Formula x838=x839.not(); + Formula x835=x838.forAll(x836); + Formula x846=x0.eq(x0); + Formula x847=x1.eq(x1); + Formula x848=x2.eq(x2); + Formula x849=x3.eq(x3); + Formula x850=x4.eq(x4); + Formula x851=x5.eq(x5); + Formula x852=x6.eq(x6); + Formula x853=x7.eq(x7); + Formula x854=x8.eq(x8); + Formula x855=x9.eq(x9); + Formula x856=x10.eq(x10); + Formula x857=x11.eq(x11); + Formula x858=x12.eq(x12); + Formula x859=x13.eq(x13); + Formula x860=x14.eq(x14); + Formula x861=x15.eq(x15); + Formula x862=x16.eq(x16); + Formula x863=x17.eq(x17); + Formula x864=x18.eq(x18); + Formula x865=x19.eq(x19); + Formula x866=x20.eq(x20); + Formula x867=x21.eq(x21); + Formula x868=x22.eq(x22); + Formula x869=x23.eq(x23); + Formula x870=x24.eq(x24); + Formula x871=x25.eq(x25); + Formula x872=x26.eq(x26); + Formula x873=x27.eq(x27); + Formula x874=x28.eq(x28); + Formula x875=x29.eq(x29); + Formula x876=x30.eq(x30); + Formula x877=x31.eq(x31); + Formula x878=x32.eq(x32); + Formula x879=x33.eq(x33); + Formula x880=x34.eq(x34); + Formula x881=x35.eq(x35); + Formula x882=x36.eq(x36); + Formula x883=x37.eq(x37); + Formula x884=x38.eq(x38); + Formula x885=x39.eq(x39); + Formula x886=x40.eq(x40); + Formula x41=Formula.compose(FormulaOperator.AND, x42, x44, x52, x55, x62, x64, x72, x74, x79, x81, x88, x90, x95, x97, x104, x106, x114, x116, x123, x125, x145, x148, x156, x177, x180, x186, x189, x195, x198, x204, x207, x212, x214, x220, x223, x231, x233, x236, x240, x241, x244, x248, x274, x282, x288, x289, x291, x293, x295, x302, x484, x485, x486, x487, x490, x501, x582, x585, x586, x835, x846, x847, x848, x849, x850, x851, x852, x853, x854, x855, x856, x857, x858, x859, x860, x861, x862, x863, x864, x865, x866, x867, x868, x869, x870, x871, x872, x873, x874, x875, x876, x877, x878, x879, x880, x881, x882, x883, x884, x885, x886); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x41,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadSomeLeaderRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadSomeLeaderRun.java new file mode 100644 index 0000000..c397832 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/ringleadSomeLeaderRun.java @@ -0,0 +1,1529 @@ +package kodkod.examples.models.algorithm.election; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ringlead", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 14, + TernaryRelations =6, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 28, + TransitiveClosure = 1, + NestedQuantifiers = 3, + SetCardinality = 5, + Additions = 0, + Subtractions = 0, + Comparison = 17, + OrderedRelations = 2, + Constraints =28 +) + +public final class ringleadSomeLeaderRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("bool/True"); + Relation x7 = Relation.unary("bool/False"); + Relation x8 = Relation.unary("this/RingLeadNode"); + Relation x9 = Relation.unary("msg/Node remainder"); + Relation x10 = Relation.unary("this/RingLeadMsgState"); + Relation x11 = Relation.unary("msg/MsgState remainder"); + Relation x12 = Relation.unary("this/MsgViz"); + Relation x13 = Relation.unary("msg/Msg remainder"); + Relation x14 = Relation.unary("msg/Tick"); + Relation x15 = Relation.unary("this/RingLeadNodeState"); + Relation x16 = Relation.unary("msg/NodeState remainder"); + Relation x17 = Relation.unary("tickOrd/Ord"); + Relation x18 = Relation.unary("nodeOrd/Ord"); + Relation x19 = Relation.nary("this/RingLeadNode.rightNeighbor", 2); + Relation x20 = Relation.nary("this/RingLeadMsgState.id", 2); + Relation x21 = Relation.nary("this/MsgViz.vFrom", 2); + Relation x22 = Relation.nary("this/MsgViz.vTo", 2); + Relation x23 = Relation.nary("this/MsgViz.vId", 2); + Relation x24 = Relation.nary("this/RingLeadNodeState.leader", 2); + Relation x25 = Relation.nary("msg/MsgState.from", 2); + Relation x26 = Relation.nary("msg/MsgState.to", 2); + Relation x27 = Relation.nary("msg/Msg.state", 2); + Relation x28 = Relation.nary("msg/Msg.sentOn", 2); + Relation x29 = Relation.nary("msg/Msg.readOn", 3); + Relation x30 = Relation.nary("msg/Tick.state", 3); + Relation x31 = Relation.nary("msg/Tick.visible", 3); + Relation x32 = Relation.nary("msg/Tick.read", 3); + Relation x33 = Relation.nary("msg/Tick.sent", 3); + Relation x34 = Relation.nary("msg/Tick.available", 2); + Relation x35 = Relation.nary("msg/Tick.needsToSend", 3); + Relation x36 = Relation.unary("tickOrd/Ord.First"); + Relation x37 = Relation.nary("tickOrd/Ord.Next", 2); + Relation x38 = Relation.unary("nodeOrd/Ord.First"); + Relation x39 = Relation.nary("nodeOrd/Ord.Next", 2); + Relation x40 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "bool/False$0", + "bool/True$0", "msg/Msg$0", "msg/Msg$1", "msg/Msg$2", "msg/Msg$3", "msg/Msg$4", + "msg/MsgState$0", "msg/MsgState$1", "msg/MsgState$2", "msg/MsgState$3", "msg/MsgState$4", "msg/Node$0", + "msg/Node$1", "msg/Node$2", "msg/NodeState$0", "msg/NodeState$1", "msg/Tick$0", "msg/Tick$1", + "msg/Tick$2", "msg/Tick$3", "msg/Tick$4", "nodeOrd/Ord$0", "tickOrd/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("bool/True$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("bool/False$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("msg/Node$0")); + x8_upper.add(factory.tuple("msg/Node$1")); + x8_upper.add(factory.tuple("msg/Node$2")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("msg/Node$0")); + x9_upper.add(factory.tuple("msg/Node$1")); + x9_upper.add(factory.tuple("msg/Node$2")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("msg/MsgState$0")); + x10_upper.add(factory.tuple("msg/MsgState$1")); + x10_upper.add(factory.tuple("msg/MsgState$2")); + x10_upper.add(factory.tuple("msg/MsgState$3")); + x10_upper.add(factory.tuple("msg/MsgState$4")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("msg/MsgState$0")); + x11_upper.add(factory.tuple("msg/MsgState$1")); + x11_upper.add(factory.tuple("msg/MsgState$2")); + x11_upper.add(factory.tuple("msg/MsgState$3")); + x11_upper.add(factory.tuple("msg/MsgState$4")); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("msg/Msg$0")); + x12_upper.add(factory.tuple("msg/Msg$1")); + x12_upper.add(factory.tuple("msg/Msg$2")); + x12_upper.add(factory.tuple("msg/Msg$3")); + x12_upper.add(factory.tuple("msg/Msg$4")); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("msg/Msg$0")); + x13_upper.add(factory.tuple("msg/Msg$1")); + x13_upper.add(factory.tuple("msg/Msg$2")); + x13_upper.add(factory.tuple("msg/Msg$3")); + x13_upper.add(factory.tuple("msg/Msg$4")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("msg/Tick$0")); + x14_upper.add(factory.tuple("msg/Tick$1")); + x14_upper.add(factory.tuple("msg/Tick$2")); + x14_upper.add(factory.tuple("msg/Tick$3")); + x14_upper.add(factory.tuple("msg/Tick$4")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("msg/NodeState$0")); + x15_upper.add(factory.tuple("msg/NodeState$1")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("msg/NodeState$0")); + x16_upper.add(factory.tuple("msg/NodeState$1")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("tickOrd/Ord$0")); + bounds.boundExactly(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("nodeOrd/Ord$0")); + bounds.boundExactly(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$0"))); + x19_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$1"))); + x19_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$2"))); + x19_upper.add(factory.tuple("msg/Node$1").product(factory.tuple("msg/Node$0"))); + x19_upper.add(factory.tuple("msg/Node$1").product(factory.tuple("msg/Node$1"))); + x19_upper.add(factory.tuple("msg/Node$1").product(factory.tuple("msg/Node$2"))); + x19_upper.add(factory.tuple("msg/Node$2").product(factory.tuple("msg/Node$0"))); + x19_upper.add(factory.tuple("msg/Node$2").product(factory.tuple("msg/Node$1"))); + x19_upper.add(factory.tuple("msg/Node$2").product(factory.tuple("msg/Node$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + x20_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$1"))); + x20_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$2"))); + x20_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$0"))); + x20_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$1"))); + x20_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$2"))); + x20_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$0"))); + x20_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$1"))); + x20_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$2"))); + x20_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$0"))); + x20_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$1"))); + x20_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$2"))); + x20_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$0"))); + x20_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$1"))); + x20_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$2"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + x21_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1"))); + x21_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2"))); + x21_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0"))); + x21_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1"))); + x21_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2"))); + x21_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0"))); + x21_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1"))); + x21_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2"))); + x21_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0"))); + x21_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1"))); + x21_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2"))); + x21_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0"))); + x21_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1"))); + x21_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(2); + x22_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + x22_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1"))); + x22_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2"))); + x22_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0"))); + x22_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1"))); + x22_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2"))); + x22_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0"))); + x22_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1"))); + x22_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2"))); + x22_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0"))); + x22_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1"))); + x22_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2"))); + x22_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0"))); + x22_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1"))); + x22_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2"))); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0"))); + x23_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1"))); + x23_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2"))); + x23_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0"))); + x23_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1"))); + x23_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2"))); + x23_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0"))); + x23_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1"))); + x23_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2"))); + x23_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0"))); + x23_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1"))); + x23_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2"))); + x23_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0"))); + x23_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1"))); + x23_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(2); + x24_upper.add(factory.tuple("msg/NodeState$0").product(factory.tuple("bool/True$0"))); + x24_upper.add(factory.tuple("msg/NodeState$0").product(factory.tuple("bool/False$0"))); + x24_upper.add(factory.tuple("msg/NodeState$1").product(factory.tuple("bool/True$0"))); + x24_upper.add(factory.tuple("msg/NodeState$1").product(factory.tuple("bool/False$0"))); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(2); + x25_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + x25_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$1"))); + x25_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$2"))); + x25_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$0"))); + x25_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$1"))); + x25_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$2"))); + x25_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$0"))); + x25_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$1"))); + x25_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$2"))); + x25_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$0"))); + x25_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$1"))); + x25_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$2"))); + x25_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$0"))); + x25_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$1"))); + x25_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$2"))); + bounds.bound(x25, x25_upper); + + TupleSet x26_upper = factory.noneOf(2); + x26_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$0"))); + x26_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$1"))); + x26_upper.add(factory.tuple("msg/MsgState$0").product(factory.tuple("msg/Node$2"))); + x26_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$0"))); + x26_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$1"))); + x26_upper.add(factory.tuple("msg/MsgState$1").product(factory.tuple("msg/Node$2"))); + x26_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$0"))); + x26_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$1"))); + x26_upper.add(factory.tuple("msg/MsgState$2").product(factory.tuple("msg/Node$2"))); + x26_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$0"))); + x26_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$1"))); + x26_upper.add(factory.tuple("msg/MsgState$3").product(factory.tuple("msg/Node$2"))); + x26_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$0"))); + x26_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$1"))); + x26_upper.add(factory.tuple("msg/MsgState$4").product(factory.tuple("msg/Node$2"))); + bounds.bound(x26, x26_upper); + + TupleSet x27_upper = factory.noneOf(2); + x27_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/MsgState$0"))); + x27_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/MsgState$1"))); + x27_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/MsgState$2"))); + x27_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/MsgState$3"))); + x27_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/MsgState$4"))); + x27_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/MsgState$0"))); + x27_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/MsgState$1"))); + x27_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/MsgState$2"))); + x27_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/MsgState$3"))); + x27_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/MsgState$4"))); + x27_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/MsgState$0"))); + x27_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/MsgState$1"))); + x27_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/MsgState$2"))); + x27_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/MsgState$3"))); + x27_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/MsgState$4"))); + x27_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/MsgState$0"))); + x27_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/MsgState$1"))); + x27_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/MsgState$2"))); + x27_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/MsgState$3"))); + x27_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/MsgState$4"))); + x27_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/MsgState$0"))); + x27_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/MsgState$1"))); + x27_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/MsgState$2"))); + x27_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/MsgState$3"))); + x27_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/MsgState$4"))); + bounds.bound(x27, x27_upper); + + TupleSet x28_upper = factory.noneOf(2); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$0"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$1"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$2"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$3"))); + x28_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Tick$4"))); + x28_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Tick$0"))); + x28_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Tick$1"))); + x28_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Tick$2"))); + x28_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Tick$3"))); + x28_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Tick$4"))); + x28_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Tick$0"))); + x28_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Tick$1"))); + x28_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Tick$2"))); + x28_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Tick$3"))); + x28_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Tick$4"))); + x28_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Tick$0"))); + x28_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Tick$1"))); + x28_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Tick$2"))); + x28_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Tick$3"))); + x28_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Tick$4"))); + x28_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Tick$0"))); + x28_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Tick$1"))); + x28_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Tick$2"))); + x28_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Tick$3"))); + x28_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Tick$4"))); + bounds.bound(x28, x28_upper); + + TupleSet x29_upper = factory.noneOf(3); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Tick$4"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$0"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$1"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$2"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$3"))); + x29_upper.add(factory.tuple("msg/Msg$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Tick$4"))); + bounds.bound(x29, x29_upper); + + TupleSet x30_upper = factory.noneOf(3); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/NodeState$1"))); + x30_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$0"))); + x30_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/NodeState$1"))); + bounds.bound(x30, x30_upper); + + TupleSet x31_upper = factory.noneOf(3); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x31_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + bounds.bound(x31, x31_upper); + + TupleSet x32_upper = factory.noneOf(3); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x32_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + bounds.bound(x32, x32_upper); + + TupleSet x33_upper = factory.noneOf(3); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x33_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + bounds.bound(x33, x33_upper); + + TupleSet x34_upper = factory.noneOf(2); + x34_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Msg$1"))); + x34_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Msg$2"))); + x34_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Msg$3"))); + x34_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Msg$4"))); + x34_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Msg$1"))); + x34_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Msg$2"))); + x34_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Msg$3"))); + x34_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Msg$4"))); + x34_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Msg$1"))); + x34_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Msg$2"))); + x34_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Msg$3"))); + x34_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Msg$4"))); + x34_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Msg$1"))); + x34_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Msg$2"))); + x34_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Msg$3"))); + x34_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Msg$4"))); + x34_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Msg$0"))); + x34_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Msg$1"))); + x34_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Msg$2"))); + x34_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Msg$3"))); + x34_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Msg$4"))); + bounds.bound(x34, x34_upper); + + TupleSet x35_upper = factory.noneOf(3); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$0")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$1")).product(factory.tuple("msg/Msg$4"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$0"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$1"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$2"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$3"))); + x35_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Node$2")).product(factory.tuple("msg/Msg$4"))); + bounds.bound(x35, x35_upper); + + TupleSet x36_upper = factory.noneOf(1); + x36_upper.add(factory.tuple("msg/Tick$0")); + x36_upper.add(factory.tuple("msg/Tick$1")); + x36_upper.add(factory.tuple("msg/Tick$2")); + x36_upper.add(factory.tuple("msg/Tick$3")); + x36_upper.add(factory.tuple("msg/Tick$4")); + bounds.bound(x36, x36_upper); + + TupleSet x37_upper = factory.noneOf(2); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$3"))); + x37_upper.add(factory.tuple("msg/Tick$0").product(factory.tuple("msg/Tick$4"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$3"))); + x37_upper.add(factory.tuple("msg/Tick$1").product(factory.tuple("msg/Tick$4"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$3"))); + x37_upper.add(factory.tuple("msg/Tick$2").product(factory.tuple("msg/Tick$4"))); + x37_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Tick$3"))); + x37_upper.add(factory.tuple("msg/Tick$3").product(factory.tuple("msg/Tick$4"))); + x37_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Tick$0"))); + x37_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Tick$1"))); + x37_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Tick$2"))); + x37_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Tick$3"))); + x37_upper.add(factory.tuple("msg/Tick$4").product(factory.tuple("msg/Tick$4"))); + bounds.bound(x37, x37_upper); + + TupleSet x38_upper = factory.noneOf(1); + x38_upper.add(factory.tuple("msg/Node$0")); + x38_upper.add(factory.tuple("msg/Node$1")); + x38_upper.add(factory.tuple("msg/Node$2")); + bounds.bound(x38, x38_upper); + + TupleSet x39_upper = factory.noneOf(2); + x39_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$0"))); + x39_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$1"))); + x39_upper.add(factory.tuple("msg/Node$0").product(factory.tuple("msg/Node$2"))); + x39_upper.add(factory.tuple("msg/Node$1").product(factory.tuple("msg/Node$0"))); + x39_upper.add(factory.tuple("msg/Node$1").product(factory.tuple("msg/Node$1"))); + x39_upper.add(factory.tuple("msg/Node$1").product(factory.tuple("msg/Node$2"))); + x39_upper.add(factory.tuple("msg/Node$2").product(factory.tuple("msg/Node$0"))); + x39_upper.add(factory.tuple("msg/Node$2").product(factory.tuple("msg/Node$1"))); + x39_upper.add(factory.tuple("msg/Node$2").product(factory.tuple("msg/Node$2"))); + bounds.bound(x39, x39_upper); + + TupleSet x40_upper = factory.noneOf(1); + x40_upper.add(factory.tuple("msg/Tick$0")); + x40_upper.add(factory.tuple("msg/Tick$1")); + x40_upper.add(factory.tuple("msg/Tick$2")); + x40_upper.add(factory.tuple("msg/Tick$3")); + x40_upper.add(factory.tuple("msg/Tick$4")); + bounds.bound(x40, x40_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x43=x6.intersection(x7); + Formula x42=x43.no(); + Variable x46=Variable.unary("SomeLeader_this"); + Decls x45=x46.oneOf(x8); + Expression x49=x46.join(x19); + Formula x48=x49.one(); + Expression x51=x8.union(x9); + Formula x50=x49.in(x51); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x53=x19.join(Expression.UNIV); + Formula x52=x53.in(x8); + Variable x57=Variable.unary("SomeLeader_this"); + Decls x56=x57.oneOf(x10); + Expression x60=x57.join(x20); + Formula x59=x60.one(); + Formula x61=x60.in(x51); + Formula x58=x59.and(x61); + Formula x55=x58.forAll(x56); + Expression x63=x20.join(Expression.UNIV); + Formula x62=x63.in(x10); + Variable x66=Variable.unary("SomeLeader_this"); + Expression x67=x10.union(x11); + Decls x65=x66.oneOf(x67); + Expression x70=x66.join(x25); + Formula x69=x70.one(); + Formula x71=x70.in(x51); + Formula x68=x69.and(x71); + Formula x64=x68.forAll(x65); + Expression x73=x25.join(Expression.UNIV); + Formula x72=x73.in(x67); + Variable x76=Variable.unary("SomeLeader_this"); + Decls x75=x76.oneOf(x67); + Expression x78=x76.join(x26); + Formula x77=x78.in(x51); + Formula x74=x77.forAll(x75); + Expression x80=x26.join(Expression.UNIV); + Formula x79=x80.in(x67); + Variable x83=Variable.unary("SomeLeader_this"); + Decls x82=x83.oneOf(x12); + Expression x86=x83.join(x21); + Formula x85=x86.one(); + Formula x87=x86.in(x51); + Formula x84=x85.and(x87); + Formula x81=x84.forAll(x82); + Expression x89=x21.join(Expression.UNIV); + Formula x88=x89.in(x12); + Variable x92=Variable.unary("SomeLeader_this"); + Decls x91=x92.oneOf(x12); + Expression x94=x92.join(x22); + Formula x93=x94.in(x51); + Formula x90=x93.forAll(x91); + Expression x96=x22.join(Expression.UNIV); + Formula x95=x96.in(x12); + Variable x99=Variable.unary("SomeLeader_this"); + Decls x98=x99.oneOf(x12); + Expression x102=x99.join(x23); + Formula x101=x102.one(); + Formula x103=x102.in(x51); + Formula x100=x101.and(x103); + Formula x97=x100.forAll(x98); + Expression x105=x23.join(Expression.UNIV); + Formula x104=x105.in(x12); + Variable x108=Variable.unary("SomeLeader_this"); + Expression x109=x12.union(x13); + Decls x107=x108.oneOf(x109); + Expression x112=x108.join(x27); + Formula x111=x112.one(); + Formula x113=x112.in(x67); + Formula x110=x111.and(x113); + Formula x106=x110.forAll(x107); + Expression x115=x27.join(Expression.UNIV); + Formula x114=x115.in(x109); + Variable x118=Variable.unary("SomeLeader_this"); + Decls x117=x118.oneOf(x109); + Expression x121=x118.join(x28); + Formula x120=x121.one(); + Formula x122=x121.in(x14); + Formula x119=x120.and(x122); + Formula x116=x119.forAll(x117); + Expression x124=x28.join(Expression.UNIV); + Formula x123=x124.in(x109); + Variable x127=Variable.unary("SomeLeader_this"); + Decls x126=x127.oneOf(x109); + Expression x131=x127.join(x29); + Expression x132=x51.product(x14); + Formula x130=x131.in(x132); + Variable x135=Variable.unary(""); + Decls x134=x135.oneOf(x51); + Expression x138=x135.join(x131); + Formula x137=x138.lone(); + Formula x139=x138.in(x14); + Formula x136=x137.and(x139); + Formula x133=x136.forAll(x134); + Formula x129=x130.and(x133); + Variable x142=Variable.unary(""); + Decls x141=x142.oneOf(x14); + Expression x144=x131.join(x142); + Formula x143=x144.in(x51); + Formula x140=x143.forAll(x141); + Formula x128=x129.and(x140); + Formula x125=x128.forAll(x126); + Expression x147=x29.join(Expression.UNIV); + Expression x146=x147.join(Expression.UNIV); + Formula x145=x146.in(x109); + Variable x150=Variable.unary("SomeLeader_this"); + Decls x149=x150.oneOf(x109); + Expression x153=x150.join(x29); + Expression x152=x153.join(x14); + Expression x155=x150.join(x27); + Expression x154=x155.join(x26); + Formula x151=x152.in(x154); + Formula x148=x151.forAll(x149); + Variable x158=Variable.unary("SomeLeader_this"); + Decls x157=x158.oneOf(x14); + Expression x162=x158.join(x30); + Expression x164=x15.union(x16); + Expression x163=x51.product(x164); + Formula x161=x162.in(x163); + Variable x167=Variable.unary(""); + Decls x166=x167.oneOf(x51); + Expression x170=x167.join(x162); + Formula x169=x170.one(); + Formula x171=x170.in(x164); + Formula x168=x169.and(x171); + Formula x165=x168.forAll(x166); + Formula x160=x161.and(x165); + Variable x174=Variable.unary(""); + Decls x173=x174.oneOf(x164); + Expression x176=x162.join(x174); + Formula x175=x176.in(x51); + Formula x172=x175.forAll(x173); + Formula x159=x160.and(x172); + Formula x156=x159.forAll(x157); + Expression x179=x30.join(Expression.UNIV); + Expression x178=x179.join(Expression.UNIV); + Formula x177=x178.in(x14); + Variable x182=Variable.unary("SomeLeader_this"); + Decls x181=x182.oneOf(x14); + Expression x184=x182.join(x31); + Expression x185=x51.product(x109); + Formula x183=x184.in(x185); + Formula x180=x183.forAll(x181); + Expression x188=x31.join(Expression.UNIV); + Expression x187=x188.join(Expression.UNIV); + Formula x186=x187.in(x14); + Variable x191=Variable.unary("SomeLeader_this"); + Decls x190=x191.oneOf(x14); + Expression x193=x191.join(x32); + Expression x194=x51.product(x109); + Formula x192=x193.in(x194); + Formula x189=x192.forAll(x190); + Expression x197=x32.join(Expression.UNIV); + Expression x196=x197.join(Expression.UNIV); + Formula x195=x196.in(x14); + Variable x200=Variable.unary("SomeLeader_this"); + Decls x199=x200.oneOf(x14); + Expression x202=x200.join(x33); + Expression x203=x51.product(x109); + Formula x201=x202.in(x203); + Formula x198=x201.forAll(x199); + Expression x206=x33.join(Expression.UNIV); + Expression x205=x206.join(Expression.UNIV); + Formula x204=x205.in(x14); + Variable x209=Variable.unary("SomeLeader_this"); + Decls x208=x209.oneOf(x14); + Expression x211=x209.join(x34); + Formula x210=x211.in(x109); + Formula x207=x210.forAll(x208); + Expression x213=x34.join(Expression.UNIV); + Formula x212=x213.in(x14); + Variable x216=Variable.unary("SomeLeader_this"); + Decls x215=x216.oneOf(x14); + Expression x218=x216.join(x35); + Expression x219=x51.product(x109); + Formula x217=x218.in(x219); + Formula x214=x217.forAll(x215); + Expression x222=x35.join(Expression.UNIV); + Expression x221=x222.join(Expression.UNIV); + Formula x220=x221.in(x14); + Variable x225=Variable.unary("SomeLeader_this"); + Decls x224=x225.oneOf(x15); + Expression x228=x225.join(x24); + Formula x227=x228.one(); + Expression x230=x6.union(x7); + Formula x229=x228.in(x230); + Formula x226=x227.and(x229); + Formula x223=x226.forAll(x224); + Expression x232=x24.join(Expression.UNIV); + Formula x231=x232.in(x15); + Expression x235=x17.product(x36); + Expression x234=x17.join(x235); + Formula x233=x234.in(x14); + Expression x238=x17.product(x37); + Expression x237=x17.join(x238); + Expression x239=x14.product(x14); + Formula x236=x237.in(x239); + Formula x240=x37.totalOrder(x14,x36,x40); + Expression x243=x18.product(x38); + Expression x242=x18.join(x243); + Formula x241=x242.in(x51); + Expression x246=x18.product(x39); + Expression x245=x18.join(x246); + Expression x247=x51.product(x51); + Formula x244=x245.in(x247); + Variable x252=Variable.unary(""); + Decls x251=x252.oneOf(x51); + Formula x256=x252.eq(x38); + Expression x258=x39.join(x252); + Formula x257=x258.one(); + Formula x255=x256.or(x257); + Expression x262=x39.join(x51); + Expression x261=x51.difference(x262); + Formula x260=x252.eq(x261); + Expression x264=x252.join(x39); + Formula x263=x264.one(); + Formula x259=x260.or(x263); + Formula x254=x255.and(x259); + Expression x268=x39.closure(); + Expression x267=x252.join(x268); + Formula x266=x252.in(x267); + Formula x265=x266.not(); + Formula x253=x254.and(x265); + Formula x250=x253.forAll(x251); + Expression x271=x39.reflexiveClosure(); + Expression x270=x38.join(x271); + Formula x269=x51.in(x270); + Formula x249=x250.and(x269); + Expression x273=x39.join(x38); + Formula x272=x273.no(); + Formula x248=x249.and(x272); + Formula x275=x51.one(); + Variable x278=Variable.unary("SomeLeader_n"); + Decls x277=x278.oneOf(x51); + Expression x281=x278.join(x19); + Formula x280=x278.eq(x281); + Formula x279=x280.not(); + Formula x276=x279.forAll(x277); + Formula x274=x275.or(x276); + Variable x284=Variable.unary("SomeLeader_n"); + Decls x283=x284.oneOf(x51); + Expression x287=x19.closure(); + Expression x286=x284.join(x287); + Formula x285=x51.in(x286); + Formula x282=x285.forAll(x283); + Formula x288=x12.eq(x109); + Expression x290=x27.join(x25); + Formula x289=x21.eq(x290); + Expression x292=x27.join(x26); + Formula x291=x22.eq(x292); + Expression x294=x27.join(x20); + Formula x293=x23.eq(x294); + Variable x297=Variable.unary("SomeLeader_n"); + Decls x296=x297.oneOf(x51); + Expression x301=x36.join(x30); + Expression x300=x297.join(x301); + Expression x299=x300.join(x24); + Formula x298=x299.eq(x7); + Formula x295=x298.forAll(x296); + Variable x304=Variable.unary("SomeLeader_n"); + Decls x303=x304.oneOf(x51); + Variable x308=Variable.unary("SomeLeader_t"); + Expression x311=x37.join(x14); + Expression x310=x14.difference(x311); + Expression x309=x14.difference(x310); + Decls x307=x308.oneOf(x309); + Formula x314=x308.eq(x36); + Expression x319=x308.join(x33); + Expression x318=x304.join(x319); + Formula x317=x318.one(); + Expression x325=x308.join(x35); + Expression x324=x304.join(x325); + IntExpression x323=x324.count(); + IntExpression x326=IntConstant.constant(1); + Formula x322=x323.eq(x326); + Expression x329=x318.join(x27); + Expression x328=x329.join(x20); + Formula x327=x328.eq(x304); + Formula x321=x322.and(x327); + Expression x334=x308.join(x37); + Expression x333=x334.join(x30); + Expression x332=x304.join(x333); + Expression x331=x332.join(x24); + Formula x330=x331.eq(x7); + Formula x320=x321.and(x330); + Formula x316=x317.and(x320); + Expression x337=x318.join(x27); + Expression x336=x337.join(x26); + Expression x338=x304.join(x19); + Formula x335=x336.eq(x338); + Formula x315=x316.and(x335); + Formula x313=x314.implies(x315); + Formula x340=x314.not(); + Expression x346=x308.join(x32); + Expression x345=x304.join(x346); + Expression x348=x308.join(x31); + Expression x347=x304.join(x348); + Formula x344=x345.eq(x347); + Variable x352=Variable.unary("RingLeadTransHelper_received"); + Decls x351=x352.oneOf(x345); + Expression x357=x352.join(x27); + Expression x356=x357.join(x20); + Expression x359=x39.closure(); + Expression x358=x304.join(x359); + Formula x355=x356.in(x358); + Formula x354=x355.not(); + Variable x363=Variable.unary("RingLeadTransHelper_weSend"); + Expression x365=x308.join(x33); + Expression x364=x304.join(x365); + Decls x362=x363.oneOf(x364); + Expression x369=x363.join(x27); + Expression x368=x369.join(x20); + Expression x371=x352.join(x27); + Expression x370=x371.join(x20); + Formula x367=x368.eq(x370); + Expression x374=x363.join(x27); + Expression x373=x374.join(x26); + Expression x375=x304.join(x19); + Formula x372=x373.eq(x375); + Formula x366=x367.and(x372); + Expression x361=x366.comprehension(x362); + Formula x360=x361.one(); + Formula x353=x354.or(x360); + Formula x350=x353.forAll(x351); + Expression x379=x308.join(x35); + Expression x378=x304.join(x379); + IntExpression x377=x378.count(); + Variable x383=Variable.unary("RingLeadTransHelper_m"); + Decls x382=x383.oneOf(x345); + Expression x386=x383.join(x27); + Expression x385=x386.join(x20); + Expression x388=x39.closure(); + Expression x387=x304.join(x388); + Formula x384=x385.in(x387); + Expression x381=x384.comprehension(x382); + IntExpression x380=x381.count(); + Formula x376=x377.eq(x380); + Formula x349=x350.and(x376); + Formula x343=x344.and(x349); + Variable x391=Variable.unary("RingLeadTransHelper_weSend"); + Decls x390=x391.oneOf(x364); + Expression x396=x391.join(x27); + Expression x395=x396.join(x20); + Expression x398=x39.closure(); + Expression x397=x304.join(x398); + Formula x394=x395.in(x397); + Expression x401=x345.join(x27); + Expression x400=x401.join(x20); + Formula x399=x395.in(x400); + Formula x393=x394.and(x399); + Expression x404=x391.join(x27); + Expression x403=x404.join(x26); + Expression x405=x304.join(x19); + Formula x402=x403.eq(x405); + Formula x392=x393.and(x402); + Formula x389=x392.forAll(x390); + Formula x342=x343.and(x389); + Expression x411=x308.join(x37); + Expression x410=x411.join(x30); + Expression x409=x304.join(x410); + Expression x408=x409.join(x24); + Formula x407=x408.eq(x6); + Expression x416=x308.join(x30); + Expression x415=x304.join(x416); + Expression x414=x415.join(x24); + Formula x413=x414.eq(x6); + Expression x419=x345.join(x27); + Expression x418=x419.join(x20); + Formula x417=x304.in(x418); + Formula x412=x413.or(x417); + Formula x406=x407.iff(x412); + Formula x341=x342.and(x406); + Formula x339=x340.implies(x341); + Formula x312=x313.and(x339); + Formula x306=x312.forAll(x307); + Expression x424=x310.join(x32); + Expression x423=x304.join(x424); + Expression x426=x310.join(x31); + Expression x425=x304.join(x426); + Formula x422=x423.eq(x425); + Variable x430=Variable.unary("RingLeadTransHelper_received"); + Decls x429=x430.oneOf(x423); + Expression x435=x430.join(x27); + Expression x434=x435.join(x20); + Expression x437=x39.closure(); + Expression x436=x304.join(x437); + Formula x433=x434.in(x436); + Formula x432=x433.not(); + Variable x441=Variable.unary("RingLeadTransHelper_weSend"); + Expression x443=x310.join(x33); + Expression x442=x304.join(x443); + Decls x440=x441.oneOf(x442); + Expression x447=x441.join(x27); + Expression x446=x447.join(x20); + Expression x449=x430.join(x27); + Expression x448=x449.join(x20); + Formula x445=x446.eq(x448); + Expression x452=x441.join(x27); + Expression x451=x452.join(x26); + Expression x453=x304.join(x19); + Formula x450=x451.eq(x453); + Formula x444=x445.and(x450); + Expression x439=x444.comprehension(x440); + Formula x438=x439.one(); + Formula x431=x432.or(x438); + Formula x428=x431.forAll(x429); + Expression x457=x310.join(x35); + Expression x456=x304.join(x457); + IntExpression x455=x456.count(); + Variable x461=Variable.unary("RingLeadTransHelper_m"); + Decls x460=x461.oneOf(x423); + Expression x464=x461.join(x27); + Expression x463=x464.join(x20); + Expression x466=x39.closure(); + Expression x465=x304.join(x466); + Formula x462=x463.in(x465); + Expression x459=x462.comprehension(x460); + IntExpression x458=x459.count(); + Formula x454=x455.eq(x458); + Formula x427=x428.and(x454); + Formula x421=x422.and(x427); + Variable x469=Variable.unary("RingLeadTransHelper_weSend"); + Decls x468=x469.oneOf(x442); + Expression x474=x469.join(x27); + Expression x473=x474.join(x20); + Expression x476=x39.closure(); + Expression x475=x304.join(x476); + Formula x472=x473.in(x475); + Expression x479=x423.join(x27); + Expression x478=x479.join(x20); + Formula x477=x473.in(x478); + Formula x471=x472.and(x477); + Expression x482=x469.join(x27); + Expression x481=x482.join(x26); + Expression x483=x304.join(x19); + Formula x480=x481.eq(x483); + Formula x470=x471.and(x480); + Formula x467=x470.forAll(x468); + Formula x420=x421.and(x467); + Formula x305=x306.and(x420); + Formula x302=x305.forAll(x303); + Formula x484=x8.eq(x51); + Formula x485=x10.eq(x67); + Formula x486=x15.eq(x164); + Expression x489=x36.join(x31); + Expression x488=x51.join(x489); + Formula x487=x488.no(); + Variable x492=Variable.unary("SomeLeader_pre"); + Expression x493=x14.difference(x310); + Decls x491=x492.oneOf(x493); + Expression x496=x492.join(x37); + Expression x495=x496.join(x34); + Expression x498=x492.join(x34); + Expression x500=x492.join(x33); + Expression x499=x51.join(x500); + Expression x497=x498.difference(x499); + Formula x494=x495.eq(x497); + Formula x490=x494.forAll(x491); + Variable x503=Variable.unary("SomeLeader_t"); + Decls x502=x503.oneOf(x14); + Expression x508=x503.join(x33); + Expression x507=x51.join(x508); + Expression x509=x503.join(x34); + Formula x506=x507.in(x509); + Expression x515=x503.join(x33); + Expression x514=x51.join(x515); + Expression x513=x514.join(x28); + Formula x512=x513.in(x503); + Expression x518=x503.join(x33); + Expression x517=x51.join(x518); + Expression x520=x503.join(x33); + Expression x519=x51.join(x520); + Formula x516=x517.eq(x519); + Formula x511=x512.and(x516); + Variable x524=Variable.unary("SomeLeader_n"); + Decls x523=x524.oneOf(x51); + Variable x526=Variable.unary("SomeLeader_m"); + Decls x525=x526.oneOf(x109); + Decls x522=x523.and(x525); + Expression x531=x526.join(x29); + Expression x530=x524.join(x531); + Formula x529=x530.eq(x503); + Formula x528=x529.not(); + Expression x534=x503.join(x32); + Expression x533=x524.join(x534); + Formula x532=x526.in(x533); + Formula x527=x528.or(x532); + Formula x521=x527.forAll(x522); + Formula x510=x511.and(x521); + Formula x505=x506.and(x510); + Expression x541=x503.join(x32); + Expression x540=x51.join(x541); + Expression x539=x540.join(x29); + Expression x538=x51.join(x539); + Formula x537=x538.in(x503); + Variable x544=Variable.unary("SomeLeader_n"); + Decls x543=x544.oneOf(x51); + Expression x549=x503.join(x33); + Expression x548=x544.join(x549); + Expression x547=x548.join(x27); + Expression x546=x547.join(x25); + Formula x545=x546.in(x544); + Formula x542=x545.forAll(x543); + Formula x536=x537.and(x542); + Variable x553=Variable.unary("SomeLeader_n"); + Decls x552=x553.oneOf(x51); + Variable x555=Variable.unary("SomeLeader_m"); + Decls x554=x555.oneOf(x109); + Decls x551=x552.and(x554); + Expression x561=x503.join(x31); + Expression x560=x553.join(x561); + Formula x559=x555.in(x560); + Formula x558=x559.not(); + Expression x565=x555.join(x27); + Expression x564=x565.join(x26); + Formula x563=x553.in(x564); + Expression x567=x555.join(x28); + Expression x570=x37.transpose(); + Expression x569=x570.closure(); + Expression x568=x503.join(x569); + Formula x566=x567.in(x568); + Formula x562=x563.and(x566); + Formula x557=x558.or(x562); + Expression x575=x503.join(x32); + Expression x574=x553.join(x575); + Formula x573=x555.in(x574); + Formula x572=x573.not(); + Expression x581=x37.closure(); + Expression x580=x503.join(x581); + Expression x579=x580.join(x31); + Expression x578=x553.join(x579); + Formula x577=x555.in(x578); + Formula x576=x577.not(); + Formula x571=x572.or(x576); + Formula x556=x557.and(x571); + Formula x550=x556.forAll(x551); + Formula x535=x536.and(x550); + Formula x504=x505.and(x535); + Formula x501=x504.forAll(x502); + Expression x584=x14.join(x33); + Expression x583=x51.join(x584); + Formula x582=x109.in(x583); + Formula x585=x32.in(x31); + Variable x588=Variable.unary("SomeLeader_t"); + Decls x587=x588.oneOf(x14); + Variable x591=Variable.unary("SomeLeaderAtTick_n"); + Decls x590=x591.oneOf(x51); + Expression x595=x588.join(x30); + Expression x594=x591.join(x595); + Expression x593=x594.join(x24); + Formula x592=x593.eq(x6); + Formula x589=x592.forSome(x590); + Formula x586=x589.forSome(x587); + Formula x596=x0.eq(x0); + Formula x597=x1.eq(x1); + Formula x598=x2.eq(x2); + Formula x599=x3.eq(x3); + Formula x600=x4.eq(x4); + Formula x601=x5.eq(x5); + Formula x602=x6.eq(x6); + Formula x603=x7.eq(x7); + Formula x604=x8.eq(x8); + Formula x605=x9.eq(x9); + Formula x606=x10.eq(x10); + Formula x607=x11.eq(x11); + Formula x608=x12.eq(x12); + Formula x609=x13.eq(x13); + Formula x610=x14.eq(x14); + Formula x611=x15.eq(x15); + Formula x612=x16.eq(x16); + Formula x613=x17.eq(x17); + Formula x614=x18.eq(x18); + Formula x615=x19.eq(x19); + Formula x616=x20.eq(x20); + Formula x617=x21.eq(x21); + Formula x618=x22.eq(x22); + Formula x619=x23.eq(x23); + Formula x620=x24.eq(x24); + Formula x621=x25.eq(x25); + Formula x622=x26.eq(x26); + Formula x623=x27.eq(x27); + Formula x624=x28.eq(x28); + Formula x625=x29.eq(x29); + Formula x626=x30.eq(x30); + Formula x627=x31.eq(x31); + Formula x628=x32.eq(x32); + Formula x629=x33.eq(x33); + Formula x630=x34.eq(x34); + Formula x631=x35.eq(x35); + Formula x632=x36.eq(x36); + Formula x633=x37.eq(x37); + Formula x634=x38.eq(x38); + Formula x635=x39.eq(x39); + Formula x636=x40.eq(x40); + Formula x41=Formula.compose(FormulaOperator.AND, x42, x44, x52, x55, x62, x64, x72, x74, x79, x81, x88, x90, x95, x97, x104, x106, x114, x116, x123, x125, x145, x148, x156, x177, x180, x186, x189, x195, x198, x204, x207, x212, x214, x220, x223, x231, x233, x236, x240, x241, x244, x248, x274, x282, x288, x289, x291, x293, x295, x302, x484, x485, x486, x487, x490, x501, x582, x585, x586, x596, x597, x598, x599, x600, x601, x602, x603, x604, x605, x606, x607, x608, x609, x610, x611, x612, x613, x614, x615, x616, x617, x618, x619, x620, x621, x622, x623, x624, x625, x626, x627, x628, x629, x630, x631, x632, x633, x634, x635, x636); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x41,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCBadLivenessTraceRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCBadLivenessTraceRun.java new file mode 100644 index 0000000..4fc59dc --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCBadLivenessTraceRun.java @@ -0,0 +1,927 @@ +package kodkod.examples.models.algorithm.election; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; +@ExampleMetadata( + Name = "stable_ringlead", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 7, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 49, + Additions = 0, + Subtractions = 1, + Comparison = 26, + OrderedRelations = 3, + Constraints =32 +) + +public final class stable_ringleadCBadLivenessTraceRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Process"); + Relation x7 = Relation.unary("this/Val"); + Relation x8 = Relation.unary("this/State"); + Relation x9 = Relation.unary("po/Ord"); + Relation x10 = Relation.unary("vo/Ord"); + Relation x11 = Relation.unary("so/Ord"); + Relation x12 = Relation.nary("this/Process.rightNeighbor", 2); + Relation x13 = Relation.nary("this/Val.nextVal", 2); + Relation x14 = Relation.nary("this/State.val", 3); + Relation x15 = Relation.nary("this/State.running", 2); + Relation x16 = Relation.unary("po/Ord.First"); + Relation x17 = Relation.nary("po/Ord.Next", 2); + Relation x18 = Relation.unary("vo/Ord.First"); + Relation x19 = Relation.nary("vo/Ord.Next", 2); + Relation x20 = Relation.unary("so/Ord.First"); + Relation x21 = Relation.nary("so/Ord.Next", 2); + Relation x22 = Relation.unary(""); + Relation x23 = Relation.unary(""); + Relation x24 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Process$0", + "Process$1", "Process$2", "Process$3", "State$0", "State$1", "State$2", + "State$3", "State$4", "Val$0", "Val$1", "Val$2", "Val$3", + "po/Ord$0", "so/Ord$0", "vo/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Process$0")); + x6_upper.add(factory.tuple("Process$1")); + x6_upper.add(factory.tuple("Process$2")); + x6_upper.add(factory.tuple("Process$3")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Val$0")); + x7_upper.add(factory.tuple("Val$1")); + x7_upper.add(factory.tuple("Val$2")); + x7_upper.add(factory.tuple("Val$3")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + x8_upper.add(factory.tuple("State$3")); + x8_upper.add(factory.tuple("State$4")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("po/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("vo/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$3"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$3"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(3); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Val$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Val$3"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("Process$0")); + x16_upper.add(factory.tuple("Process$1")); + x16_upper.add(factory.tuple("Process$2")); + x16_upper.add(factory.tuple("Process$3")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$3"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$3"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$3"))); + x17_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$3"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Val$0")); + x18_upper.add(factory.tuple("Val$1")); + x18_upper.add(factory.tuple("Val$2")); + x18_upper.add(factory.tuple("Val$3")); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$3"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$3"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$3"))); + x19_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$3"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(1); + x20_upper.add(factory.tuple("State$0")); + x20_upper.add(factory.tuple("State$1")); + x20_upper.add(factory.tuple("State$2")); + x20_upper.add(factory.tuple("State$3")); + x20_upper.add(factory.tuple("State$4")); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("Process$0")); + x22_upper.add(factory.tuple("Process$1")); + x22_upper.add(factory.tuple("Process$2")); + x22_upper.add(factory.tuple("Process$3")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(1); + x23_upper.add(factory.tuple("Val$0")); + x23_upper.add(factory.tuple("Val$1")); + x23_upper.add(factory.tuple("Val$2")); + x23_upper.add(factory.tuple("Val$3")); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("State$0")); + x24_upper.add(factory.tuple("State$1")); + x24_upper.add(factory.tuple("State$2")); + x24_upper.add(factory.tuple("State$3")); + x24_upper.add(factory.tuple("State$4")); + bounds.bound(x24, x24_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x28=Variable.unary("CBadLivenessTrace_this"); + Decls x27=x28.oneOf(x6); + Expression x31=x28.join(x12); + Formula x30=x31.one(); + Formula x32=x31.in(x6); + Formula x29=x30.and(x32); + Formula x26=x29.forAll(x27); + Expression x34=x12.join(Expression.UNIV); + Formula x33=x34.in(x6); + Variable x38=Variable.unary("CBadLivenessTrace_this"); + Decls x37=x38.oneOf(x7); + Expression x41=x38.join(x13); + Formula x40=x41.one(); + Formula x42=x41.in(x7); + Formula x39=x40.and(x42); + Formula x36=x39.forAll(x37); + Expression x44=x13.join(Expression.UNIV); + Formula x43=x44.in(x7); + Variable x47=Variable.unary("CBadLivenessTrace_this"); + Decls x46=x47.oneOf(x8); + Expression x51=x47.join(x14); + Expression x52=x6.product(x7); + Formula x50=x51.in(x52); + Variable x55=Variable.unary(""); + Decls x54=x55.oneOf(x6); + Expression x58=x55.join(x51); + Formula x57=x58.one(); + Formula x59=x58.in(x7); + Formula x56=x57.and(x59); + Formula x53=x56.forAll(x54); + Formula x49=x50.and(x53); + Variable x62=Variable.unary(""); + Decls x61=x62.oneOf(x7); + Expression x64=x51.join(x62); + Formula x63=x64.in(x6); + Formula x60=x63.forAll(x61); + Formula x48=x49.and(x60); + Formula x45=x48.forAll(x46); + Expression x67=x14.join(Expression.UNIV); + Expression x66=x67.join(Expression.UNIV); + Formula x65=x66.in(x8); + Variable x70=Variable.unary("CBadLivenessTrace_this"); + Decls x69=x70.oneOf(x8); + Expression x72=x70.join(x15); + Formula x71=x72.in(x6); + Formula x68=x71.forAll(x69); + Expression x74=x15.join(Expression.UNIV); + Formula x73=x74.in(x8); + Expression x77=x9.product(x16); + Expression x76=x9.join(x77); + Formula x75=x76.in(x6); + Expression x80=x9.product(x17); + Expression x79=x9.join(x80); + Expression x81=x6.product(x6); + Formula x78=x79.in(x81); + Formula x82=x17.totalOrder(x6,x16,x22); + Expression x85=x10.product(x18); + Expression x84=x10.join(x85); + Formula x83=x84.in(x7); + Expression x88=x10.product(x19); + Expression x87=x10.join(x88); + Expression x89=x7.product(x7); + Formula x86=x87.in(x89); + Formula x90=x19.totalOrder(x7,x18,x23); + Expression x93=x11.product(x20); + Expression x92=x11.join(x93); + Formula x91=x92.in(x8); + Expression x96=x11.product(x21); + Expression x95=x11.join(x96); + Expression x97=x8.product(x8); + Formula x94=x95.in(x97); + Formula x98=x21.totalOrder(x8,x20,x24); + Variable x101=Variable.unary("ring_n"); + Decls x100=x101.oneOf(x6); + Expression x104=x101.join(x12); + Formula x103=x104.one(); + Expression x108=x12.closure(); + Expression x118=Expression.INTS.union(x5); + Expression x117=x118.union(x6); + Expression x116=x117.union(x7); + Expression x115=x116.union(x8); + Expression x114=x115.union(x9); + Expression x113=x114.union(x10); + Expression x112=x113.union(x11); + Expression x111=x112.product(Expression.UNIV); + Expression x109=Expression.IDEN.intersection(x111); + Expression x107=x108.union(x109); + Expression x106=x101.join(x107); + Formula x105=x6.in(x106); + Formula x102=x103.and(x105); + Formula x99=x102.forAll(x100); + Expression x124=x19.join(x7); + Expression x123=x7.difference(x124); + Expression x122=x123.product(x18); + Expression x121=x19.union(x122); + Formula x120=x121.eq(x13); + IntExpression x126=x7.count(); + IntExpression x127=x6.count(); + Formula x125=x126.eq(x127); + Expression x131=x21.join(x8); + Expression x130=x8.difference(x131); + Expression x129=x130.join(x15); + Formula x128=x129.no(); + Variable x134=Variable.unary("OneAtATimeTrans_tp"); + Expression x135=x8.difference(x130); + Decls x133=x134.oneOf(x135); + Variable x138=Variable.unary("OneAtATimeTrans_p"); + Decls x137=x138.oneOf(x6); + Expression x142=x134.join(x15); + Formula x141=x142.eq(x138); + Expression x146=x134.join(x21); + Expression x145=x146.join(x14); + Expression x144=x138.join(x145); + Expression x156=x12.transpose(); + Expression x155=x138.join(x156); + Expression x157=x134.join(x14); + Expression x154=x155.join(x157); + Expression x159=x134.join(x14); + Expression x158=x138.join(x159); + Formula x153=x154.eq(x158); + IntExpression x161=x7.count(); + Expression x160=x161.toExpression(); + Formula x164=x158.eq(x154); + IntExpression x165=IntConstant.constant(0); + Expression x169=x19.closure(); + Expression x168=x154.join(x169); + Formula x167=x158.in(x168); + Expression x174=x19.closure(); + Expression x173=x154.join(x174); + Expression x177=x19.transpose(); + Expression x176=x177.closure(); + Expression x175=x158.join(x176); + Expression x172=x173.intersection(x175); + Expression x171=x172.union(x158); + IntExpression x170=x171.count(); + Expression x183=x19.closure(); + Expression x182=x158.join(x183); + Expression x186=x19.transpose(); + Expression x185=x186.closure(); + Expression x184=x154.join(x185); + Expression x181=x182.intersection(x184); + Expression x180=x181.union(x158); + Expression x179=x7.difference(x180); + IntExpression x178=x179.count(); + IntExpression x166=x167.thenElse(x170,x178); + IntExpression x163=x164.thenElse(x165,x166); + Expression x162=x163.toExpression(); + Expression x152=x153.thenElse(x160,x162); + IntExpression x151=x152.sum(); + Expression x191=x134.join(x14); + Expression x190=x138.join(x191); + Expression x193=x138.join(x12); + Expression x194=x134.join(x14); + Expression x192=x193.join(x194); + Formula x189=x190.eq(x192); + IntExpression x196=x7.count(); + Expression x195=x196.toExpression(); + Formula x199=x192.eq(x190); + IntExpression x200=IntConstant.constant(0); + Expression x204=x19.closure(); + Expression x203=x190.join(x204); + Formula x202=x192.in(x203); + Expression x209=x19.closure(); + Expression x208=x190.join(x209); + Expression x212=x19.transpose(); + Expression x211=x212.closure(); + Expression x210=x192.join(x211); + Expression x207=x208.intersection(x210); + Expression x206=x207.union(x192); + IntExpression x205=x206.count(); + Expression x218=x19.closure(); + Expression x217=x192.join(x218); + Expression x221=x19.transpose(); + Expression x220=x221.closure(); + Expression x219=x190.join(x220); + Expression x216=x217.intersection(x219); + Expression x215=x216.union(x192); + Expression x214=x7.difference(x215); + IntExpression x213=x214.count(); + IntExpression x201=x202.thenElse(x205,x213); + IntExpression x198=x199.thenElse(x200,x201); + Expression x197=x198.toExpression(); + Expression x188=x189.thenElse(x195,x197); + IntExpression x187=x188.sum(); + Formula x150=x151.eq(x187); + IntExpression x223=x188.sum(); + IntExpression x224=x7.count(); + Formula x222=x223.eq(x224); + Formula x149=x150.and(x222); + IntExpression x226=x152.sum(); + IntExpression x227=x188.sum(); + Formula x225=x226.lt(x227); + Formula x148=x149.or(x225); + Expression x230=x134.join(x14); + Expression x229=x138.join(x230); + Expression x228=x229.join(x13); + Expression x147=x148.thenElse(x228,x229); + Formula x143=x144.eq(x147); + Formula x140=x141.and(x143); + Variable x233=Variable.unary("OneAtATimeTrans_other"); + Expression x234=x6.difference(x138); + Decls x232=x233.oneOf(x234); + Expression x237=x146.join(x14); + Expression x236=x233.join(x237); + Expression x239=x134.join(x14); + Expression x238=x233.join(x239); + Formula x235=x236.eq(x238); + Formula x231=x235.forAll(x232); + Formula x139=x140.and(x231); + Formula x136=x139.forSome(x137); + Formula x132=x136.forAll(x133); + Variable x243=Variable.unary("BadLivenessHelper_s"); + Expression x244=x8.difference(x130); + Decls x242=x243.oneOf(x244); + Expression x247=x243.join(x14); + Expression x248=x130.join(x14); + Formula x246=x247.eq(x248); + Expression x254=x21.closure(); + Expression x253=x243.join(x254); + Expression x252=x253.union(x243); + Expression x251=x252.difference(x130); + Expression x250=x251.join(x15); + Formula x249=x6.in(x250); + Formula x245=x246.and(x249); + Formula x241=x245.forSome(x242); + Variable x257=Variable.unary("BadLivenessHelper_s"); + Decls x256=x257.oneOf(x8); + Variable x264=Variable.unary("LeadersAtState_p"); + Decls x263=x264.oneOf(x6); + Expression x267=x257.join(x14); + Expression x266=x264.join(x267); + Formula x265=x266.eq(x18); + Expression x262=x265.comprehension(x263); + Formula x261=x262.one(); + Variable x270=Variable.unary("Legit_p"); + Decls x269=x270.oneOf(x6); + Expression x278=x12.transpose(); + Expression x277=x270.join(x278); + Expression x279=x257.join(x14); + Expression x276=x277.join(x279); + Expression x281=x257.join(x14); + Expression x280=x270.join(x281); + Formula x275=x276.eq(x280); + IntExpression x283=x7.count(); + Expression x282=x283.toExpression(); + Formula x286=x280.eq(x276); + IntExpression x287=IntConstant.constant(0); + Expression x291=x19.closure(); + Expression x290=x276.join(x291); + Formula x289=x280.in(x290); + Expression x296=x19.closure(); + Expression x295=x276.join(x296); + Expression x299=x19.transpose(); + Expression x298=x299.closure(); + Expression x297=x280.join(x298); + Expression x294=x295.intersection(x297); + Expression x293=x294.union(x280); + IntExpression x292=x293.count(); + Expression x305=x19.closure(); + Expression x304=x280.join(x305); + Expression x308=x19.transpose(); + Expression x307=x308.closure(); + Expression x306=x276.join(x307); + Expression x303=x304.intersection(x306); + Expression x302=x303.union(x280); + Expression x301=x7.difference(x302); + IntExpression x300=x301.count(); + IntExpression x288=x289.thenElse(x292,x300); + IntExpression x285=x286.thenElse(x287,x288); + Expression x284=x285.toExpression(); + Expression x274=x275.thenElse(x282,x284); + IntExpression x273=x274.sum(); + IntExpression x309=x7.count(); + Formula x272=x273.lt(x309); + Expression x315=x257.join(x14); + Expression x314=x270.join(x315); + Expression x317=x270.join(x12); + Expression x318=x257.join(x14); + Expression x316=x317.join(x318); + Formula x313=x314.eq(x316); + IntExpression x320=x7.count(); + Expression x319=x320.toExpression(); + Formula x323=x316.eq(x314); + IntExpression x324=IntConstant.constant(0); + Expression x328=x19.closure(); + Expression x327=x314.join(x328); + Formula x326=x316.in(x327); + Expression x333=x19.closure(); + Expression x332=x314.join(x333); + Expression x336=x19.transpose(); + Expression x335=x336.closure(); + Expression x334=x316.join(x335); + Expression x331=x332.intersection(x334); + Expression x330=x331.union(x316); + IntExpression x329=x330.count(); + Expression x342=x19.closure(); + Expression x341=x316.join(x342); + Expression x345=x19.transpose(); + Expression x344=x345.closure(); + Expression x343=x314.join(x344); + Expression x340=x341.intersection(x343); + Expression x339=x340.union(x316); + Expression x338=x7.difference(x339); + IntExpression x337=x338.count(); + IntExpression x325=x326.thenElse(x329,x337); + IntExpression x322=x323.thenElse(x324,x325); + Expression x321=x322.toExpression(); + Expression x312=x313.thenElse(x319,x321); + IntExpression x311=x312.sum(); + IntExpression x346=x7.count(); + Formula x310=x311.lt(x346); + Formula x271=x272.and(x310); + Formula x268=x271.forAll(x269); + Formula x260=x261.and(x268); + Variable x350=Variable.unary("Legit_p"); + Decls x349=x350.oneOf(x6); + Variable x352=Variable.unary("Legit_p'"); + Decls x351=x352.oneOf(x6); + Decls x348=x349.and(x351); + Expression x360=x12.transpose(); + Expression x359=x350.join(x360); + Expression x361=x257.join(x14); + Expression x358=x359.join(x361); + Expression x363=x257.join(x14); + Expression x362=x350.join(x363); + Formula x357=x358.eq(x362); + IntExpression x365=x7.count(); + Expression x364=x365.toExpression(); + Formula x368=x362.eq(x358); + IntExpression x369=IntConstant.constant(0); + Expression x373=x19.closure(); + Expression x372=x358.join(x373); + Formula x371=x362.in(x372); + Expression x378=x19.closure(); + Expression x377=x358.join(x378); + Expression x381=x19.transpose(); + Expression x380=x381.closure(); + Expression x379=x362.join(x380); + Expression x376=x377.intersection(x379); + Expression x375=x376.union(x362); + IntExpression x374=x375.count(); + Expression x387=x19.closure(); + Expression x386=x362.join(x387); + Expression x390=x19.transpose(); + Expression x389=x390.closure(); + Expression x388=x358.join(x389); + Expression x385=x386.intersection(x388); + Expression x384=x385.union(x362); + Expression x383=x7.difference(x384); + IntExpression x382=x383.count(); + IntExpression x370=x371.thenElse(x374,x382); + IntExpression x367=x368.thenElse(x369,x370); + Expression x366=x367.toExpression(); + Expression x356=x357.thenElse(x364,x366); + IntExpression x355=x356.sum(); + Expression x396=x12.transpose(); + Expression x395=x352.join(x396); + Expression x397=x257.join(x14); + Expression x394=x395.join(x397); + Expression x399=x257.join(x14); + Expression x398=x352.join(x399); + Formula x393=x394.eq(x398); + IntExpression x401=x7.count(); + Expression x400=x401.toExpression(); + Formula x404=x398.eq(x394); + IntExpression x405=IntConstant.constant(0); + Expression x409=x19.closure(); + Expression x408=x394.join(x409); + Formula x407=x398.in(x408); + Expression x414=x19.closure(); + Expression x413=x394.join(x414); + Expression x417=x19.transpose(); + Expression x416=x417.closure(); + Expression x415=x398.join(x416); + Expression x412=x413.intersection(x415); + Expression x411=x412.union(x398); + IntExpression x410=x411.count(); + Expression x423=x19.closure(); + Expression x422=x398.join(x423); + Expression x426=x19.transpose(); + Expression x425=x426.closure(); + Expression x424=x394.join(x425); + Expression x421=x422.intersection(x424); + Expression x420=x421.union(x398); + Expression x419=x7.difference(x420); + IntExpression x418=x419.count(); + IntExpression x406=x407.thenElse(x410,x418); + IntExpression x403=x404.thenElse(x405,x406); + Expression x402=x403.toExpression(); + Expression x392=x393.thenElse(x400,x402); + IntExpression x391=x392.sum(); + Formula x354=x355.eq(x391); + Expression x432=x257.join(x14); + Expression x431=x350.join(x432); + Expression x434=x350.join(x12); + Expression x435=x257.join(x14); + Expression x433=x434.join(x435); + Formula x430=x431.eq(x433); + IntExpression x437=x7.count(); + Expression x436=x437.toExpression(); + Formula x440=x433.eq(x431); + IntExpression x441=IntConstant.constant(0); + Expression x445=x19.closure(); + Expression x444=x431.join(x445); + Formula x443=x433.in(x444); + Expression x450=x19.closure(); + Expression x449=x431.join(x450); + Expression x453=x19.transpose(); + Expression x452=x453.closure(); + Expression x451=x433.join(x452); + Expression x448=x449.intersection(x451); + Expression x447=x448.union(x433); + IntExpression x446=x447.count(); + Expression x459=x19.closure(); + Expression x458=x433.join(x459); + Expression x462=x19.transpose(); + Expression x461=x462.closure(); + Expression x460=x431.join(x461); + Expression x457=x458.intersection(x460); + Expression x456=x457.union(x433); + Expression x455=x7.difference(x456); + IntExpression x454=x455.count(); + IntExpression x442=x443.thenElse(x446,x454); + IntExpression x439=x440.thenElse(x441,x442); + Expression x438=x439.toExpression(); + Expression x429=x430.thenElse(x436,x438); + IntExpression x428=x429.sum(); + Expression x467=x257.join(x14); + Expression x466=x352.join(x467); + Expression x469=x352.join(x12); + Expression x470=x257.join(x14); + Expression x468=x469.join(x470); + Formula x465=x466.eq(x468); + IntExpression x472=x7.count(); + Expression x471=x472.toExpression(); + Formula x475=x468.eq(x466); + IntExpression x476=IntConstant.constant(0); + Expression x480=x19.closure(); + Expression x479=x466.join(x480); + Formula x478=x468.in(x479); + Expression x485=x19.closure(); + Expression x484=x466.join(x485); + Expression x488=x19.transpose(); + Expression x487=x488.closure(); + Expression x486=x468.join(x487); + Expression x483=x484.intersection(x486); + Expression x482=x483.union(x468); + IntExpression x481=x482.count(); + Expression x494=x19.closure(); + Expression x493=x468.join(x494); + Expression x497=x19.transpose(); + Expression x496=x497.closure(); + Expression x495=x466.join(x496); + Expression x492=x493.intersection(x495); + Expression x491=x492.union(x468); + Expression x490=x7.difference(x491); + IntExpression x489=x490.count(); + IntExpression x477=x478.thenElse(x481,x489); + IntExpression x474=x475.thenElse(x476,x477); + Expression x473=x474.toExpression(); + Expression x464=x465.thenElse(x471,x473); + IntExpression x463=x464.sum(); + Formula x427=x428.eq(x463); + Formula x353=x354.and(x427); + Formula x347=x353.forAll(x348); + Formula x259=x260.and(x347); + Formula x258=x259.not(); + Formula x255=x258.forAll(x256); + Formula x240=x241.and(x255); + Formula x498=x0.eq(x0); + Formula x499=x1.eq(x1); + Formula x500=x2.eq(x2); + Formula x501=x3.eq(x3); + Formula x502=x4.eq(x4); + Formula x503=x5.eq(x5); + Formula x504=x6.eq(x6); + Formula x505=x7.eq(x7); + Formula x506=x8.eq(x8); + Formula x507=x9.eq(x9); + Formula x508=x10.eq(x10); + Formula x509=x11.eq(x11); + Formula x510=x12.eq(x12); + Formula x511=x13.eq(x13); + Formula x512=x14.eq(x14); + Formula x513=x15.eq(x15); + Formula x514=x16.eq(x16); + Formula x515=x17.eq(x17); + Formula x516=x18.eq(x18); + Formula x517=x19.eq(x19); + Formula x518=x20.eq(x20); + Formula x519=x21.eq(x21); + Formula x520=x22.eq(x22); + Formula x521=x23.eq(x23); + Formula x522=x24.eq(x24); + Formula x25=Formula.compose(FormulaOperator.AND, x26, x33, x36, x43, x45, x65, x68, x73, x75, x78, x82, x83, x86, x90, x91, x94, x98, x99, x120, x125, x128, x132, x240, x498, x499, x500, x501, x502, x503, x504, x505, x506, x507, x508, x509, x510, x511, x512, x513, x514, x515, x516, x517, x518, x519, x520, x521, x522); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x25,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCMustConvergeCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCMustConvergeCheck.java new file mode 100644 index 0000000..6ae2db4 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCMustConvergeCheck.java @@ -0,0 +1,841 @@ +package kodkod.examples.models.algorithm.election; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; +@ExampleMetadata( + Name = "stable_ringlead", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 7, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 49, + Additions = 0, + Subtractions = 1, + Comparison = 26, + OrderedRelations = 3, + Constraints =32 +) + + +public final class stable_ringleadCMustConvergeCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Process"); + Relation x7 = Relation.unary("this/Val"); + Relation x8 = Relation.unary("this/State"); + Relation x9 = Relation.unary("po/Ord"); + Relation x10 = Relation.unary("vo/Ord"); + Relation x11 = Relation.unary("so/Ord"); + Relation x12 = Relation.nary("this/Process.rightNeighbor", 2); + Relation x13 = Relation.nary("this/Val.nextVal", 2); + Relation x14 = Relation.nary("this/State.val", 3); + Relation x15 = Relation.nary("this/State.running", 2); + Relation x16 = Relation.unary("po/Ord.First"); + Relation x17 = Relation.nary("po/Ord.Next", 2); + Relation x18 = Relation.unary("vo/Ord.First"); + Relation x19 = Relation.nary("vo/Ord.Next", 2); + Relation x20 = Relation.unary("so/Ord.First"); + Relation x21 = Relation.nary("so/Ord.Next", 2); + Relation x22 = Relation.unary(""); + Relation x23 = Relation.unary(""); + Relation x24 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Process$0", + "Process$1", "Process$2", "State$0", "State$1", "State$2", "State$3", + "Val$0", "Val$1", "Val$2", "po/Ord$0", "so/Ord$0", "vo/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Process$0")); + x6_upper.add(factory.tuple("Process$1")); + x6_upper.add(factory.tuple("Process$2")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Val$0")); + x7_upper.add(factory.tuple("Val$1")); + x7_upper.add(factory.tuple("Val$2")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + x8_upper.add(factory.tuple("State$3")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("po/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("vo/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(3); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("Process$0")); + x16_upper.add(factory.tuple("Process$1")); + x16_upper.add(factory.tuple("Process$2")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Val$0")); + x18_upper.add(factory.tuple("Val$1")); + x18_upper.add(factory.tuple("Val$2")); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(1); + x20_upper.add(factory.tuple("State$0")); + x20_upper.add(factory.tuple("State$1")); + x20_upper.add(factory.tuple("State$2")); + x20_upper.add(factory.tuple("State$3")); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("Process$0")); + x22_upper.add(factory.tuple("Process$1")); + x22_upper.add(factory.tuple("Process$2")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(1); + x23_upper.add(factory.tuple("Val$0")); + x23_upper.add(factory.tuple("Val$1")); + x23_upper.add(factory.tuple("Val$2")); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("State$0")); + x24_upper.add(factory.tuple("State$1")); + x24_upper.add(factory.tuple("State$2")); + x24_upper.add(factory.tuple("State$3")); + bounds.bound(x24, x24_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x28=Variable.unary("CMustConverge_this"); + Decls x27=x28.oneOf(x6); + Expression x31=x28.join(x12); + Formula x30=x31.one(); + Formula x32=x31.in(x6); + Formula x29=x30.and(x32); + Formula x26=x29.forAll(x27); + Expression x34=x12.join(Expression.UNIV); + Formula x33=x34.in(x6); + Variable x38=Variable.unary("CMustConverge_this"); + Decls x37=x38.oneOf(x7); + Expression x41=x38.join(x13); + Formula x40=x41.one(); + Formula x42=x41.in(x7); + Formula x39=x40.and(x42); + Formula x36=x39.forAll(x37); + Expression x44=x13.join(Expression.UNIV); + Formula x43=x44.in(x7); + Variable x47=Variable.unary("CMustConverge_this"); + Decls x46=x47.oneOf(x8); + Expression x51=x47.join(x14); + Expression x52=x6.product(x7); + Formula x50=x51.in(x52); + Variable x55=Variable.unary(""); + Decls x54=x55.oneOf(x6); + Expression x58=x55.join(x51); + Formula x57=x58.one(); + Formula x59=x58.in(x7); + Formula x56=x57.and(x59); + Formula x53=x56.forAll(x54); + Formula x49=x50.and(x53); + Variable x62=Variable.unary(""); + Decls x61=x62.oneOf(x7); + Expression x64=x51.join(x62); + Formula x63=x64.in(x6); + Formula x60=x63.forAll(x61); + Formula x48=x49.and(x60); + Formula x45=x48.forAll(x46); + Expression x67=x14.join(Expression.UNIV); + Expression x66=x67.join(Expression.UNIV); + Formula x65=x66.in(x8); + Variable x70=Variable.unary("CMustConverge_this"); + Decls x69=x70.oneOf(x8); + Expression x72=x70.join(x15); + Formula x71=x72.in(x6); + Formula x68=x71.forAll(x69); + Expression x74=x15.join(Expression.UNIV); + Formula x73=x74.in(x8); + Expression x77=x9.product(x16); + Expression x76=x9.join(x77); + Formula x75=x76.in(x6); + Expression x80=x9.product(x17); + Expression x79=x9.join(x80); + Expression x81=x6.product(x6); + Formula x78=x79.in(x81); + Formula x82=x17.totalOrder(x6,x16,x22); + Expression x85=x10.product(x18); + Expression x84=x10.join(x85); + Formula x83=x84.in(x7); + Expression x88=x10.product(x19); + Expression x87=x10.join(x88); + Expression x89=x7.product(x7); + Formula x86=x87.in(x89); + Formula x90=x19.totalOrder(x7,x18,x23); + Expression x93=x11.product(x20); + Expression x92=x11.join(x93); + Formula x91=x92.in(x8); + Expression x96=x11.product(x21); + Expression x95=x11.join(x96); + Expression x97=x8.product(x8); + Formula x94=x95.in(x97); + Formula x98=x21.totalOrder(x8,x20,x24); + Variable x101=Variable.unary("ring_n"); + Decls x100=x101.oneOf(x6); + Expression x104=x101.join(x12); + Formula x103=x104.one(); + Expression x108=x12.closure(); + Expression x118=Expression.INTS.union(x5); + Expression x117=x118.union(x6); + Expression x116=x117.union(x7); + Expression x115=x116.union(x8); + Expression x114=x115.union(x9); + Expression x113=x114.union(x10); + Expression x112=x113.union(x11); + Expression x111=x112.product(Expression.UNIV); + Expression x109=Expression.IDEN.intersection(x111); + Expression x107=x108.union(x109); + Expression x106=x101.join(x107); + Formula x105=x6.in(x106); + Formula x102=x103.and(x105); + Formula x99=x102.forAll(x100); + Expression x124=x19.join(x7); + Expression x123=x7.difference(x124); + Expression x122=x123.product(x18); + Expression x121=x19.union(x122); + Formula x120=x121.eq(x13); + IntExpression x126=x7.count(); + IntExpression x127=x6.count(); + Formula x125=x126.eq(x127); + Expression x131=x21.join(x8); + Expression x130=x8.difference(x131); + Expression x129=x130.join(x15); + Formula x128=x129.no(); + Variable x138=Variable.unary("OneAtATimeTrans_tp"); + Expression x139=x8.difference(x130); + Decls x137=x138.oneOf(x139); + Variable x142=Variable.unary("OneAtATimeTrans_p"); + Decls x141=x142.oneOf(x6); + Expression x146=x138.join(x15); + Formula x145=x146.eq(x142); + Expression x150=x138.join(x21); + Expression x149=x150.join(x14); + Expression x148=x142.join(x149); + Expression x160=x12.transpose(); + Expression x159=x142.join(x160); + Expression x161=x138.join(x14); + Expression x158=x159.join(x161); + Expression x163=x138.join(x14); + Expression x162=x142.join(x163); + Formula x157=x158.eq(x162); + IntExpression x165=x7.count(); + Expression x164=x165.toExpression(); + Formula x168=x162.eq(x158); + IntExpression x169=IntConstant.constant(0); + Expression x173=x19.closure(); + Expression x172=x158.join(x173); + Formula x171=x162.in(x172); + Expression x178=x19.closure(); + Expression x177=x158.join(x178); + Expression x181=x19.transpose(); + Expression x180=x181.closure(); + Expression x179=x162.join(x180); + Expression x176=x177.intersection(x179); + Expression x175=x176.union(x162); + IntExpression x174=x175.count(); + Expression x187=x19.closure(); + Expression x186=x162.join(x187); + Expression x190=x19.transpose(); + Expression x189=x190.closure(); + Expression x188=x158.join(x189); + Expression x185=x186.intersection(x188); + Expression x184=x185.union(x162); + Expression x183=x7.difference(x184); + IntExpression x182=x183.count(); + IntExpression x170=x171.thenElse(x174,x182); + IntExpression x167=x168.thenElse(x169,x170); + Expression x166=x167.toExpression(); + Expression x156=x157.thenElse(x164,x166); + IntExpression x155=x156.sum(); + Expression x195=x138.join(x14); + Expression x194=x142.join(x195); + Expression x197=x142.join(x12); + Expression x198=x138.join(x14); + Expression x196=x197.join(x198); + Formula x193=x194.eq(x196); + IntExpression x200=x7.count(); + Expression x199=x200.toExpression(); + Formula x203=x196.eq(x194); + IntExpression x204=IntConstant.constant(0); + Expression x208=x19.closure(); + Expression x207=x194.join(x208); + Formula x206=x196.in(x207); + Expression x213=x19.closure(); + Expression x212=x194.join(x213); + Expression x216=x19.transpose(); + Expression x215=x216.closure(); + Expression x214=x196.join(x215); + Expression x211=x212.intersection(x214); + Expression x210=x211.union(x196); + IntExpression x209=x210.count(); + Expression x222=x19.closure(); + Expression x221=x196.join(x222); + Expression x225=x19.transpose(); + Expression x224=x225.closure(); + Expression x223=x194.join(x224); + Expression x220=x221.intersection(x223); + Expression x219=x220.union(x196); + Expression x218=x7.difference(x219); + IntExpression x217=x218.count(); + IntExpression x205=x206.thenElse(x209,x217); + IntExpression x202=x203.thenElse(x204,x205); + Expression x201=x202.toExpression(); + Expression x192=x193.thenElse(x199,x201); + IntExpression x191=x192.sum(); + Formula x154=x155.eq(x191); + IntExpression x227=x192.sum(); + IntExpression x228=x7.count(); + Formula x226=x227.eq(x228); + Formula x153=x154.and(x226); + IntExpression x230=x156.sum(); + IntExpression x231=x192.sum(); + Formula x229=x230.lt(x231); + Formula x152=x153.or(x229); + Expression x234=x138.join(x14); + Expression x233=x142.join(x234); + Expression x232=x233.join(x13); + Expression x151=x152.thenElse(x232,x233); + Formula x147=x148.eq(x151); + Formula x144=x145.and(x147); + Variable x237=Variable.unary("OneAtATimeTrans_other"); + Expression x238=x6.difference(x142); + Decls x236=x237.oneOf(x238); + Expression x241=x150.join(x14); + Expression x240=x237.join(x241); + Expression x243=x138.join(x14); + Expression x242=x237.join(x243); + Formula x239=x240.eq(x242); + Formula x235=x239.forAll(x236); + Formula x143=x144.and(x235); + Formula x140=x143.forSome(x141); + Formula x136=x140.forAll(x137); + Variable x247=Variable.unary("OnlyFairLoops_s"); + Decls x246=x247.oneOf(x8); + Variable x249=Variable.unary("OnlyFairLoops_s'"); + Decls x248=x249.oneOf(x8); + Decls x245=x246.and(x248); + Expression x255=x21.closure(); + Expression x254=x247.join(x255); + Formula x253=x249.in(x254); + Expression x257=x249.join(x14); + Expression x258=x247.join(x14); + Formula x256=x257.eq(x258); + Formula x252=x253.and(x256); + Formula x251=x252.not(); + Expression x265=x21.closure(); + Expression x264=x247.join(x265); + Expression x268=x21.transpose(); + Expression x267=x268.closure(); + Expression x266=x249.join(x267); + Expression x263=x264.intersection(x266); + Expression x262=x263.union(x247); + Expression x261=x262.union(x249); + Expression x260=x261.join(x15); + Formula x259=x6.in(x260); + Formula x250=x251.or(x259); + Formula x244=x250.forAll(x245); + Formula x135=x136.and(x244); + Formula x134=x135.not(); + Variable x271=Variable.unary("CMustConverge_s"); + Decls x270=x271.oneOf(x8); + Variable x277=Variable.unary("LeadersAtState_p"); + Decls x276=x277.oneOf(x6); + Expression x280=x271.join(x14); + Expression x279=x277.join(x280); + Formula x278=x279.eq(x18); + Expression x275=x278.comprehension(x276); + Formula x274=x275.one(); + Variable x283=Variable.unary("Legit_p"); + Decls x282=x283.oneOf(x6); + Expression x291=x12.transpose(); + Expression x290=x283.join(x291); + Expression x292=x271.join(x14); + Expression x289=x290.join(x292); + Expression x294=x271.join(x14); + Expression x293=x283.join(x294); + Formula x288=x289.eq(x293); + IntExpression x296=x7.count(); + Expression x295=x296.toExpression(); + Formula x299=x293.eq(x289); + IntExpression x300=IntConstant.constant(0); + Expression x304=x19.closure(); + Expression x303=x289.join(x304); + Formula x302=x293.in(x303); + Expression x309=x19.closure(); + Expression x308=x289.join(x309); + Expression x312=x19.transpose(); + Expression x311=x312.closure(); + Expression x310=x293.join(x311); + Expression x307=x308.intersection(x310); + Expression x306=x307.union(x293); + IntExpression x305=x306.count(); + Expression x318=x19.closure(); + Expression x317=x293.join(x318); + Expression x321=x19.transpose(); + Expression x320=x321.closure(); + Expression x319=x289.join(x320); + Expression x316=x317.intersection(x319); + Expression x315=x316.union(x293); + Expression x314=x7.difference(x315); + IntExpression x313=x314.count(); + IntExpression x301=x302.thenElse(x305,x313); + IntExpression x298=x299.thenElse(x300,x301); + Expression x297=x298.toExpression(); + Expression x287=x288.thenElse(x295,x297); + IntExpression x286=x287.sum(); + IntExpression x322=x7.count(); + Formula x285=x286.lt(x322); + Expression x328=x271.join(x14); + Expression x327=x283.join(x328); + Expression x330=x283.join(x12); + Expression x331=x271.join(x14); + Expression x329=x330.join(x331); + Formula x326=x327.eq(x329); + IntExpression x333=x7.count(); + Expression x332=x333.toExpression(); + Formula x336=x329.eq(x327); + IntExpression x337=IntConstant.constant(0); + Expression x341=x19.closure(); + Expression x340=x327.join(x341); + Formula x339=x329.in(x340); + Expression x346=x19.closure(); + Expression x345=x327.join(x346); + Expression x349=x19.transpose(); + Expression x348=x349.closure(); + Expression x347=x329.join(x348); + Expression x344=x345.intersection(x347); + Expression x343=x344.union(x329); + IntExpression x342=x343.count(); + Expression x355=x19.closure(); + Expression x354=x329.join(x355); + Expression x358=x19.transpose(); + Expression x357=x358.closure(); + Expression x356=x327.join(x357); + Expression x353=x354.intersection(x356); + Expression x352=x353.union(x329); + Expression x351=x7.difference(x352); + IntExpression x350=x351.count(); + IntExpression x338=x339.thenElse(x342,x350); + IntExpression x335=x336.thenElse(x337,x338); + Expression x334=x335.toExpression(); + Expression x325=x326.thenElse(x332,x334); + IntExpression x324=x325.sum(); + IntExpression x359=x7.count(); + Formula x323=x324.lt(x359); + Formula x284=x285.and(x323); + Formula x281=x284.forAll(x282); + Formula x273=x274.and(x281); + Variable x363=Variable.unary("Legit_p"); + Decls x362=x363.oneOf(x6); + Variable x365=Variable.unary("Legit_p'"); + Decls x364=x365.oneOf(x6); + Decls x361=x362.and(x364); + Expression x373=x12.transpose(); + Expression x372=x363.join(x373); + Expression x374=x271.join(x14); + Expression x371=x372.join(x374); + Expression x376=x271.join(x14); + Expression x375=x363.join(x376); + Formula x370=x371.eq(x375); + IntExpression x378=x7.count(); + Expression x377=x378.toExpression(); + Formula x381=x375.eq(x371); + IntExpression x382=IntConstant.constant(0); + Expression x386=x19.closure(); + Expression x385=x371.join(x386); + Formula x384=x375.in(x385); + Expression x391=x19.closure(); + Expression x390=x371.join(x391); + Expression x394=x19.transpose(); + Expression x393=x394.closure(); + Expression x392=x375.join(x393); + Expression x389=x390.intersection(x392); + Expression x388=x389.union(x375); + IntExpression x387=x388.count(); + Expression x400=x19.closure(); + Expression x399=x375.join(x400); + Expression x403=x19.transpose(); + Expression x402=x403.closure(); + Expression x401=x371.join(x402); + Expression x398=x399.intersection(x401); + Expression x397=x398.union(x375); + Expression x396=x7.difference(x397); + IntExpression x395=x396.count(); + IntExpression x383=x384.thenElse(x387,x395); + IntExpression x380=x381.thenElse(x382,x383); + Expression x379=x380.toExpression(); + Expression x369=x370.thenElse(x377,x379); + IntExpression x368=x369.sum(); + Expression x409=x12.transpose(); + Expression x408=x365.join(x409); + Expression x410=x271.join(x14); + Expression x407=x408.join(x410); + Expression x412=x271.join(x14); + Expression x411=x365.join(x412); + Formula x406=x407.eq(x411); + IntExpression x414=x7.count(); + Expression x413=x414.toExpression(); + Formula x417=x411.eq(x407); + IntExpression x418=IntConstant.constant(0); + Expression x422=x19.closure(); + Expression x421=x407.join(x422); + Formula x420=x411.in(x421); + Expression x427=x19.closure(); + Expression x426=x407.join(x427); + Expression x430=x19.transpose(); + Expression x429=x430.closure(); + Expression x428=x411.join(x429); + Expression x425=x426.intersection(x428); + Expression x424=x425.union(x411); + IntExpression x423=x424.count(); + Expression x436=x19.closure(); + Expression x435=x411.join(x436); + Expression x439=x19.transpose(); + Expression x438=x439.closure(); + Expression x437=x407.join(x438); + Expression x434=x435.intersection(x437); + Expression x433=x434.union(x411); + Expression x432=x7.difference(x433); + IntExpression x431=x432.count(); + IntExpression x419=x420.thenElse(x423,x431); + IntExpression x416=x417.thenElse(x418,x419); + Expression x415=x416.toExpression(); + Expression x405=x406.thenElse(x413,x415); + IntExpression x404=x405.sum(); + Formula x367=x368.eq(x404); + Expression x445=x271.join(x14); + Expression x444=x363.join(x445); + Expression x447=x363.join(x12); + Expression x448=x271.join(x14); + Expression x446=x447.join(x448); + Formula x443=x444.eq(x446); + IntExpression x450=x7.count(); + Expression x449=x450.toExpression(); + Formula x453=x446.eq(x444); + IntExpression x454=IntConstant.constant(0); + Expression x458=x19.closure(); + Expression x457=x444.join(x458); + Formula x456=x446.in(x457); + Expression x463=x19.closure(); + Expression x462=x444.join(x463); + Expression x466=x19.transpose(); + Expression x465=x466.closure(); + Expression x464=x446.join(x465); + Expression x461=x462.intersection(x464); + Expression x460=x461.union(x446); + IntExpression x459=x460.count(); + Expression x472=x19.closure(); + Expression x471=x446.join(x472); + Expression x475=x19.transpose(); + Expression x474=x475.closure(); + Expression x473=x444.join(x474); + Expression x470=x471.intersection(x473); + Expression x469=x470.union(x446); + Expression x468=x7.difference(x469); + IntExpression x467=x468.count(); + IntExpression x455=x456.thenElse(x459,x467); + IntExpression x452=x453.thenElse(x454,x455); + Expression x451=x452.toExpression(); + Expression x442=x443.thenElse(x449,x451); + IntExpression x441=x442.sum(); + Expression x480=x271.join(x14); + Expression x479=x365.join(x480); + Expression x482=x365.join(x12); + Expression x483=x271.join(x14); + Expression x481=x482.join(x483); + Formula x478=x479.eq(x481); + IntExpression x485=x7.count(); + Expression x484=x485.toExpression(); + Formula x488=x481.eq(x479); + IntExpression x489=IntConstant.constant(0); + Expression x493=x19.closure(); + Expression x492=x479.join(x493); + Formula x491=x481.in(x492); + Expression x498=x19.closure(); + Expression x497=x479.join(x498); + Expression x501=x19.transpose(); + Expression x500=x501.closure(); + Expression x499=x481.join(x500); + Expression x496=x497.intersection(x499); + Expression x495=x496.union(x481); + IntExpression x494=x495.count(); + Expression x507=x19.closure(); + Expression x506=x481.join(x507); + Expression x510=x19.transpose(); + Expression x509=x510.closure(); + Expression x508=x479.join(x509); + Expression x505=x506.intersection(x508); + Expression x504=x505.union(x481); + Expression x503=x7.difference(x504); + IntExpression x502=x503.count(); + IntExpression x490=x491.thenElse(x494,x502); + IntExpression x487=x488.thenElse(x489,x490); + Expression x486=x487.toExpression(); + Expression x477=x478.thenElse(x484,x486); + IntExpression x476=x477.sum(); + Formula x440=x441.eq(x476); + Formula x366=x367.and(x440); + Formula x360=x366.forAll(x361); + Formula x272=x273.and(x360); + Formula x269=x272.forSome(x270); + Formula x133=x134.or(x269); + Formula x132=x133.not(); + Formula x511=x0.eq(x0); + Formula x512=x1.eq(x1); + Formula x513=x2.eq(x2); + Formula x514=x3.eq(x3); + Formula x515=x4.eq(x4); + Formula x516=x5.eq(x5); + Formula x517=x6.eq(x6); + Formula x518=x7.eq(x7); + Formula x519=x8.eq(x8); + Formula x520=x9.eq(x9); + Formula x521=x10.eq(x10); + Formula x522=x11.eq(x11); + Formula x523=x12.eq(x12); + Formula x524=x13.eq(x13); + Formula x525=x14.eq(x14); + Formula x526=x15.eq(x15); + Formula x527=x16.eq(x16); + Formula x528=x17.eq(x17); + Formula x529=x18.eq(x18); + Formula x530=x19.eq(x19); + Formula x531=x20.eq(x20); + Formula x532=x21.eq(x21); + Formula x533=x22.eq(x22); + Formula x534=x23.eq(x23); + Formula x535=x24.eq(x24); + Formula x25=Formula.compose(FormulaOperator.AND, x26, x33, x36, x43, x45, x65, x68, x73, x75, x78, x82, x83, x86, x90, x91, x94, x98, x99, x120, x125, x128, x132, x511, x512, x513, x514, x515, x516, x517, x518, x519, x520, x521, x522, x523, x524, x525, x526, x527, x528, x529, x530, x531, x532, x533, x534, x535); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x25,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCTraceWithoutLoopRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCTraceWithoutLoopRun.java new file mode 100644 index 0000000..7d6d08c --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCTraceWithoutLoopRun.java @@ -0,0 +1,1052 @@ +package kodkod.examples.models.algorithm.election; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "stable_ringlead", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 7, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 49, + Additions = 0, + Subtractions = 1, + Comparison = 26, + OrderedRelations = 3, + Constraints =32 +) + +public final class stable_ringleadCTraceWithoutLoopRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Process"); + Relation x7 = Relation.unary("this/Val"); + Relation x8 = Relation.unary("this/State"); + Relation x9 = Relation.unary("po/Ord"); + Relation x10 = Relation.unary("vo/Ord"); + Relation x11 = Relation.unary("so/Ord"); + Relation x12 = Relation.nary("this/Process.rightNeighbor", 2); + Relation x13 = Relation.nary("this/Val.nextVal", 2); + Relation x14 = Relation.nary("this/State.val", 3); + Relation x15 = Relation.nary("this/State.running", 2); + Relation x16 = Relation.unary("po/Ord.First"); + Relation x17 = Relation.nary("po/Ord.Next", 2); + Relation x18 = Relation.unary("vo/Ord.First"); + Relation x19 = Relation.nary("vo/Ord.Next", 2); + Relation x20 = Relation.unary("so/Ord.First"); + Relation x21 = Relation.nary("so/Ord.Next", 2); + Relation x22 = Relation.unary(""); + Relation x23 = Relation.unary(""); + Relation x24 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Process$0", + "Process$1", "Process$2", "State$0", "State$1", "State$2", "State$3", + "Val$0", "Val$1", "Val$2", "po/Ord$0", "so/Ord$0", "vo/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Process$0")); + x6_upper.add(factory.tuple("Process$1")); + x6_upper.add(factory.tuple("Process$2")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Val$0")); + x7_upper.add(factory.tuple("Val$1")); + x7_upper.add(factory.tuple("Val$2")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + x8_upper.add(factory.tuple("State$3")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("po/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("vo/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(3); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("Process$0")); + x16_upper.add(factory.tuple("Process$1")); + x16_upper.add(factory.tuple("Process$2")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Val$0")); + x18_upper.add(factory.tuple("Val$1")); + x18_upper.add(factory.tuple("Val$2")); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(1); + x20_upper.add(factory.tuple("State$0")); + x20_upper.add(factory.tuple("State$1")); + x20_upper.add(factory.tuple("State$2")); + x20_upper.add(factory.tuple("State$3")); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("Process$0")); + x22_upper.add(factory.tuple("Process$1")); + x22_upper.add(factory.tuple("Process$2")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(1); + x23_upper.add(factory.tuple("Val$0")); + x23_upper.add(factory.tuple("Val$1")); + x23_upper.add(factory.tuple("Val$2")); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("State$0")); + x24_upper.add(factory.tuple("State$1")); + x24_upper.add(factory.tuple("State$2")); + x24_upper.add(factory.tuple("State$3")); + bounds.bound(x24, x24_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x28=Variable.unary("ConvergingRun_this"); + Decls x27=x28.oneOf(x6); + Expression x31=x28.join(x12); + Formula x30=x31.one(); + Formula x32=x31.in(x6); + Formula x29=x30.and(x32); + Formula x26=x29.forAll(x27); + Expression x34=x12.join(Expression.UNIV); + Formula x33=x34.in(x6); + Variable x38=Variable.unary("ConvergingRun_this"); + Decls x37=x38.oneOf(x7); + Expression x41=x38.join(x13); + Formula x40=x41.one(); + Formula x42=x41.in(x7); + Formula x39=x40.and(x42); + Formula x36=x39.forAll(x37); + Expression x44=x13.join(Expression.UNIV); + Formula x43=x44.in(x7); + Variable x47=Variable.unary("ConvergingRun_this"); + Decls x46=x47.oneOf(x8); + Expression x51=x47.join(x14); + Expression x52=x6.product(x7); + Formula x50=x51.in(x52); + Variable x55=Variable.unary(""); + Decls x54=x55.oneOf(x6); + Expression x58=x55.join(x51); + Formula x57=x58.one(); + Formula x59=x58.in(x7); + Formula x56=x57.and(x59); + Formula x53=x56.forAll(x54); + Formula x49=x50.and(x53); + Variable x62=Variable.unary(""); + Decls x61=x62.oneOf(x7); + Expression x64=x51.join(x62); + Formula x63=x64.in(x6); + Formula x60=x63.forAll(x61); + Formula x48=x49.and(x60); + Formula x45=x48.forAll(x46); + Expression x67=x14.join(Expression.UNIV); + Expression x66=x67.join(Expression.UNIV); + Formula x65=x66.in(x8); + Variable x70=Variable.unary("ConvergingRun_this"); + Decls x69=x70.oneOf(x8); + Expression x72=x70.join(x15); + Formula x71=x72.in(x6); + Formula x68=x71.forAll(x69); + Expression x74=x15.join(Expression.UNIV); + Formula x73=x74.in(x8); + Expression x77=x9.product(x16); + Expression x76=x9.join(x77); + Formula x75=x76.in(x6); + Expression x80=x9.product(x17); + Expression x79=x9.join(x80); + Expression x81=x6.product(x6); + Formula x78=x79.in(x81); + Formula x82=x17.totalOrder(x6,x16,x22); + Expression x85=x10.product(x18); + Expression x84=x10.join(x85); + Formula x83=x84.in(x7); + Expression x88=x10.product(x19); + Expression x87=x10.join(x88); + Expression x89=x7.product(x7); + Formula x86=x87.in(x89); + Formula x90=x19.totalOrder(x7,x18,x23); + Expression x93=x11.product(x20); + Expression x92=x11.join(x93); + Formula x91=x92.in(x8); + Expression x96=x11.product(x21); + Expression x95=x11.join(x96); + Expression x97=x8.product(x8); + Formula x94=x95.in(x97); + Formula x98=x21.totalOrder(x8,x20,x24); + Variable x101=Variable.unary("ring_n"); + Decls x100=x101.oneOf(x6); + Expression x104=x101.join(x12); + Formula x103=x104.one(); + Expression x108=x12.closure(); + Expression x118=Expression.INTS.union(x5); + Expression x117=x118.union(x6); + Expression x116=x117.union(x7); + Expression x115=x116.union(x8); + Expression x114=x115.union(x9); + Expression x113=x114.union(x10); + Expression x112=x113.union(x11); + Expression x111=x112.product(Expression.UNIV); + Expression x109=Expression.IDEN.intersection(x111); + Expression x107=x108.union(x109); + Expression x106=x101.join(x107); + Formula x105=x6.in(x106); + Formula x102=x103.and(x105); + Formula x99=x102.forAll(x100); + Expression x124=x19.join(x7); + Expression x123=x7.difference(x124); + Expression x122=x123.product(x18); + Expression x121=x19.union(x122); + Formula x120=x121.eq(x13); + IntExpression x126=x7.count(); + IntExpression x127=x6.count(); + Formula x125=x126.eq(x127); + Expression x131=x21.join(x8); + Expression x130=x8.difference(x131); + Expression x129=x130.join(x15); + Formula x128=x129.no(); + Variable x134=Variable.unary("OneAtATimeTrans_tp"); + Expression x135=x8.difference(x130); + Decls x133=x134.oneOf(x135); + Variable x138=Variable.unary("OneAtATimeTrans_p"); + Decls x137=x138.oneOf(x6); + Expression x142=x134.join(x15); + Formula x141=x142.eq(x138); + Expression x146=x134.join(x21); + Expression x145=x146.join(x14); + Expression x144=x138.join(x145); + Expression x156=x12.transpose(); + Expression x155=x138.join(x156); + Expression x157=x134.join(x14); + Expression x154=x155.join(x157); + Expression x159=x134.join(x14); + Expression x158=x138.join(x159); + Formula x153=x154.eq(x158); + IntExpression x161=x7.count(); + Expression x160=x161.toExpression(); + Formula x164=x158.eq(x154); + IntExpression x165=IntConstant.constant(0); + Expression x169=x19.closure(); + Expression x168=x154.join(x169); + Formula x167=x158.in(x168); + Expression x174=x19.closure(); + Expression x173=x154.join(x174); + Expression x177=x19.transpose(); + Expression x176=x177.closure(); + Expression x175=x158.join(x176); + Expression x172=x173.intersection(x175); + Expression x171=x172.union(x158); + IntExpression x170=x171.count(); + Expression x183=x19.closure(); + Expression x182=x158.join(x183); + Expression x186=x19.transpose(); + Expression x185=x186.closure(); + Expression x184=x154.join(x185); + Expression x181=x182.intersection(x184); + Expression x180=x181.union(x158); + Expression x179=x7.difference(x180); + IntExpression x178=x179.count(); + IntExpression x166=x167.thenElse(x170,x178); + IntExpression x163=x164.thenElse(x165,x166); + Expression x162=x163.toExpression(); + Expression x152=x153.thenElse(x160,x162); + IntExpression x151=x152.sum(); + Expression x191=x134.join(x14); + Expression x190=x138.join(x191); + Expression x193=x138.join(x12); + Expression x194=x134.join(x14); + Expression x192=x193.join(x194); + Formula x189=x190.eq(x192); + IntExpression x196=x7.count(); + Expression x195=x196.toExpression(); + Formula x199=x192.eq(x190); + IntExpression x200=IntConstant.constant(0); + Expression x204=x19.closure(); + Expression x203=x190.join(x204); + Formula x202=x192.in(x203); + Expression x209=x19.closure(); + Expression x208=x190.join(x209); + Expression x212=x19.transpose(); + Expression x211=x212.closure(); + Expression x210=x192.join(x211); + Expression x207=x208.intersection(x210); + Expression x206=x207.union(x192); + IntExpression x205=x206.count(); + Expression x218=x19.closure(); + Expression x217=x192.join(x218); + Expression x221=x19.transpose(); + Expression x220=x221.closure(); + Expression x219=x190.join(x220); + Expression x216=x217.intersection(x219); + Expression x215=x216.union(x192); + Expression x214=x7.difference(x215); + IntExpression x213=x214.count(); + IntExpression x201=x202.thenElse(x205,x213); + IntExpression x198=x199.thenElse(x200,x201); + Expression x197=x198.toExpression(); + Expression x188=x189.thenElse(x195,x197); + IntExpression x187=x188.sum(); + Formula x150=x151.eq(x187); + IntExpression x223=x188.sum(); + IntExpression x224=x7.count(); + Formula x222=x223.eq(x224); + Formula x149=x150.and(x222); + IntExpression x226=x152.sum(); + IntExpression x227=x188.sum(); + Formula x225=x226.lt(x227); + Formula x148=x149.or(x225); + Expression x230=x134.join(x14); + Expression x229=x138.join(x230); + Expression x228=x229.join(x13); + Expression x147=x148.thenElse(x228,x229); + Formula x143=x144.eq(x147); + Formula x140=x141.and(x143); + Variable x233=Variable.unary("OneAtATimeTrans_other"); + Expression x234=x6.difference(x138); + Decls x232=x233.oneOf(x234); + Expression x237=x146.join(x14); + Expression x236=x233.join(x237); + Expression x239=x134.join(x14); + Expression x238=x233.join(x239); + Formula x235=x236.eq(x238); + Formula x231=x235.forAll(x232); + Formula x139=x140.and(x231); + Formula x136=x139.forSome(x137); + Formula x132=x136.forAll(x133); + Variable x246=Variable.unary("LeadersAtState_p"); + Decls x245=x246.oneOf(x6); + Expression x249=x20.join(x14); + Expression x248=x246.join(x249); + Formula x247=x248.eq(x18); + Expression x244=x247.comprehension(x245); + Formula x243=x244.one(); + Variable x252=Variable.unary("Legit_p"); + Decls x251=x252.oneOf(x6); + Expression x260=x12.transpose(); + Expression x259=x252.join(x260); + Expression x261=x20.join(x14); + Expression x258=x259.join(x261); + Expression x263=x20.join(x14); + Expression x262=x252.join(x263); + Formula x257=x258.eq(x262); + IntExpression x265=x7.count(); + Expression x264=x265.toExpression(); + Formula x268=x262.eq(x258); + IntExpression x269=IntConstant.constant(0); + Expression x273=x19.closure(); + Expression x272=x258.join(x273); + Formula x271=x262.in(x272); + Expression x278=x19.closure(); + Expression x277=x258.join(x278); + Expression x281=x19.transpose(); + Expression x280=x281.closure(); + Expression x279=x262.join(x280); + Expression x276=x277.intersection(x279); + Expression x275=x276.union(x262); + IntExpression x274=x275.count(); + Expression x287=x19.closure(); + Expression x286=x262.join(x287); + Expression x290=x19.transpose(); + Expression x289=x290.closure(); + Expression x288=x258.join(x289); + Expression x285=x286.intersection(x288); + Expression x284=x285.union(x262); + Expression x283=x7.difference(x284); + IntExpression x282=x283.count(); + IntExpression x270=x271.thenElse(x274,x282); + IntExpression x267=x268.thenElse(x269,x270); + Expression x266=x267.toExpression(); + Expression x256=x257.thenElse(x264,x266); + IntExpression x255=x256.sum(); + IntExpression x291=x7.count(); + Formula x254=x255.lt(x291); + Expression x297=x20.join(x14); + Expression x296=x252.join(x297); + Expression x299=x252.join(x12); + Expression x300=x20.join(x14); + Expression x298=x299.join(x300); + Formula x295=x296.eq(x298); + IntExpression x302=x7.count(); + Expression x301=x302.toExpression(); + Formula x305=x298.eq(x296); + IntExpression x306=IntConstant.constant(0); + Expression x310=x19.closure(); + Expression x309=x296.join(x310); + Formula x308=x298.in(x309); + Expression x315=x19.closure(); + Expression x314=x296.join(x315); + Expression x318=x19.transpose(); + Expression x317=x318.closure(); + Expression x316=x298.join(x317); + Expression x313=x314.intersection(x316); + Expression x312=x313.union(x298); + IntExpression x311=x312.count(); + Expression x324=x19.closure(); + Expression x323=x298.join(x324); + Expression x327=x19.transpose(); + Expression x326=x327.closure(); + Expression x325=x296.join(x326); + Expression x322=x323.intersection(x325); + Expression x321=x322.union(x298); + Expression x320=x7.difference(x321); + IntExpression x319=x320.count(); + IntExpression x307=x308.thenElse(x311,x319); + IntExpression x304=x305.thenElse(x306,x307); + Expression x303=x304.toExpression(); + Expression x294=x295.thenElse(x301,x303); + IntExpression x293=x294.sum(); + IntExpression x328=x7.count(); + Formula x292=x293.lt(x328); + Formula x253=x254.and(x292); + Formula x250=x253.forAll(x251); + Formula x242=x243.and(x250); + Variable x332=Variable.unary("Legit_p"); + Decls x331=x332.oneOf(x6); + Variable x334=Variable.unary("Legit_p'"); + Decls x333=x334.oneOf(x6); + Decls x330=x331.and(x333); + Expression x342=x12.transpose(); + Expression x341=x332.join(x342); + Expression x343=x20.join(x14); + Expression x340=x341.join(x343); + Expression x345=x20.join(x14); + Expression x344=x332.join(x345); + Formula x339=x340.eq(x344); + IntExpression x347=x7.count(); + Expression x346=x347.toExpression(); + Formula x350=x344.eq(x340); + IntExpression x351=IntConstant.constant(0); + Expression x355=x19.closure(); + Expression x354=x340.join(x355); + Formula x353=x344.in(x354); + Expression x360=x19.closure(); + Expression x359=x340.join(x360); + Expression x363=x19.transpose(); + Expression x362=x363.closure(); + Expression x361=x344.join(x362); + Expression x358=x359.intersection(x361); + Expression x357=x358.union(x344); + IntExpression x356=x357.count(); + Expression x369=x19.closure(); + Expression x368=x344.join(x369); + Expression x372=x19.transpose(); + Expression x371=x372.closure(); + Expression x370=x340.join(x371); + Expression x367=x368.intersection(x370); + Expression x366=x367.union(x344); + Expression x365=x7.difference(x366); + IntExpression x364=x365.count(); + IntExpression x352=x353.thenElse(x356,x364); + IntExpression x349=x350.thenElse(x351,x352); + Expression x348=x349.toExpression(); + Expression x338=x339.thenElse(x346,x348); + IntExpression x337=x338.sum(); + Expression x378=x12.transpose(); + Expression x377=x334.join(x378); + Expression x379=x20.join(x14); + Expression x376=x377.join(x379); + Expression x381=x20.join(x14); + Expression x380=x334.join(x381); + Formula x375=x376.eq(x380); + IntExpression x383=x7.count(); + Expression x382=x383.toExpression(); + Formula x386=x380.eq(x376); + IntExpression x387=IntConstant.constant(0); + Expression x391=x19.closure(); + Expression x390=x376.join(x391); + Formula x389=x380.in(x390); + Expression x396=x19.closure(); + Expression x395=x376.join(x396); + Expression x399=x19.transpose(); + Expression x398=x399.closure(); + Expression x397=x380.join(x398); + Expression x394=x395.intersection(x397); + Expression x393=x394.union(x380); + IntExpression x392=x393.count(); + Expression x405=x19.closure(); + Expression x404=x380.join(x405); + Expression x408=x19.transpose(); + Expression x407=x408.closure(); + Expression x406=x376.join(x407); + Expression x403=x404.intersection(x406); + Expression x402=x403.union(x380); + Expression x401=x7.difference(x402); + IntExpression x400=x401.count(); + IntExpression x388=x389.thenElse(x392,x400); + IntExpression x385=x386.thenElse(x387,x388); + Expression x384=x385.toExpression(); + Expression x374=x375.thenElse(x382,x384); + IntExpression x373=x374.sum(); + Formula x336=x337.eq(x373); + Expression x414=x20.join(x14); + Expression x413=x332.join(x414); + Expression x416=x332.join(x12); + Expression x417=x20.join(x14); + Expression x415=x416.join(x417); + Formula x412=x413.eq(x415); + IntExpression x419=x7.count(); + Expression x418=x419.toExpression(); + Formula x422=x415.eq(x413); + IntExpression x423=IntConstant.constant(0); + Expression x427=x19.closure(); + Expression x426=x413.join(x427); + Formula x425=x415.in(x426); + Expression x432=x19.closure(); + Expression x431=x413.join(x432); + Expression x435=x19.transpose(); + Expression x434=x435.closure(); + Expression x433=x415.join(x434); + Expression x430=x431.intersection(x433); + Expression x429=x430.union(x415); + IntExpression x428=x429.count(); + Expression x441=x19.closure(); + Expression x440=x415.join(x441); + Expression x444=x19.transpose(); + Expression x443=x444.closure(); + Expression x442=x413.join(x443); + Expression x439=x440.intersection(x442); + Expression x438=x439.union(x415); + Expression x437=x7.difference(x438); + IntExpression x436=x437.count(); + IntExpression x424=x425.thenElse(x428,x436); + IntExpression x421=x422.thenElse(x423,x424); + Expression x420=x421.toExpression(); + Expression x411=x412.thenElse(x418,x420); + IntExpression x410=x411.sum(); + Expression x449=x20.join(x14); + Expression x448=x334.join(x449); + Expression x451=x334.join(x12); + Expression x452=x20.join(x14); + Expression x450=x451.join(x452); + Formula x447=x448.eq(x450); + IntExpression x454=x7.count(); + Expression x453=x454.toExpression(); + Formula x457=x450.eq(x448); + IntExpression x458=IntConstant.constant(0); + Expression x462=x19.closure(); + Expression x461=x448.join(x462); + Formula x460=x450.in(x461); + Expression x467=x19.closure(); + Expression x466=x448.join(x467); + Expression x470=x19.transpose(); + Expression x469=x470.closure(); + Expression x468=x450.join(x469); + Expression x465=x466.intersection(x468); + Expression x464=x465.union(x450); + IntExpression x463=x464.count(); + Expression x476=x19.closure(); + Expression x475=x450.join(x476); + Expression x479=x19.transpose(); + Expression x478=x479.closure(); + Expression x477=x448.join(x478); + Expression x474=x475.intersection(x477); + Expression x473=x474.union(x450); + Expression x472=x7.difference(x473); + IntExpression x471=x472.count(); + IntExpression x459=x460.thenElse(x463,x471); + IntExpression x456=x457.thenElse(x458,x459); + Expression x455=x456.toExpression(); + Expression x446=x447.thenElse(x453,x455); + IntExpression x445=x446.sum(); + Formula x409=x410.eq(x445); + Formula x335=x336.and(x409); + Formula x329=x335.forAll(x330); + Formula x241=x242.and(x329); + Formula x240=x241.not(); + Variable x482=Variable.unary("ConvergingRun_t"); + Decls x481=x482.oneOf(x8); + Variable x488=Variable.unary("LeadersAtState_p"); + Decls x487=x488.oneOf(x6); + Expression x491=x482.join(x14); + Expression x490=x488.join(x491); + Formula x489=x490.eq(x18); + Expression x486=x489.comprehension(x487); + Formula x485=x486.one(); + Variable x494=Variable.unary("Legit_p"); + Decls x493=x494.oneOf(x6); + Expression x502=x12.transpose(); + Expression x501=x494.join(x502); + Expression x503=x482.join(x14); + Expression x500=x501.join(x503); + Expression x505=x482.join(x14); + Expression x504=x494.join(x505); + Formula x499=x500.eq(x504); + IntExpression x507=x7.count(); + Expression x506=x507.toExpression(); + Formula x510=x504.eq(x500); + IntExpression x511=IntConstant.constant(0); + Expression x515=x19.closure(); + Expression x514=x500.join(x515); + Formula x513=x504.in(x514); + Expression x520=x19.closure(); + Expression x519=x500.join(x520); + Expression x523=x19.transpose(); + Expression x522=x523.closure(); + Expression x521=x504.join(x522); + Expression x518=x519.intersection(x521); + Expression x517=x518.union(x504); + IntExpression x516=x517.count(); + Expression x529=x19.closure(); + Expression x528=x504.join(x529); + Expression x532=x19.transpose(); + Expression x531=x532.closure(); + Expression x530=x500.join(x531); + Expression x527=x528.intersection(x530); + Expression x526=x527.union(x504); + Expression x525=x7.difference(x526); + IntExpression x524=x525.count(); + IntExpression x512=x513.thenElse(x516,x524); + IntExpression x509=x510.thenElse(x511,x512); + Expression x508=x509.toExpression(); + Expression x498=x499.thenElse(x506,x508); + IntExpression x497=x498.sum(); + IntExpression x533=x7.count(); + Formula x496=x497.lt(x533); + Expression x539=x482.join(x14); + Expression x538=x494.join(x539); + Expression x541=x494.join(x12); + Expression x542=x482.join(x14); + Expression x540=x541.join(x542); + Formula x537=x538.eq(x540); + IntExpression x544=x7.count(); + Expression x543=x544.toExpression(); + Formula x547=x540.eq(x538); + IntExpression x548=IntConstant.constant(0); + Expression x552=x19.closure(); + Expression x551=x538.join(x552); + Formula x550=x540.in(x551); + Expression x557=x19.closure(); + Expression x556=x538.join(x557); + Expression x560=x19.transpose(); + Expression x559=x560.closure(); + Expression x558=x540.join(x559); + Expression x555=x556.intersection(x558); + Expression x554=x555.union(x540); + IntExpression x553=x554.count(); + Expression x566=x19.closure(); + Expression x565=x540.join(x566); + Expression x569=x19.transpose(); + Expression x568=x569.closure(); + Expression x567=x538.join(x568); + Expression x564=x565.intersection(x567); + Expression x563=x564.union(x540); + Expression x562=x7.difference(x563); + IntExpression x561=x562.count(); + IntExpression x549=x550.thenElse(x553,x561); + IntExpression x546=x547.thenElse(x548,x549); + Expression x545=x546.toExpression(); + Expression x536=x537.thenElse(x543,x545); + IntExpression x535=x536.sum(); + IntExpression x570=x7.count(); + Formula x534=x535.lt(x570); + Formula x495=x496.and(x534); + Formula x492=x495.forAll(x493); + Formula x484=x485.and(x492); + Variable x574=Variable.unary("Legit_p"); + Decls x573=x574.oneOf(x6); + Variable x576=Variable.unary("Legit_p'"); + Decls x575=x576.oneOf(x6); + Decls x572=x573.and(x575); + Expression x584=x12.transpose(); + Expression x583=x574.join(x584); + Expression x585=x482.join(x14); + Expression x582=x583.join(x585); + Expression x587=x482.join(x14); + Expression x586=x574.join(x587); + Formula x581=x582.eq(x586); + IntExpression x589=x7.count(); + Expression x588=x589.toExpression(); + Formula x592=x586.eq(x582); + IntExpression x593=IntConstant.constant(0); + Expression x597=x19.closure(); + Expression x596=x582.join(x597); + Formula x595=x586.in(x596); + Expression x602=x19.closure(); + Expression x601=x582.join(x602); + Expression x605=x19.transpose(); + Expression x604=x605.closure(); + Expression x603=x586.join(x604); + Expression x600=x601.intersection(x603); + Expression x599=x600.union(x586); + IntExpression x598=x599.count(); + Expression x611=x19.closure(); + Expression x610=x586.join(x611); + Expression x614=x19.transpose(); + Expression x613=x614.closure(); + Expression x612=x582.join(x613); + Expression x609=x610.intersection(x612); + Expression x608=x609.union(x586); + Expression x607=x7.difference(x608); + IntExpression x606=x607.count(); + IntExpression x594=x595.thenElse(x598,x606); + IntExpression x591=x592.thenElse(x593,x594); + Expression x590=x591.toExpression(); + Expression x580=x581.thenElse(x588,x590); + IntExpression x579=x580.sum(); + Expression x620=x12.transpose(); + Expression x619=x576.join(x620); + Expression x621=x482.join(x14); + Expression x618=x619.join(x621); + Expression x623=x482.join(x14); + Expression x622=x576.join(x623); + Formula x617=x618.eq(x622); + IntExpression x625=x7.count(); + Expression x624=x625.toExpression(); + Formula x628=x622.eq(x618); + IntExpression x629=IntConstant.constant(0); + Expression x633=x19.closure(); + Expression x632=x618.join(x633); + Formula x631=x622.in(x632); + Expression x638=x19.closure(); + Expression x637=x618.join(x638); + Expression x641=x19.transpose(); + Expression x640=x641.closure(); + Expression x639=x622.join(x640); + Expression x636=x637.intersection(x639); + Expression x635=x636.union(x622); + IntExpression x634=x635.count(); + Expression x647=x19.closure(); + Expression x646=x622.join(x647); + Expression x650=x19.transpose(); + Expression x649=x650.closure(); + Expression x648=x618.join(x649); + Expression x645=x646.intersection(x648); + Expression x644=x645.union(x622); + Expression x643=x7.difference(x644); + IntExpression x642=x643.count(); + IntExpression x630=x631.thenElse(x634,x642); + IntExpression x627=x628.thenElse(x629,x630); + Expression x626=x627.toExpression(); + Expression x616=x617.thenElse(x624,x626); + IntExpression x615=x616.sum(); + Formula x578=x579.eq(x615); + Expression x656=x482.join(x14); + Expression x655=x574.join(x656); + Expression x658=x574.join(x12); + Expression x659=x482.join(x14); + Expression x657=x658.join(x659); + Formula x654=x655.eq(x657); + IntExpression x661=x7.count(); + Expression x660=x661.toExpression(); + Formula x664=x657.eq(x655); + IntExpression x665=IntConstant.constant(0); + Expression x669=x19.closure(); + Expression x668=x655.join(x669); + Formula x667=x657.in(x668); + Expression x674=x19.closure(); + Expression x673=x655.join(x674); + Expression x677=x19.transpose(); + Expression x676=x677.closure(); + Expression x675=x657.join(x676); + Expression x672=x673.intersection(x675); + Expression x671=x672.union(x657); + IntExpression x670=x671.count(); + Expression x683=x19.closure(); + Expression x682=x657.join(x683); + Expression x686=x19.transpose(); + Expression x685=x686.closure(); + Expression x684=x655.join(x685); + Expression x681=x682.intersection(x684); + Expression x680=x681.union(x657); + Expression x679=x7.difference(x680); + IntExpression x678=x679.count(); + IntExpression x666=x667.thenElse(x670,x678); + IntExpression x663=x664.thenElse(x665,x666); + Expression x662=x663.toExpression(); + Expression x653=x654.thenElse(x660,x662); + IntExpression x652=x653.sum(); + Expression x691=x482.join(x14); + Expression x690=x576.join(x691); + Expression x693=x576.join(x12); + Expression x694=x482.join(x14); + Expression x692=x693.join(x694); + Formula x689=x690.eq(x692); + IntExpression x696=x7.count(); + Expression x695=x696.toExpression(); + Formula x699=x692.eq(x690); + IntExpression x700=IntConstant.constant(0); + Expression x704=x19.closure(); + Expression x703=x690.join(x704); + Formula x702=x692.in(x703); + Expression x709=x19.closure(); + Expression x708=x690.join(x709); + Expression x712=x19.transpose(); + Expression x711=x712.closure(); + Expression x710=x692.join(x711); + Expression x707=x708.intersection(x710); + Expression x706=x707.union(x692); + IntExpression x705=x706.count(); + Expression x718=x19.closure(); + Expression x717=x692.join(x718); + Expression x721=x19.transpose(); + Expression x720=x721.closure(); + Expression x719=x690.join(x720); + Expression x716=x717.intersection(x719); + Expression x715=x716.union(x692); + Expression x714=x7.difference(x715); + IntExpression x713=x714.count(); + IntExpression x701=x702.thenElse(x705,x713); + IntExpression x698=x699.thenElse(x700,x701); + Expression x697=x698.toExpression(); + Expression x688=x689.thenElse(x695,x697); + IntExpression x687=x688.sum(); + Formula x651=x652.eq(x687); + Formula x577=x578.and(x651); + Formula x571=x577.forAll(x572); + Formula x483=x484.and(x571); + Formula x480=x483.forSome(x481); + Formula x722=x0.eq(x0); + Formula x723=x1.eq(x1); + Formula x724=x2.eq(x2); + Formula x725=x3.eq(x3); + Formula x726=x4.eq(x4); + Formula x727=x5.eq(x5); + Formula x728=x6.eq(x6); + Formula x729=x7.eq(x7); + Formula x730=x8.eq(x8); + Formula x731=x9.eq(x9); + Formula x732=x10.eq(x10); + Formula x733=x11.eq(x11); + Formula x734=x12.eq(x12); + Formula x735=x13.eq(x13); + Formula x736=x14.eq(x14); + Formula x737=x15.eq(x15); + Formula x738=x16.eq(x16); + Formula x739=x17.eq(x17); + Formula x740=x18.eq(x18); + Formula x741=x19.eq(x19); + Formula x742=x20.eq(x20); + Formula x743=x21.eq(x21); + Formula x744=x22.eq(x22); + Formula x745=x23.eq(x23); + Formula x746=x24.eq(x24); + Formula x25=Formula.compose(FormulaOperator.AND, x26, x33, x36, x43, x45, x65, x68, x73, x75, x78, x82, x83, x86, x90, x91, x94, x98, x99, x120, x125, x128, x132, x240, x480, x722, x723, x724, x725, x726, x727, x728, x729, x730, x731, x732, x733, x734, x735, x736, x737, x738, x739, x740, x741, x742, x743, x744, x745, x746); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x25,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCoveringRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCoveringRun.java new file mode 100644 index 0000000..078df82 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadCoveringRun.java @@ -0,0 +1,1055 @@ +package kodkod.examples.models.algorithm.election; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "stable_ringlead", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 7, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 49, + Additions = 0, + Subtractions = 1, + Comparison = 26, + OrderedRelations = 3, + Constraints =32 +) + + + +public final class stable_ringleadCoveringRun { + + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Process"); + Relation x7 = Relation.unary("this/Val"); + Relation x8 = Relation.unary("this/State"); + Relation x9 = Relation.unary("po/Ord"); + Relation x10 = Relation.unary("vo/Ord"); + Relation x11 = Relation.unary("so/Ord"); + Relation x12 = Relation.nary("this/Process.rightNeighbor", 2); + Relation x13 = Relation.nary("this/Val.nextVal", 2); + Relation x14 = Relation.nary("this/State.val", 3); + Relation x15 = Relation.nary("this/State.running", 2); + Relation x16 = Relation.unary("po/Ord.First"); + Relation x17 = Relation.nary("po/Ord.Next", 2); + Relation x18 = Relation.unary("vo/Ord.First"); + Relation x19 = Relation.nary("vo/Ord.Next", 2); + Relation x20 = Relation.unary("so/Ord.First"); + Relation x21 = Relation.nary("so/Ord.Next", 2); + Relation x22 = Relation.unary(""); + Relation x23 = Relation.unary(""); + Relation x24 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Process$0", + "Process$1", "Process$2", "State$0", "State$1", "State$2", "State$3", + "Val$0", "Val$1", "Val$2", "po/Ord$0", "so/Ord$0", "vo/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Process$0")); + x6_upper.add(factory.tuple("Process$1")); + x6_upper.add(factory.tuple("Process$2")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Val$0")); + x7_upper.add(factory.tuple("Val$1")); + x7_upper.add(factory.tuple("Val$2")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + x8_upper.add(factory.tuple("State$3")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("po/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("vo/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(3); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("Process$0")); + x16_upper.add(factory.tuple("Process$1")); + x16_upper.add(factory.tuple("Process$2")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Val$0")); + x18_upper.add(factory.tuple("Val$1")); + x18_upper.add(factory.tuple("Val$2")); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(1); + x20_upper.add(factory.tuple("State$0")); + x20_upper.add(factory.tuple("State$1")); + x20_upper.add(factory.tuple("State$2")); + x20_upper.add(factory.tuple("State$3")); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("Process$0")); + x22_upper.add(factory.tuple("Process$1")); + x22_upper.add(factory.tuple("Process$2")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(1); + x23_upper.add(factory.tuple("Val$0")); + x23_upper.add(factory.tuple("Val$1")); + x23_upper.add(factory.tuple("Val$2")); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("State$0")); + x24_upper.add(factory.tuple("State$1")); + x24_upper.add(factory.tuple("State$2")); + x24_upper.add(factory.tuple("State$3")); + bounds.bound(x24, x24_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x28=Variable.unary("ConvergingRun_this"); + Decls x27=x28.oneOf(x6); + Expression x31=x28.join(x12); + Formula x30=x31.one(); + Formula x32=x31.in(x6); + Formula x29=x30.and(x32); + Formula x26=x29.forAll(x27); + Expression x34=x12.join(Expression.UNIV); + Formula x33=x34.in(x6); + Variable x38=Variable.unary("ConvergingRun_this"); + Decls x37=x38.oneOf(x7); + Expression x41=x38.join(x13); + Formula x40=x41.one(); + Formula x42=x41.in(x7); + Formula x39=x40.and(x42); + Formula x36=x39.forAll(x37); + Expression x44=x13.join(Expression.UNIV); + Formula x43=x44.in(x7); + Variable x47=Variable.unary("ConvergingRun_this"); + Decls x46=x47.oneOf(x8); + Expression x51=x47.join(x14); + Expression x52=x6.product(x7); + Formula x50=x51.in(x52); + Variable x55=Variable.unary(""); + Decls x54=x55.oneOf(x6); + Expression x58=x55.join(x51); + Formula x57=x58.one(); + Formula x59=x58.in(x7); + Formula x56=x57.and(x59); + Formula x53=x56.forAll(x54); + Formula x49=x50.and(x53); + Variable x62=Variable.unary(""); + Decls x61=x62.oneOf(x7); + Expression x64=x51.join(x62); + Formula x63=x64.in(x6); + Formula x60=x63.forAll(x61); + Formula x48=x49.and(x60); + Formula x45=x48.forAll(x46); + Expression x67=x14.join(Expression.UNIV); + Expression x66=x67.join(Expression.UNIV); + Formula x65=x66.in(x8); + Variable x70=Variable.unary("ConvergingRun_this"); + Decls x69=x70.oneOf(x8); + Expression x72=x70.join(x15); + Formula x71=x72.in(x6); + Formula x68=x71.forAll(x69); + Expression x74=x15.join(Expression.UNIV); + Formula x73=x74.in(x8); + Expression x77=x9.product(x16); + Expression x76=x9.join(x77); + Formula x75=x76.in(x6); + Expression x80=x9.product(x17); + Expression x79=x9.join(x80); + Expression x81=x6.product(x6); + Formula x78=x79.in(x81); + Formula x82=x17.totalOrder(x6,x16,x22); + Expression x85=x10.product(x18); + Expression x84=x10.join(x85); + Formula x83=x84.in(x7); + Expression x88=x10.product(x19); + Expression x87=x10.join(x88); + Expression x89=x7.product(x7); + Formula x86=x87.in(x89); + Formula x90=x19.totalOrder(x7,x18,x23); + Expression x93=x11.product(x20); + Expression x92=x11.join(x93); + Formula x91=x92.in(x8); + Expression x96=x11.product(x21); + Expression x95=x11.join(x96); + Expression x97=x8.product(x8); + Formula x94=x95.in(x97); + Formula x98=x21.totalOrder(x8,x20,x24); + Variable x101=Variable.unary("ring_n"); + Decls x100=x101.oneOf(x6); + Expression x104=x101.join(x12); + Formula x103=x104.one(); + Expression x108=x12.closure(); + Expression x118=Expression.INTS.union(x5); + Expression x117=x118.union(x6); + Expression x116=x117.union(x7); + Expression x115=x116.union(x8); + Expression x114=x115.union(x9); + Expression x113=x114.union(x10); + Expression x112=x113.union(x11); + Expression x111=x112.product(Expression.UNIV); + Expression x109=Expression.IDEN.intersection(x111); + Expression x107=x108.union(x109); + Expression x106=x101.join(x107); + Formula x105=x6.in(x106); + Formula x102=x103.and(x105); + Formula x99=x102.forAll(x100); + Expression x124=x19.join(x7); + Expression x123=x7.difference(x124); + Expression x122=x123.product(x18); + Expression x121=x19.union(x122); + Formula x120=x121.eq(x13); + IntExpression x126=x7.count(); + IntExpression x127=x6.count(); + Formula x125=x126.eq(x127); + Expression x131=x21.join(x8); + Expression x130=x8.difference(x131); + Expression x129=x130.join(x15); + Formula x128=x129.no(); + Variable x134=Variable.unary("OneAtATimeTrans_tp"); + Expression x135=x8.difference(x130); + Decls x133=x134.oneOf(x135); + Variable x138=Variable.unary("OneAtATimeTrans_p"); + Decls x137=x138.oneOf(x6); + Expression x142=x134.join(x15); + Formula x141=x142.eq(x138); + Expression x146=x134.join(x21); + Expression x145=x146.join(x14); + Expression x144=x138.join(x145); + Expression x156=x12.transpose(); + Expression x155=x138.join(x156); + Expression x157=x134.join(x14); + Expression x154=x155.join(x157); + Expression x159=x134.join(x14); + Expression x158=x138.join(x159); + Formula x153=x154.eq(x158); + IntExpression x161=x7.count(); + Expression x160=x161.toExpression(); + Formula x164=x158.eq(x154); + IntExpression x165=IntConstant.constant(0); + Expression x169=x19.closure(); + Expression x168=x154.join(x169); + Formula x167=x158.in(x168); + Expression x174=x19.closure(); + Expression x173=x154.join(x174); + Expression x177=x19.transpose(); + Expression x176=x177.closure(); + Expression x175=x158.join(x176); + Expression x172=x173.intersection(x175); + Expression x171=x172.union(x158); + IntExpression x170=x171.count(); + Expression x183=x19.closure(); + Expression x182=x158.join(x183); + Expression x186=x19.transpose(); + Expression x185=x186.closure(); + Expression x184=x154.join(x185); + Expression x181=x182.intersection(x184); + Expression x180=x181.union(x158); + Expression x179=x7.difference(x180); + IntExpression x178=x179.count(); + IntExpression x166=x167.thenElse(x170,x178); + IntExpression x163=x164.thenElse(x165,x166); + Expression x162=x163.toExpression(); + Expression x152=x153.thenElse(x160,x162); + IntExpression x151=x152.sum(); + Expression x191=x134.join(x14); + Expression x190=x138.join(x191); + Expression x193=x138.join(x12); + Expression x194=x134.join(x14); + Expression x192=x193.join(x194); + Formula x189=x190.eq(x192); + IntExpression x196=x7.count(); + Expression x195=x196.toExpression(); + Formula x199=x192.eq(x190); + IntExpression x200=IntConstant.constant(0); + Expression x204=x19.closure(); + Expression x203=x190.join(x204); + Formula x202=x192.in(x203); + Expression x209=x19.closure(); + Expression x208=x190.join(x209); + Expression x212=x19.transpose(); + Expression x211=x212.closure(); + Expression x210=x192.join(x211); + Expression x207=x208.intersection(x210); + Expression x206=x207.union(x192); + IntExpression x205=x206.count(); + Expression x218=x19.closure(); + Expression x217=x192.join(x218); + Expression x221=x19.transpose(); + Expression x220=x221.closure(); + Expression x219=x190.join(x220); + Expression x216=x217.intersection(x219); + Expression x215=x216.union(x192); + Expression x214=x7.difference(x215); + IntExpression x213=x214.count(); + IntExpression x201=x202.thenElse(x205,x213); + IntExpression x198=x199.thenElse(x200,x201); + Expression x197=x198.toExpression(); + Expression x188=x189.thenElse(x195,x197); + IntExpression x187=x188.sum(); + Formula x150=x151.eq(x187); + IntExpression x223=x188.sum(); + IntExpression x224=x7.count(); + Formula x222=x223.eq(x224); + Formula x149=x150.and(x222); + IntExpression x226=x152.sum(); + IntExpression x227=x188.sum(); + Formula x225=x226.lt(x227); + Formula x148=x149.or(x225); + Expression x230=x134.join(x14); + Expression x229=x138.join(x230); + Expression x228=x229.join(x13); + Expression x147=x148.thenElse(x228,x229); + Formula x143=x144.eq(x147); + Formula x140=x141.and(x143); + Variable x233=Variable.unary("OneAtATimeTrans_other"); + Expression x234=x6.difference(x138); + Decls x232=x233.oneOf(x234); + Expression x237=x146.join(x14); + Expression x236=x233.join(x237); + Expression x239=x134.join(x14); + Expression x238=x233.join(x239); + Formula x235=x236.eq(x238); + Formula x231=x235.forAll(x232); + Formula x139=x140.and(x231); + Formula x136=x139.forSome(x137); + Formula x132=x136.forAll(x133); + Variable x246=Variable.unary("LeadersAtState_p"); + Decls x245=x246.oneOf(x6); + Expression x249=x20.join(x14); + Expression x248=x246.join(x249); + Formula x247=x248.eq(x18); + Expression x244=x247.comprehension(x245); + Formula x243=x244.one(); + Variable x252=Variable.unary("Legit_p"); + Decls x251=x252.oneOf(x6); + Expression x260=x12.transpose(); + Expression x259=x252.join(x260); + Expression x261=x20.join(x14); + Expression x258=x259.join(x261); + Expression x263=x20.join(x14); + Expression x262=x252.join(x263); + Formula x257=x258.eq(x262); + IntExpression x265=x7.count(); + Expression x264=x265.toExpression(); + Formula x268=x262.eq(x258); + IntExpression x269=IntConstant.constant(0); + Expression x273=x19.closure(); + Expression x272=x258.join(x273); + Formula x271=x262.in(x272); + Expression x278=x19.closure(); + Expression x277=x258.join(x278); + Expression x281=x19.transpose(); + Expression x280=x281.closure(); + Expression x279=x262.join(x280); + Expression x276=x277.intersection(x279); + Expression x275=x276.union(x262); + IntExpression x274=x275.count(); + Expression x287=x19.closure(); + Expression x286=x262.join(x287); + Expression x290=x19.transpose(); + Expression x289=x290.closure(); + Expression x288=x258.join(x289); + Expression x285=x286.intersection(x288); + Expression x284=x285.union(x262); + Expression x283=x7.difference(x284); + IntExpression x282=x283.count(); + IntExpression x270=x271.thenElse(x274,x282); + IntExpression x267=x268.thenElse(x269,x270); + Expression x266=x267.toExpression(); + Expression x256=x257.thenElse(x264,x266); + IntExpression x255=x256.sum(); + IntExpression x291=x7.count(); + Formula x254=x255.lt(x291); + Expression x297=x20.join(x14); + Expression x296=x252.join(x297); + Expression x299=x252.join(x12); + Expression x300=x20.join(x14); + Expression x298=x299.join(x300); + Formula x295=x296.eq(x298); + IntExpression x302=x7.count(); + Expression x301=x302.toExpression(); + Formula x305=x298.eq(x296); + IntExpression x306=IntConstant.constant(0); + Expression x310=x19.closure(); + Expression x309=x296.join(x310); + Formula x308=x298.in(x309); + Expression x315=x19.closure(); + Expression x314=x296.join(x315); + Expression x318=x19.transpose(); + Expression x317=x318.closure(); + Expression x316=x298.join(x317); + Expression x313=x314.intersection(x316); + Expression x312=x313.union(x298); + IntExpression x311=x312.count(); + Expression x324=x19.closure(); + Expression x323=x298.join(x324); + Expression x327=x19.transpose(); + Expression x326=x327.closure(); + Expression x325=x296.join(x326); + Expression x322=x323.intersection(x325); + Expression x321=x322.union(x298); + Expression x320=x7.difference(x321); + IntExpression x319=x320.count(); + IntExpression x307=x308.thenElse(x311,x319); + IntExpression x304=x305.thenElse(x306,x307); + Expression x303=x304.toExpression(); + Expression x294=x295.thenElse(x301,x303); + IntExpression x293=x294.sum(); + IntExpression x328=x7.count(); + Formula x292=x293.lt(x328); + Formula x253=x254.and(x292); + Formula x250=x253.forAll(x251); + Formula x242=x243.and(x250); + Variable x332=Variable.unary("Legit_p"); + Decls x331=x332.oneOf(x6); + Variable x334=Variable.unary("Legit_p'"); + Decls x333=x334.oneOf(x6); + Decls x330=x331.and(x333); + Expression x342=x12.transpose(); + Expression x341=x332.join(x342); + Expression x343=x20.join(x14); + Expression x340=x341.join(x343); + Expression x345=x20.join(x14); + Expression x344=x332.join(x345); + Formula x339=x340.eq(x344); + IntExpression x347=x7.count(); + Expression x346=x347.toExpression(); + Formula x350=x344.eq(x340); + IntExpression x351=IntConstant.constant(0); + Expression x355=x19.closure(); + Expression x354=x340.join(x355); + Formula x353=x344.in(x354); + Expression x360=x19.closure(); + Expression x359=x340.join(x360); + Expression x363=x19.transpose(); + Expression x362=x363.closure(); + Expression x361=x344.join(x362); + Expression x358=x359.intersection(x361); + Expression x357=x358.union(x344); + IntExpression x356=x357.count(); + Expression x369=x19.closure(); + Expression x368=x344.join(x369); + Expression x372=x19.transpose(); + Expression x371=x372.closure(); + Expression x370=x340.join(x371); + Expression x367=x368.intersection(x370); + Expression x366=x367.union(x344); + Expression x365=x7.difference(x366); + IntExpression x364=x365.count(); + IntExpression x352=x353.thenElse(x356,x364); + IntExpression x349=x350.thenElse(x351,x352); + Expression x348=x349.toExpression(); + Expression x338=x339.thenElse(x346,x348); + IntExpression x337=x338.sum(); + Expression x378=x12.transpose(); + Expression x377=x334.join(x378); + Expression x379=x20.join(x14); + Expression x376=x377.join(x379); + Expression x381=x20.join(x14); + Expression x380=x334.join(x381); + Formula x375=x376.eq(x380); + IntExpression x383=x7.count(); + Expression x382=x383.toExpression(); + Formula x386=x380.eq(x376); + IntExpression x387=IntConstant.constant(0); + Expression x391=x19.closure(); + Expression x390=x376.join(x391); + Formula x389=x380.in(x390); + Expression x396=x19.closure(); + Expression x395=x376.join(x396); + Expression x399=x19.transpose(); + Expression x398=x399.closure(); + Expression x397=x380.join(x398); + Expression x394=x395.intersection(x397); + Expression x393=x394.union(x380); + IntExpression x392=x393.count(); + Expression x405=x19.closure(); + Expression x404=x380.join(x405); + Expression x408=x19.transpose(); + Expression x407=x408.closure(); + Expression x406=x376.join(x407); + Expression x403=x404.intersection(x406); + Expression x402=x403.union(x380); + Expression x401=x7.difference(x402); + IntExpression x400=x401.count(); + IntExpression x388=x389.thenElse(x392,x400); + IntExpression x385=x386.thenElse(x387,x388); + Expression x384=x385.toExpression(); + Expression x374=x375.thenElse(x382,x384); + IntExpression x373=x374.sum(); + Formula x336=x337.eq(x373); + Expression x414=x20.join(x14); + Expression x413=x332.join(x414); + Expression x416=x332.join(x12); + Expression x417=x20.join(x14); + Expression x415=x416.join(x417); + Formula x412=x413.eq(x415); + IntExpression x419=x7.count(); + Expression x418=x419.toExpression(); + Formula x422=x415.eq(x413); + IntExpression x423=IntConstant.constant(0); + Expression x427=x19.closure(); + Expression x426=x413.join(x427); + Formula x425=x415.in(x426); + Expression x432=x19.closure(); + Expression x431=x413.join(x432); + Expression x435=x19.transpose(); + Expression x434=x435.closure(); + Expression x433=x415.join(x434); + Expression x430=x431.intersection(x433); + Expression x429=x430.union(x415); + IntExpression x428=x429.count(); + Expression x441=x19.closure(); + Expression x440=x415.join(x441); + Expression x444=x19.transpose(); + Expression x443=x444.closure(); + Expression x442=x413.join(x443); + Expression x439=x440.intersection(x442); + Expression x438=x439.union(x415); + Expression x437=x7.difference(x438); + IntExpression x436=x437.count(); + IntExpression x424=x425.thenElse(x428,x436); + IntExpression x421=x422.thenElse(x423,x424); + Expression x420=x421.toExpression(); + Expression x411=x412.thenElse(x418,x420); + IntExpression x410=x411.sum(); + Expression x449=x20.join(x14); + Expression x448=x334.join(x449); + Expression x451=x334.join(x12); + Expression x452=x20.join(x14); + Expression x450=x451.join(x452); + Formula x447=x448.eq(x450); + IntExpression x454=x7.count(); + Expression x453=x454.toExpression(); + Formula x457=x450.eq(x448); + IntExpression x458=IntConstant.constant(0); + Expression x462=x19.closure(); + Expression x461=x448.join(x462); + Formula x460=x450.in(x461); + Expression x467=x19.closure(); + Expression x466=x448.join(x467); + Expression x470=x19.transpose(); + Expression x469=x470.closure(); + Expression x468=x450.join(x469); + Expression x465=x466.intersection(x468); + Expression x464=x465.union(x450); + IntExpression x463=x464.count(); + Expression x476=x19.closure(); + Expression x475=x450.join(x476); + Expression x479=x19.transpose(); + Expression x478=x479.closure(); + Expression x477=x448.join(x478); + Expression x474=x475.intersection(x477); + Expression x473=x474.union(x450); + Expression x472=x7.difference(x473); + IntExpression x471=x472.count(); + IntExpression x459=x460.thenElse(x463,x471); + IntExpression x456=x457.thenElse(x458,x459); + Expression x455=x456.toExpression(); + Expression x446=x447.thenElse(x453,x455); + IntExpression x445=x446.sum(); + Formula x409=x410.eq(x445); + Formula x335=x336.and(x409); + Formula x329=x335.forAll(x330); + Formula x241=x242.and(x329); + Formula x240=x241.not(); + Variable x482=Variable.unary("ConvergingRun_t"); + Decls x481=x482.oneOf(x8); + Variable x488=Variable.unary("LeadersAtState_p"); + Decls x487=x488.oneOf(x6); + Expression x491=x482.join(x14); + Expression x490=x488.join(x491); + Formula x489=x490.eq(x18); + Expression x486=x489.comprehension(x487); + Formula x485=x486.one(); + Variable x494=Variable.unary("Legit_p"); + Decls x493=x494.oneOf(x6); + Expression x502=x12.transpose(); + Expression x501=x494.join(x502); + Expression x503=x482.join(x14); + Expression x500=x501.join(x503); + Expression x505=x482.join(x14); + Expression x504=x494.join(x505); + Formula x499=x500.eq(x504); + IntExpression x507=x7.count(); + Expression x506=x507.toExpression(); + Formula x510=x504.eq(x500); + IntExpression x511=IntConstant.constant(0); + Expression x515=x19.closure(); + Expression x514=x500.join(x515); + Formula x513=x504.in(x514); + Expression x520=x19.closure(); + Expression x519=x500.join(x520); + Expression x523=x19.transpose(); + Expression x522=x523.closure(); + Expression x521=x504.join(x522); + Expression x518=x519.intersection(x521); + Expression x517=x518.union(x504); + IntExpression x516=x517.count(); + Expression x529=x19.closure(); + Expression x528=x504.join(x529); + Expression x532=x19.transpose(); + Expression x531=x532.closure(); + Expression x530=x500.join(x531); + Expression x527=x528.intersection(x530); + Expression x526=x527.union(x504); + Expression x525=x7.difference(x526); + IntExpression x524=x525.count(); + IntExpression x512=x513.thenElse(x516,x524); + IntExpression x509=x510.thenElse(x511,x512); + Expression x508=x509.toExpression(); + Expression x498=x499.thenElse(x506,x508); + IntExpression x497=x498.sum(); + IntExpression x533=x7.count(); + Formula x496=x497.lt(x533); + Expression x539=x482.join(x14); + Expression x538=x494.join(x539); + Expression x541=x494.join(x12); + Expression x542=x482.join(x14); + Expression x540=x541.join(x542); + Formula x537=x538.eq(x540); + IntExpression x544=x7.count(); + Expression x543=x544.toExpression(); + Formula x547=x540.eq(x538); + IntExpression x548=IntConstant.constant(0); + Expression x552=x19.closure(); + Expression x551=x538.join(x552); + Formula x550=x540.in(x551); + Expression x557=x19.closure(); + Expression x556=x538.join(x557); + Expression x560=x19.transpose(); + Expression x559=x560.closure(); + Expression x558=x540.join(x559); + Expression x555=x556.intersection(x558); + Expression x554=x555.union(x540); + IntExpression x553=x554.count(); + Expression x566=x19.closure(); + Expression x565=x540.join(x566); + Expression x569=x19.transpose(); + Expression x568=x569.closure(); + Expression x567=x538.join(x568); + Expression x564=x565.intersection(x567); + Expression x563=x564.union(x540); + Expression x562=x7.difference(x563); + IntExpression x561=x562.count(); + IntExpression x549=x550.thenElse(x553,x561); + IntExpression x546=x547.thenElse(x548,x549); + Expression x545=x546.toExpression(); + Expression x536=x537.thenElse(x543,x545); + IntExpression x535=x536.sum(); + IntExpression x570=x7.count(); + Formula x534=x535.lt(x570); + Formula x495=x496.and(x534); + Formula x492=x495.forAll(x493); + Formula x484=x485.and(x492); + Variable x574=Variable.unary("Legit_p"); + Decls x573=x574.oneOf(x6); + Variable x576=Variable.unary("Legit_p'"); + Decls x575=x576.oneOf(x6); + Decls x572=x573.and(x575); + Expression x584=x12.transpose(); + Expression x583=x574.join(x584); + Expression x585=x482.join(x14); + Expression x582=x583.join(x585); + Expression x587=x482.join(x14); + Expression x586=x574.join(x587); + Formula x581=x582.eq(x586); + IntExpression x589=x7.count(); + Expression x588=x589.toExpression(); + Formula x592=x586.eq(x582); + IntExpression x593=IntConstant.constant(0); + Expression x597=x19.closure(); + Expression x596=x582.join(x597); + Formula x595=x586.in(x596); + Expression x602=x19.closure(); + Expression x601=x582.join(x602); + Expression x605=x19.transpose(); + Expression x604=x605.closure(); + Expression x603=x586.join(x604); + Expression x600=x601.intersection(x603); + Expression x599=x600.union(x586); + IntExpression x598=x599.count(); + Expression x611=x19.closure(); + Expression x610=x586.join(x611); + Expression x614=x19.transpose(); + Expression x613=x614.closure(); + Expression x612=x582.join(x613); + Expression x609=x610.intersection(x612); + Expression x608=x609.union(x586); + Expression x607=x7.difference(x608); + IntExpression x606=x607.count(); + IntExpression x594=x595.thenElse(x598,x606); + IntExpression x591=x592.thenElse(x593,x594); + Expression x590=x591.toExpression(); + Expression x580=x581.thenElse(x588,x590); + IntExpression x579=x580.sum(); + Expression x620=x12.transpose(); + Expression x619=x576.join(x620); + Expression x621=x482.join(x14); + Expression x618=x619.join(x621); + Expression x623=x482.join(x14); + Expression x622=x576.join(x623); + Formula x617=x618.eq(x622); + IntExpression x625=x7.count(); + Expression x624=x625.toExpression(); + Formula x628=x622.eq(x618); + IntExpression x629=IntConstant.constant(0); + Expression x633=x19.closure(); + Expression x632=x618.join(x633); + Formula x631=x622.in(x632); + Expression x638=x19.closure(); + Expression x637=x618.join(x638); + Expression x641=x19.transpose(); + Expression x640=x641.closure(); + Expression x639=x622.join(x640); + Expression x636=x637.intersection(x639); + Expression x635=x636.union(x622); + IntExpression x634=x635.count(); + Expression x647=x19.closure(); + Expression x646=x622.join(x647); + Expression x650=x19.transpose(); + Expression x649=x650.closure(); + Expression x648=x618.join(x649); + Expression x645=x646.intersection(x648); + Expression x644=x645.union(x622); + Expression x643=x7.difference(x644); + IntExpression x642=x643.count(); + IntExpression x630=x631.thenElse(x634,x642); + IntExpression x627=x628.thenElse(x629,x630); + Expression x626=x627.toExpression(); + Expression x616=x617.thenElse(x624,x626); + IntExpression x615=x616.sum(); + Formula x578=x579.eq(x615); + Expression x656=x482.join(x14); + Expression x655=x574.join(x656); + Expression x658=x574.join(x12); + Expression x659=x482.join(x14); + Expression x657=x658.join(x659); + Formula x654=x655.eq(x657); + IntExpression x661=x7.count(); + Expression x660=x661.toExpression(); + Formula x664=x657.eq(x655); + IntExpression x665=IntConstant.constant(0); + Expression x669=x19.closure(); + Expression x668=x655.join(x669); + Formula x667=x657.in(x668); + Expression x674=x19.closure(); + Expression x673=x655.join(x674); + Expression x677=x19.transpose(); + Expression x676=x677.closure(); + Expression x675=x657.join(x676); + Expression x672=x673.intersection(x675); + Expression x671=x672.union(x657); + IntExpression x670=x671.count(); + Expression x683=x19.closure(); + Expression x682=x657.join(x683); + Expression x686=x19.transpose(); + Expression x685=x686.closure(); + Expression x684=x655.join(x685); + Expression x681=x682.intersection(x684); + Expression x680=x681.union(x657); + Expression x679=x7.difference(x680); + IntExpression x678=x679.count(); + IntExpression x666=x667.thenElse(x670,x678); + IntExpression x663=x664.thenElse(x665,x666); + Expression x662=x663.toExpression(); + Expression x653=x654.thenElse(x660,x662); + IntExpression x652=x653.sum(); + Expression x691=x482.join(x14); + Expression x690=x576.join(x691); + Expression x693=x576.join(x12); + Expression x694=x482.join(x14); + Expression x692=x693.join(x694); + Formula x689=x690.eq(x692); + IntExpression x696=x7.count(); + Expression x695=x696.toExpression(); + Formula x699=x692.eq(x690); + IntExpression x700=IntConstant.constant(0); + Expression x704=x19.closure(); + Expression x703=x690.join(x704); + Formula x702=x692.in(x703); + Expression x709=x19.closure(); + Expression x708=x690.join(x709); + Expression x712=x19.transpose(); + Expression x711=x712.closure(); + Expression x710=x692.join(x711); + Expression x707=x708.intersection(x710); + Expression x706=x707.union(x692); + IntExpression x705=x706.count(); + Expression x718=x19.closure(); + Expression x717=x692.join(x718); + Expression x721=x19.transpose(); + Expression x720=x721.closure(); + Expression x719=x690.join(x720); + Expression x716=x717.intersection(x719); + Expression x715=x716.union(x692); + Expression x714=x7.difference(x715); + IntExpression x713=x714.count(); + IntExpression x701=x702.thenElse(x705,x713); + IntExpression x698=x699.thenElse(x700,x701); + Expression x697=x698.toExpression(); + Expression x688=x689.thenElse(x695,x697); + IntExpression x687=x688.sum(); + Formula x651=x652.eq(x687); + Formula x577=x578.and(x651); + Formula x571=x577.forAll(x572); + Formula x483=x484.and(x571); + Formula x480=x483.forSome(x481); + Formula x722=x0.eq(x0); + Formula x723=x1.eq(x1); + Formula x724=x2.eq(x2); + Formula x725=x3.eq(x3); + Formula x726=x4.eq(x4); + Formula x727=x5.eq(x5); + Formula x728=x6.eq(x6); + Formula x729=x7.eq(x7); + Formula x730=x8.eq(x8); + Formula x731=x9.eq(x9); + Formula x732=x10.eq(x10); + Formula x733=x11.eq(x11); + Formula x734=x12.eq(x12); + Formula x735=x13.eq(x13); + Formula x736=x14.eq(x14); + Formula x737=x15.eq(x15); + Formula x738=x16.eq(x16); + Formula x739=x17.eq(x17); + Formula x740=x18.eq(x18); + Formula x741=x19.eq(x19); + Formula x742=x20.eq(x20); + Formula x743=x21.eq(x21); + Formula x744=x22.eq(x22); + Formula x745=x23.eq(x23); + Formula x746=x24.eq(x24); + Formula x25=Formula.compose(FormulaOperator.AND, x26, x33, x36, x43, x45, x65, x68, x73, x75, x78, x82, x83, x86, x90, x91, x94, x98, x99, x120, x125, x128, x132, x240, x480, x722, x723, x724, x725, x726, x727, x728, x729, x730, x731, x732, x733, x734, x735, x736, x737, x738, x739, x740, x741, x742, x743, x744, x745, x746); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x25,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadDBadLivenessTraceRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadDBadLivenessTraceRun.java new file mode 100644 index 0000000..4405972 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadDBadLivenessTraceRun.java @@ -0,0 +1,1052 @@ +package kodkod.examples.models.algorithm.election; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "stable_ringlead", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 7, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 49, + Additions = 0, + Subtractions = 1, + Comparison = 26, + OrderedRelations = 3, + Constraints =32 +) + +public final class stable_ringleadDBadLivenessTraceRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Process"); + Relation x7 = Relation.unary("this/Val"); + Relation x8 = Relation.unary("this/State"); + Relation x9 = Relation.unary("po/Ord"); + Relation x10 = Relation.unary("vo/Ord"); + Relation x11 = Relation.unary("so/Ord"); + Relation x12 = Relation.nary("this/Process.rightNeighbor", 2); + Relation x13 = Relation.nary("this/Val.nextVal", 2); + Relation x14 = Relation.nary("this/State.val", 3); + Relation x15 = Relation.nary("this/State.running", 2); + Relation x16 = Relation.unary("po/Ord.First"); + Relation x17 = Relation.nary("po/Ord.Next", 2); + Relation x18 = Relation.unary("vo/Ord.First"); + Relation x19 = Relation.nary("vo/Ord.Next", 2); + Relation x20 = Relation.unary("so/Ord.First"); + Relation x21 = Relation.nary("so/Ord.Next", 2); + Relation x22 = Relation.unary(""); + Relation x23 = Relation.unary(""); + Relation x24 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Process$0", + "Process$1", "Process$2", "State$0", "State$1", "State$2", "State$3", + "Val$0", "Val$1", "Val$2", "po/Ord$0", "so/Ord$0", "vo/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Process$0")); + x6_upper.add(factory.tuple("Process$1")); + x6_upper.add(factory.tuple("Process$2")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Val$0")); + x7_upper.add(factory.tuple("Val$1")); + x7_upper.add(factory.tuple("Val$2")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + x8_upper.add(factory.tuple("State$3")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("po/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("vo/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(3); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("Process$0")); + x16_upper.add(factory.tuple("Process$1")); + x16_upper.add(factory.tuple("Process$2")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Val$0")); + x18_upper.add(factory.tuple("Val$1")); + x18_upper.add(factory.tuple("Val$2")); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(1); + x20_upper.add(factory.tuple("State$0")); + x20_upper.add(factory.tuple("State$1")); + x20_upper.add(factory.tuple("State$2")); + x20_upper.add(factory.tuple("State$3")); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("Process$0")); + x22_upper.add(factory.tuple("Process$1")); + x22_upper.add(factory.tuple("Process$2")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(1); + x23_upper.add(factory.tuple("Val$0")); + x23_upper.add(factory.tuple("Val$1")); + x23_upper.add(factory.tuple("Val$2")); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("State$0")); + x24_upper.add(factory.tuple("State$1")); + x24_upper.add(factory.tuple("State$2")); + x24_upper.add(factory.tuple("State$3")); + bounds.bound(x24, x24_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x28=Variable.unary("ConvergingRun_this"); + Decls x27=x28.oneOf(x6); + Expression x31=x28.join(x12); + Formula x30=x31.one(); + Formula x32=x31.in(x6); + Formula x29=x30.and(x32); + Formula x26=x29.forAll(x27); + Expression x34=x12.join(Expression.UNIV); + Formula x33=x34.in(x6); + Variable x38=Variable.unary("ConvergingRun_this"); + Decls x37=x38.oneOf(x7); + Expression x41=x38.join(x13); + Formula x40=x41.one(); + Formula x42=x41.in(x7); + Formula x39=x40.and(x42); + Formula x36=x39.forAll(x37); + Expression x44=x13.join(Expression.UNIV); + Formula x43=x44.in(x7); + Variable x47=Variable.unary("ConvergingRun_this"); + Decls x46=x47.oneOf(x8); + Expression x51=x47.join(x14); + Expression x52=x6.product(x7); + Formula x50=x51.in(x52); + Variable x55=Variable.unary(""); + Decls x54=x55.oneOf(x6); + Expression x58=x55.join(x51); + Formula x57=x58.one(); + Formula x59=x58.in(x7); + Formula x56=x57.and(x59); + Formula x53=x56.forAll(x54); + Formula x49=x50.and(x53); + Variable x62=Variable.unary(""); + Decls x61=x62.oneOf(x7); + Expression x64=x51.join(x62); + Formula x63=x64.in(x6); + Formula x60=x63.forAll(x61); + Formula x48=x49.and(x60); + Formula x45=x48.forAll(x46); + Expression x67=x14.join(Expression.UNIV); + Expression x66=x67.join(Expression.UNIV); + Formula x65=x66.in(x8); + Variable x70=Variable.unary("ConvergingRun_this"); + Decls x69=x70.oneOf(x8); + Expression x72=x70.join(x15); + Formula x71=x72.in(x6); + Formula x68=x71.forAll(x69); + Expression x74=x15.join(Expression.UNIV); + Formula x73=x74.in(x8); + Expression x77=x9.product(x16); + Expression x76=x9.join(x77); + Formula x75=x76.in(x6); + Expression x80=x9.product(x17); + Expression x79=x9.join(x80); + Expression x81=x6.product(x6); + Formula x78=x79.in(x81); + Formula x82=x17.totalOrder(x6,x16,x22); + Expression x85=x10.product(x18); + Expression x84=x10.join(x85); + Formula x83=x84.in(x7); + Expression x88=x10.product(x19); + Expression x87=x10.join(x88); + Expression x89=x7.product(x7); + Formula x86=x87.in(x89); + Formula x90=x19.totalOrder(x7,x18,x23); + Expression x93=x11.product(x20); + Expression x92=x11.join(x93); + Formula x91=x92.in(x8); + Expression x96=x11.product(x21); + Expression x95=x11.join(x96); + Expression x97=x8.product(x8); + Formula x94=x95.in(x97); + Formula x98=x21.totalOrder(x8,x20,x24); + Variable x101=Variable.unary("ring_n"); + Decls x100=x101.oneOf(x6); + Expression x104=x101.join(x12); + Formula x103=x104.one(); + Expression x108=x12.closure(); + Expression x118=Expression.INTS.union(x5); + Expression x117=x118.union(x6); + Expression x116=x117.union(x7); + Expression x115=x116.union(x8); + Expression x114=x115.union(x9); + Expression x113=x114.union(x10); + Expression x112=x113.union(x11); + Expression x111=x112.product(Expression.UNIV); + Expression x109=Expression.IDEN.intersection(x111); + Expression x107=x108.union(x109); + Expression x106=x101.join(x107); + Formula x105=x6.in(x106); + Formula x102=x103.and(x105); + Formula x99=x102.forAll(x100); + Expression x124=x19.join(x7); + Expression x123=x7.difference(x124); + Expression x122=x123.product(x18); + Expression x121=x19.union(x122); + Formula x120=x121.eq(x13); + IntExpression x126=x7.count(); + IntExpression x127=x6.count(); + Formula x125=x126.eq(x127); + Expression x131=x21.join(x8); + Expression x130=x8.difference(x131); + Expression x129=x130.join(x15); + Formula x128=x129.no(); + Variable x134=Variable.unary("OneAtATimeTrans_tp"); + Expression x135=x8.difference(x130); + Decls x133=x134.oneOf(x135); + Variable x138=Variable.unary("OneAtATimeTrans_p"); + Decls x137=x138.oneOf(x6); + Expression x142=x134.join(x15); + Formula x141=x142.eq(x138); + Expression x146=x134.join(x21); + Expression x145=x146.join(x14); + Expression x144=x138.join(x145); + Expression x156=x12.transpose(); + Expression x155=x138.join(x156); + Expression x157=x134.join(x14); + Expression x154=x155.join(x157); + Expression x159=x134.join(x14); + Expression x158=x138.join(x159); + Formula x153=x154.eq(x158); + IntExpression x161=x7.count(); + Expression x160=x161.toExpression(); + Formula x164=x158.eq(x154); + IntExpression x165=IntConstant.constant(0); + Expression x169=x19.closure(); + Expression x168=x154.join(x169); + Formula x167=x158.in(x168); + Expression x174=x19.closure(); + Expression x173=x154.join(x174); + Expression x177=x19.transpose(); + Expression x176=x177.closure(); + Expression x175=x158.join(x176); + Expression x172=x173.intersection(x175); + Expression x171=x172.union(x158); + IntExpression x170=x171.count(); + Expression x183=x19.closure(); + Expression x182=x158.join(x183); + Expression x186=x19.transpose(); + Expression x185=x186.closure(); + Expression x184=x154.join(x185); + Expression x181=x182.intersection(x184); + Expression x180=x181.union(x158); + Expression x179=x7.difference(x180); + IntExpression x178=x179.count(); + IntExpression x166=x167.thenElse(x170,x178); + IntExpression x163=x164.thenElse(x165,x166); + Expression x162=x163.toExpression(); + Expression x152=x153.thenElse(x160,x162); + IntExpression x151=x152.sum(); + Expression x191=x134.join(x14); + Expression x190=x138.join(x191); + Expression x193=x138.join(x12); + Expression x194=x134.join(x14); + Expression x192=x193.join(x194); + Formula x189=x190.eq(x192); + IntExpression x196=x7.count(); + Expression x195=x196.toExpression(); + Formula x199=x192.eq(x190); + IntExpression x200=IntConstant.constant(0); + Expression x204=x19.closure(); + Expression x203=x190.join(x204); + Formula x202=x192.in(x203); + Expression x209=x19.closure(); + Expression x208=x190.join(x209); + Expression x212=x19.transpose(); + Expression x211=x212.closure(); + Expression x210=x192.join(x211); + Expression x207=x208.intersection(x210); + Expression x206=x207.union(x192); + IntExpression x205=x206.count(); + Expression x218=x19.closure(); + Expression x217=x192.join(x218); + Expression x221=x19.transpose(); + Expression x220=x221.closure(); + Expression x219=x190.join(x220); + Expression x216=x217.intersection(x219); + Expression x215=x216.union(x192); + Expression x214=x7.difference(x215); + IntExpression x213=x214.count(); + IntExpression x201=x202.thenElse(x205,x213); + IntExpression x198=x199.thenElse(x200,x201); + Expression x197=x198.toExpression(); + Expression x188=x189.thenElse(x195,x197); + IntExpression x187=x188.sum(); + Formula x150=x151.eq(x187); + IntExpression x223=x188.sum(); + IntExpression x224=x7.count(); + Formula x222=x223.eq(x224); + Formula x149=x150.and(x222); + IntExpression x226=x152.sum(); + IntExpression x227=x188.sum(); + Formula x225=x226.lt(x227); + Formula x148=x149.or(x225); + Expression x230=x134.join(x14); + Expression x229=x138.join(x230); + Expression x228=x229.join(x13); + Expression x147=x148.thenElse(x228,x229); + Formula x143=x144.eq(x147); + Formula x140=x141.and(x143); + Variable x233=Variable.unary("OneAtATimeTrans_other"); + Expression x234=x6.difference(x138); + Decls x232=x233.oneOf(x234); + Expression x237=x146.join(x14); + Expression x236=x233.join(x237); + Expression x239=x134.join(x14); + Expression x238=x233.join(x239); + Formula x235=x236.eq(x238); + Formula x231=x235.forAll(x232); + Formula x139=x140.and(x231); + Formula x136=x139.forSome(x137); + Formula x132=x136.forAll(x133); + Variable x246=Variable.unary("LeadersAtState_p"); + Decls x245=x246.oneOf(x6); + Expression x249=x20.join(x14); + Expression x248=x246.join(x249); + Formula x247=x248.eq(x18); + Expression x244=x247.comprehension(x245); + Formula x243=x244.one(); + Variable x252=Variable.unary("Legit_p"); + Decls x251=x252.oneOf(x6); + Expression x260=x12.transpose(); + Expression x259=x252.join(x260); + Expression x261=x20.join(x14); + Expression x258=x259.join(x261); + Expression x263=x20.join(x14); + Expression x262=x252.join(x263); + Formula x257=x258.eq(x262); + IntExpression x265=x7.count(); + Expression x264=x265.toExpression(); + Formula x268=x262.eq(x258); + IntExpression x269=IntConstant.constant(0); + Expression x273=x19.closure(); + Expression x272=x258.join(x273); + Formula x271=x262.in(x272); + Expression x278=x19.closure(); + Expression x277=x258.join(x278); + Expression x281=x19.transpose(); + Expression x280=x281.closure(); + Expression x279=x262.join(x280); + Expression x276=x277.intersection(x279); + Expression x275=x276.union(x262); + IntExpression x274=x275.count(); + Expression x287=x19.closure(); + Expression x286=x262.join(x287); + Expression x290=x19.transpose(); + Expression x289=x290.closure(); + Expression x288=x258.join(x289); + Expression x285=x286.intersection(x288); + Expression x284=x285.union(x262); + Expression x283=x7.difference(x284); + IntExpression x282=x283.count(); + IntExpression x270=x271.thenElse(x274,x282); + IntExpression x267=x268.thenElse(x269,x270); + Expression x266=x267.toExpression(); + Expression x256=x257.thenElse(x264,x266); + IntExpression x255=x256.sum(); + IntExpression x291=x7.count(); + Formula x254=x255.lt(x291); + Expression x297=x20.join(x14); + Expression x296=x252.join(x297); + Expression x299=x252.join(x12); + Expression x300=x20.join(x14); + Expression x298=x299.join(x300); + Formula x295=x296.eq(x298); + IntExpression x302=x7.count(); + Expression x301=x302.toExpression(); + Formula x305=x298.eq(x296); + IntExpression x306=IntConstant.constant(0); + Expression x310=x19.closure(); + Expression x309=x296.join(x310); + Formula x308=x298.in(x309); + Expression x315=x19.closure(); + Expression x314=x296.join(x315); + Expression x318=x19.transpose(); + Expression x317=x318.closure(); + Expression x316=x298.join(x317); + Expression x313=x314.intersection(x316); + Expression x312=x313.union(x298); + IntExpression x311=x312.count(); + Expression x324=x19.closure(); + Expression x323=x298.join(x324); + Expression x327=x19.transpose(); + Expression x326=x327.closure(); + Expression x325=x296.join(x326); + Expression x322=x323.intersection(x325); + Expression x321=x322.union(x298); + Expression x320=x7.difference(x321); + IntExpression x319=x320.count(); + IntExpression x307=x308.thenElse(x311,x319); + IntExpression x304=x305.thenElse(x306,x307); + Expression x303=x304.toExpression(); + Expression x294=x295.thenElse(x301,x303); + IntExpression x293=x294.sum(); + IntExpression x328=x7.count(); + Formula x292=x293.lt(x328); + Formula x253=x254.and(x292); + Formula x250=x253.forAll(x251); + Formula x242=x243.and(x250); + Variable x332=Variable.unary("Legit_p"); + Decls x331=x332.oneOf(x6); + Variable x334=Variable.unary("Legit_p'"); + Decls x333=x334.oneOf(x6); + Decls x330=x331.and(x333); + Expression x342=x12.transpose(); + Expression x341=x332.join(x342); + Expression x343=x20.join(x14); + Expression x340=x341.join(x343); + Expression x345=x20.join(x14); + Expression x344=x332.join(x345); + Formula x339=x340.eq(x344); + IntExpression x347=x7.count(); + Expression x346=x347.toExpression(); + Formula x350=x344.eq(x340); + IntExpression x351=IntConstant.constant(0); + Expression x355=x19.closure(); + Expression x354=x340.join(x355); + Formula x353=x344.in(x354); + Expression x360=x19.closure(); + Expression x359=x340.join(x360); + Expression x363=x19.transpose(); + Expression x362=x363.closure(); + Expression x361=x344.join(x362); + Expression x358=x359.intersection(x361); + Expression x357=x358.union(x344); + IntExpression x356=x357.count(); + Expression x369=x19.closure(); + Expression x368=x344.join(x369); + Expression x372=x19.transpose(); + Expression x371=x372.closure(); + Expression x370=x340.join(x371); + Expression x367=x368.intersection(x370); + Expression x366=x367.union(x344); + Expression x365=x7.difference(x366); + IntExpression x364=x365.count(); + IntExpression x352=x353.thenElse(x356,x364); + IntExpression x349=x350.thenElse(x351,x352); + Expression x348=x349.toExpression(); + Expression x338=x339.thenElse(x346,x348); + IntExpression x337=x338.sum(); + Expression x378=x12.transpose(); + Expression x377=x334.join(x378); + Expression x379=x20.join(x14); + Expression x376=x377.join(x379); + Expression x381=x20.join(x14); + Expression x380=x334.join(x381); + Formula x375=x376.eq(x380); + IntExpression x383=x7.count(); + Expression x382=x383.toExpression(); + Formula x386=x380.eq(x376); + IntExpression x387=IntConstant.constant(0); + Expression x391=x19.closure(); + Expression x390=x376.join(x391); + Formula x389=x380.in(x390); + Expression x396=x19.closure(); + Expression x395=x376.join(x396); + Expression x399=x19.transpose(); + Expression x398=x399.closure(); + Expression x397=x380.join(x398); + Expression x394=x395.intersection(x397); + Expression x393=x394.union(x380); + IntExpression x392=x393.count(); + Expression x405=x19.closure(); + Expression x404=x380.join(x405); + Expression x408=x19.transpose(); + Expression x407=x408.closure(); + Expression x406=x376.join(x407); + Expression x403=x404.intersection(x406); + Expression x402=x403.union(x380); + Expression x401=x7.difference(x402); + IntExpression x400=x401.count(); + IntExpression x388=x389.thenElse(x392,x400); + IntExpression x385=x386.thenElse(x387,x388); + Expression x384=x385.toExpression(); + Expression x374=x375.thenElse(x382,x384); + IntExpression x373=x374.sum(); + Formula x336=x337.eq(x373); + Expression x414=x20.join(x14); + Expression x413=x332.join(x414); + Expression x416=x332.join(x12); + Expression x417=x20.join(x14); + Expression x415=x416.join(x417); + Formula x412=x413.eq(x415); + IntExpression x419=x7.count(); + Expression x418=x419.toExpression(); + Formula x422=x415.eq(x413); + IntExpression x423=IntConstant.constant(0); + Expression x427=x19.closure(); + Expression x426=x413.join(x427); + Formula x425=x415.in(x426); + Expression x432=x19.closure(); + Expression x431=x413.join(x432); + Expression x435=x19.transpose(); + Expression x434=x435.closure(); + Expression x433=x415.join(x434); + Expression x430=x431.intersection(x433); + Expression x429=x430.union(x415); + IntExpression x428=x429.count(); + Expression x441=x19.closure(); + Expression x440=x415.join(x441); + Expression x444=x19.transpose(); + Expression x443=x444.closure(); + Expression x442=x413.join(x443); + Expression x439=x440.intersection(x442); + Expression x438=x439.union(x415); + Expression x437=x7.difference(x438); + IntExpression x436=x437.count(); + IntExpression x424=x425.thenElse(x428,x436); + IntExpression x421=x422.thenElse(x423,x424); + Expression x420=x421.toExpression(); + Expression x411=x412.thenElse(x418,x420); + IntExpression x410=x411.sum(); + Expression x449=x20.join(x14); + Expression x448=x334.join(x449); + Expression x451=x334.join(x12); + Expression x452=x20.join(x14); + Expression x450=x451.join(x452); + Formula x447=x448.eq(x450); + IntExpression x454=x7.count(); + Expression x453=x454.toExpression(); + Formula x457=x450.eq(x448); + IntExpression x458=IntConstant.constant(0); + Expression x462=x19.closure(); + Expression x461=x448.join(x462); + Formula x460=x450.in(x461); + Expression x467=x19.closure(); + Expression x466=x448.join(x467); + Expression x470=x19.transpose(); + Expression x469=x470.closure(); + Expression x468=x450.join(x469); + Expression x465=x466.intersection(x468); + Expression x464=x465.union(x450); + IntExpression x463=x464.count(); + Expression x476=x19.closure(); + Expression x475=x450.join(x476); + Expression x479=x19.transpose(); + Expression x478=x479.closure(); + Expression x477=x448.join(x478); + Expression x474=x475.intersection(x477); + Expression x473=x474.union(x450); + Expression x472=x7.difference(x473); + IntExpression x471=x472.count(); + IntExpression x459=x460.thenElse(x463,x471); + IntExpression x456=x457.thenElse(x458,x459); + Expression x455=x456.toExpression(); + Expression x446=x447.thenElse(x453,x455); + IntExpression x445=x446.sum(); + Formula x409=x410.eq(x445); + Formula x335=x336.and(x409); + Formula x329=x335.forAll(x330); + Formula x241=x242.and(x329); + Formula x240=x241.not(); + Variable x482=Variable.unary("ConvergingRun_t"); + Decls x481=x482.oneOf(x8); + Variable x488=Variable.unary("LeadersAtState_p"); + Decls x487=x488.oneOf(x6); + Expression x491=x482.join(x14); + Expression x490=x488.join(x491); + Formula x489=x490.eq(x18); + Expression x486=x489.comprehension(x487); + Formula x485=x486.one(); + Variable x494=Variable.unary("Legit_p"); + Decls x493=x494.oneOf(x6); + Expression x502=x12.transpose(); + Expression x501=x494.join(x502); + Expression x503=x482.join(x14); + Expression x500=x501.join(x503); + Expression x505=x482.join(x14); + Expression x504=x494.join(x505); + Formula x499=x500.eq(x504); + IntExpression x507=x7.count(); + Expression x506=x507.toExpression(); + Formula x510=x504.eq(x500); + IntExpression x511=IntConstant.constant(0); + Expression x515=x19.closure(); + Expression x514=x500.join(x515); + Formula x513=x504.in(x514); + Expression x520=x19.closure(); + Expression x519=x500.join(x520); + Expression x523=x19.transpose(); + Expression x522=x523.closure(); + Expression x521=x504.join(x522); + Expression x518=x519.intersection(x521); + Expression x517=x518.union(x504); + IntExpression x516=x517.count(); + Expression x529=x19.closure(); + Expression x528=x504.join(x529); + Expression x532=x19.transpose(); + Expression x531=x532.closure(); + Expression x530=x500.join(x531); + Expression x527=x528.intersection(x530); + Expression x526=x527.union(x504); + Expression x525=x7.difference(x526); + IntExpression x524=x525.count(); + IntExpression x512=x513.thenElse(x516,x524); + IntExpression x509=x510.thenElse(x511,x512); + Expression x508=x509.toExpression(); + Expression x498=x499.thenElse(x506,x508); + IntExpression x497=x498.sum(); + IntExpression x533=x7.count(); + Formula x496=x497.lt(x533); + Expression x539=x482.join(x14); + Expression x538=x494.join(x539); + Expression x541=x494.join(x12); + Expression x542=x482.join(x14); + Expression x540=x541.join(x542); + Formula x537=x538.eq(x540); + IntExpression x544=x7.count(); + Expression x543=x544.toExpression(); + Formula x547=x540.eq(x538); + IntExpression x548=IntConstant.constant(0); + Expression x552=x19.closure(); + Expression x551=x538.join(x552); + Formula x550=x540.in(x551); + Expression x557=x19.closure(); + Expression x556=x538.join(x557); + Expression x560=x19.transpose(); + Expression x559=x560.closure(); + Expression x558=x540.join(x559); + Expression x555=x556.intersection(x558); + Expression x554=x555.union(x540); + IntExpression x553=x554.count(); + Expression x566=x19.closure(); + Expression x565=x540.join(x566); + Expression x569=x19.transpose(); + Expression x568=x569.closure(); + Expression x567=x538.join(x568); + Expression x564=x565.intersection(x567); + Expression x563=x564.union(x540); + Expression x562=x7.difference(x563); + IntExpression x561=x562.count(); + IntExpression x549=x550.thenElse(x553,x561); + IntExpression x546=x547.thenElse(x548,x549); + Expression x545=x546.toExpression(); + Expression x536=x537.thenElse(x543,x545); + IntExpression x535=x536.sum(); + IntExpression x570=x7.count(); + Formula x534=x535.lt(x570); + Formula x495=x496.and(x534); + Formula x492=x495.forAll(x493); + Formula x484=x485.and(x492); + Variable x574=Variable.unary("Legit_p"); + Decls x573=x574.oneOf(x6); + Variable x576=Variable.unary("Legit_p'"); + Decls x575=x576.oneOf(x6); + Decls x572=x573.and(x575); + Expression x584=x12.transpose(); + Expression x583=x574.join(x584); + Expression x585=x482.join(x14); + Expression x582=x583.join(x585); + Expression x587=x482.join(x14); + Expression x586=x574.join(x587); + Formula x581=x582.eq(x586); + IntExpression x589=x7.count(); + Expression x588=x589.toExpression(); + Formula x592=x586.eq(x582); + IntExpression x593=IntConstant.constant(0); + Expression x597=x19.closure(); + Expression x596=x582.join(x597); + Formula x595=x586.in(x596); + Expression x602=x19.closure(); + Expression x601=x582.join(x602); + Expression x605=x19.transpose(); + Expression x604=x605.closure(); + Expression x603=x586.join(x604); + Expression x600=x601.intersection(x603); + Expression x599=x600.union(x586); + IntExpression x598=x599.count(); + Expression x611=x19.closure(); + Expression x610=x586.join(x611); + Expression x614=x19.transpose(); + Expression x613=x614.closure(); + Expression x612=x582.join(x613); + Expression x609=x610.intersection(x612); + Expression x608=x609.union(x586); + Expression x607=x7.difference(x608); + IntExpression x606=x607.count(); + IntExpression x594=x595.thenElse(x598,x606); + IntExpression x591=x592.thenElse(x593,x594); + Expression x590=x591.toExpression(); + Expression x580=x581.thenElse(x588,x590); + IntExpression x579=x580.sum(); + Expression x620=x12.transpose(); + Expression x619=x576.join(x620); + Expression x621=x482.join(x14); + Expression x618=x619.join(x621); + Expression x623=x482.join(x14); + Expression x622=x576.join(x623); + Formula x617=x618.eq(x622); + IntExpression x625=x7.count(); + Expression x624=x625.toExpression(); + Formula x628=x622.eq(x618); + IntExpression x629=IntConstant.constant(0); + Expression x633=x19.closure(); + Expression x632=x618.join(x633); + Formula x631=x622.in(x632); + Expression x638=x19.closure(); + Expression x637=x618.join(x638); + Expression x641=x19.transpose(); + Expression x640=x641.closure(); + Expression x639=x622.join(x640); + Expression x636=x637.intersection(x639); + Expression x635=x636.union(x622); + IntExpression x634=x635.count(); + Expression x647=x19.closure(); + Expression x646=x622.join(x647); + Expression x650=x19.transpose(); + Expression x649=x650.closure(); + Expression x648=x618.join(x649); + Expression x645=x646.intersection(x648); + Expression x644=x645.union(x622); + Expression x643=x7.difference(x644); + IntExpression x642=x643.count(); + IntExpression x630=x631.thenElse(x634,x642); + IntExpression x627=x628.thenElse(x629,x630); + Expression x626=x627.toExpression(); + Expression x616=x617.thenElse(x624,x626); + IntExpression x615=x616.sum(); + Formula x578=x579.eq(x615); + Expression x656=x482.join(x14); + Expression x655=x574.join(x656); + Expression x658=x574.join(x12); + Expression x659=x482.join(x14); + Expression x657=x658.join(x659); + Formula x654=x655.eq(x657); + IntExpression x661=x7.count(); + Expression x660=x661.toExpression(); + Formula x664=x657.eq(x655); + IntExpression x665=IntConstant.constant(0); + Expression x669=x19.closure(); + Expression x668=x655.join(x669); + Formula x667=x657.in(x668); + Expression x674=x19.closure(); + Expression x673=x655.join(x674); + Expression x677=x19.transpose(); + Expression x676=x677.closure(); + Expression x675=x657.join(x676); + Expression x672=x673.intersection(x675); + Expression x671=x672.union(x657); + IntExpression x670=x671.count(); + Expression x683=x19.closure(); + Expression x682=x657.join(x683); + Expression x686=x19.transpose(); + Expression x685=x686.closure(); + Expression x684=x655.join(x685); + Expression x681=x682.intersection(x684); + Expression x680=x681.union(x657); + Expression x679=x7.difference(x680); + IntExpression x678=x679.count(); + IntExpression x666=x667.thenElse(x670,x678); + IntExpression x663=x664.thenElse(x665,x666); + Expression x662=x663.toExpression(); + Expression x653=x654.thenElse(x660,x662); + IntExpression x652=x653.sum(); + Expression x691=x482.join(x14); + Expression x690=x576.join(x691); + Expression x693=x576.join(x12); + Expression x694=x482.join(x14); + Expression x692=x693.join(x694); + Formula x689=x690.eq(x692); + IntExpression x696=x7.count(); + Expression x695=x696.toExpression(); + Formula x699=x692.eq(x690); + IntExpression x700=IntConstant.constant(0); + Expression x704=x19.closure(); + Expression x703=x690.join(x704); + Formula x702=x692.in(x703); + Expression x709=x19.closure(); + Expression x708=x690.join(x709); + Expression x712=x19.transpose(); + Expression x711=x712.closure(); + Expression x710=x692.join(x711); + Expression x707=x708.intersection(x710); + Expression x706=x707.union(x692); + IntExpression x705=x706.count(); + Expression x718=x19.closure(); + Expression x717=x692.join(x718); + Expression x721=x19.transpose(); + Expression x720=x721.closure(); + Expression x719=x690.join(x720); + Expression x716=x717.intersection(x719); + Expression x715=x716.union(x692); + Expression x714=x7.difference(x715); + IntExpression x713=x714.count(); + IntExpression x701=x702.thenElse(x705,x713); + IntExpression x698=x699.thenElse(x700,x701); + Expression x697=x698.toExpression(); + Expression x688=x689.thenElse(x695,x697); + IntExpression x687=x688.sum(); + Formula x651=x652.eq(x687); + Formula x577=x578.and(x651); + Formula x571=x577.forAll(x572); + Formula x483=x484.and(x571); + Formula x480=x483.forSome(x481); + Formula x722=x0.eq(x0); + Formula x723=x1.eq(x1); + Formula x724=x2.eq(x2); + Formula x725=x3.eq(x3); + Formula x726=x4.eq(x4); + Formula x727=x5.eq(x5); + Formula x728=x6.eq(x6); + Formula x729=x7.eq(x7); + Formula x730=x8.eq(x8); + Formula x731=x9.eq(x9); + Formula x732=x10.eq(x10); + Formula x733=x11.eq(x11); + Formula x734=x12.eq(x12); + Formula x735=x13.eq(x13); + Formula x736=x14.eq(x14); + Formula x737=x15.eq(x15); + Formula x738=x16.eq(x16); + Formula x739=x17.eq(x17); + Formula x740=x18.eq(x18); + Formula x741=x19.eq(x19); + Formula x742=x20.eq(x20); + Formula x743=x21.eq(x21); + Formula x744=x22.eq(x22); + Formula x745=x23.eq(x23); + Formula x746=x24.eq(x24); + Formula x25=Formula.compose(FormulaOperator.AND, x26, x33, x36, x43, x45, x65, x68, x73, x75, x78, x82, x83, x86, x90, x91, x94, x98, x99, x120, x125, x128, x132, x240, x480, x722, x723, x724, x725, x726, x727, x728, x729, x730, x731, x732, x733, x734, x735, x736, x737, x738, x739, x740, x741, x742, x743, x744, x745, x746); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x25,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadDTraceWithoutLoopRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadDTraceWithoutLoopRun.java new file mode 100644 index 0000000..a35f667 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/election/stable_ringleadDTraceWithoutLoopRun.java @@ -0,0 +1,1053 @@ +package kodkod.examples.models.algorithm.election; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "stable_ringlead", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 7, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 49, + Additions = 0, + Subtractions = 1, + Comparison = 26, + OrderedRelations = 3, + Constraints =32 +) + + +public final class stable_ringleadDTraceWithoutLoopRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Process"); + Relation x7 = Relation.unary("this/Val"); + Relation x8 = Relation.unary("this/State"); + Relation x9 = Relation.unary("po/Ord"); + Relation x10 = Relation.unary("vo/Ord"); + Relation x11 = Relation.unary("so/Ord"); + Relation x12 = Relation.nary("this/Process.rightNeighbor", 2); + Relation x13 = Relation.nary("this/Val.nextVal", 2); + Relation x14 = Relation.nary("this/State.val", 3); + Relation x15 = Relation.nary("this/State.running", 2); + Relation x16 = Relation.unary("po/Ord.First"); + Relation x17 = Relation.nary("po/Ord.Next", 2); + Relation x18 = Relation.unary("vo/Ord.First"); + Relation x19 = Relation.nary("vo/Ord.Next", 2); + Relation x20 = Relation.unary("so/Ord.First"); + Relation x21 = Relation.nary("so/Ord.Next", 2); + Relation x22 = Relation.unary(""); + Relation x23 = Relation.unary(""); + Relation x24 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Process$0", + "Process$1", "Process$2", "State$0", "State$1", "State$2", "State$3", + "Val$0", "Val$1", "Val$2", "po/Ord$0", "so/Ord$0", "vo/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Process$0")); + x6_upper.add(factory.tuple("Process$1")); + x6_upper.add(factory.tuple("Process$2")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Val$0")); + x7_upper.add(factory.tuple("Val$1")); + x7_upper.add(factory.tuple("Val$2")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + x8_upper.add(factory.tuple("State$3")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("po/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("vo/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(3); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("Process$0")); + x16_upper.add(factory.tuple("Process$1")); + x16_upper.add(factory.tuple("Process$2")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x17_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Val$0")); + x18_upper.add(factory.tuple("Val$1")); + x18_upper.add(factory.tuple("Val$2")); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x19_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(1); + x20_upper.add(factory.tuple("State$0")); + x20_upper.add(factory.tuple("State$1")); + x20_upper.add(factory.tuple("State$2")); + x20_upper.add(factory.tuple("State$3")); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("Process$0")); + x22_upper.add(factory.tuple("Process$1")); + x22_upper.add(factory.tuple("Process$2")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(1); + x23_upper.add(factory.tuple("Val$0")); + x23_upper.add(factory.tuple("Val$1")); + x23_upper.add(factory.tuple("Val$2")); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("State$0")); + x24_upper.add(factory.tuple("State$1")); + x24_upper.add(factory.tuple("State$2")); + x24_upper.add(factory.tuple("State$3")); + bounds.bound(x24, x24_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x28=Variable.unary("ConvergingRun_this"); + Decls x27=x28.oneOf(x6); + Expression x31=x28.join(x12); + Formula x30=x31.one(); + Formula x32=x31.in(x6); + Formula x29=x30.and(x32); + Formula x26=x29.forAll(x27); + Expression x34=x12.join(Expression.UNIV); + Formula x33=x34.in(x6); + Variable x38=Variable.unary("ConvergingRun_this"); + Decls x37=x38.oneOf(x7); + Expression x41=x38.join(x13); + Formula x40=x41.one(); + Formula x42=x41.in(x7); + Formula x39=x40.and(x42); + Formula x36=x39.forAll(x37); + Expression x44=x13.join(Expression.UNIV); + Formula x43=x44.in(x7); + Variable x47=Variable.unary("ConvergingRun_this"); + Decls x46=x47.oneOf(x8); + Expression x51=x47.join(x14); + Expression x52=x6.product(x7); + Formula x50=x51.in(x52); + Variable x55=Variable.unary(""); + Decls x54=x55.oneOf(x6); + Expression x58=x55.join(x51); + Formula x57=x58.one(); + Formula x59=x58.in(x7); + Formula x56=x57.and(x59); + Formula x53=x56.forAll(x54); + Formula x49=x50.and(x53); + Variable x62=Variable.unary(""); + Decls x61=x62.oneOf(x7); + Expression x64=x51.join(x62); + Formula x63=x64.in(x6); + Formula x60=x63.forAll(x61); + Formula x48=x49.and(x60); + Formula x45=x48.forAll(x46); + Expression x67=x14.join(Expression.UNIV); + Expression x66=x67.join(Expression.UNIV); + Formula x65=x66.in(x8); + Variable x70=Variable.unary("ConvergingRun_this"); + Decls x69=x70.oneOf(x8); + Expression x72=x70.join(x15); + Formula x71=x72.in(x6); + Formula x68=x71.forAll(x69); + Expression x74=x15.join(Expression.UNIV); + Formula x73=x74.in(x8); + Expression x77=x9.product(x16); + Expression x76=x9.join(x77); + Formula x75=x76.in(x6); + Expression x80=x9.product(x17); + Expression x79=x9.join(x80); + Expression x81=x6.product(x6); + Formula x78=x79.in(x81); + Formula x82=x17.totalOrder(x6,x16,x22); + Expression x85=x10.product(x18); + Expression x84=x10.join(x85); + Formula x83=x84.in(x7); + Expression x88=x10.product(x19); + Expression x87=x10.join(x88); + Expression x89=x7.product(x7); + Formula x86=x87.in(x89); + Formula x90=x19.totalOrder(x7,x18,x23); + Expression x93=x11.product(x20); + Expression x92=x11.join(x93); + Formula x91=x92.in(x8); + Expression x96=x11.product(x21); + Expression x95=x11.join(x96); + Expression x97=x8.product(x8); + Formula x94=x95.in(x97); + Formula x98=x21.totalOrder(x8,x20,x24); + Variable x101=Variable.unary("ring_n"); + Decls x100=x101.oneOf(x6); + Expression x104=x101.join(x12); + Formula x103=x104.one(); + Expression x108=x12.closure(); + Expression x118=Expression.INTS.union(x5); + Expression x117=x118.union(x6); + Expression x116=x117.union(x7); + Expression x115=x116.union(x8); + Expression x114=x115.union(x9); + Expression x113=x114.union(x10); + Expression x112=x113.union(x11); + Expression x111=x112.product(Expression.UNIV); + Expression x109=Expression.IDEN.intersection(x111); + Expression x107=x108.union(x109); + Expression x106=x101.join(x107); + Formula x105=x6.in(x106); + Formula x102=x103.and(x105); + Formula x99=x102.forAll(x100); + Expression x124=x19.join(x7); + Expression x123=x7.difference(x124); + Expression x122=x123.product(x18); + Expression x121=x19.union(x122); + Formula x120=x121.eq(x13); + IntExpression x126=x7.count(); + IntExpression x127=x6.count(); + Formula x125=x126.eq(x127); + Expression x131=x21.join(x8); + Expression x130=x8.difference(x131); + Expression x129=x130.join(x15); + Formula x128=x129.no(); + Variable x134=Variable.unary("OneAtATimeTrans_tp"); + Expression x135=x8.difference(x130); + Decls x133=x134.oneOf(x135); + Variable x138=Variable.unary("OneAtATimeTrans_p"); + Decls x137=x138.oneOf(x6); + Expression x142=x134.join(x15); + Formula x141=x142.eq(x138); + Expression x146=x134.join(x21); + Expression x145=x146.join(x14); + Expression x144=x138.join(x145); + Expression x156=x12.transpose(); + Expression x155=x138.join(x156); + Expression x157=x134.join(x14); + Expression x154=x155.join(x157); + Expression x159=x134.join(x14); + Expression x158=x138.join(x159); + Formula x153=x154.eq(x158); + IntExpression x161=x7.count(); + Expression x160=x161.toExpression(); + Formula x164=x158.eq(x154); + IntExpression x165=IntConstant.constant(0); + Expression x169=x19.closure(); + Expression x168=x154.join(x169); + Formula x167=x158.in(x168); + Expression x174=x19.closure(); + Expression x173=x154.join(x174); + Expression x177=x19.transpose(); + Expression x176=x177.closure(); + Expression x175=x158.join(x176); + Expression x172=x173.intersection(x175); + Expression x171=x172.union(x158); + IntExpression x170=x171.count(); + Expression x183=x19.closure(); + Expression x182=x158.join(x183); + Expression x186=x19.transpose(); + Expression x185=x186.closure(); + Expression x184=x154.join(x185); + Expression x181=x182.intersection(x184); + Expression x180=x181.union(x158); + Expression x179=x7.difference(x180); + IntExpression x178=x179.count(); + IntExpression x166=x167.thenElse(x170,x178); + IntExpression x163=x164.thenElse(x165,x166); + Expression x162=x163.toExpression(); + Expression x152=x153.thenElse(x160,x162); + IntExpression x151=x152.sum(); + Expression x191=x134.join(x14); + Expression x190=x138.join(x191); + Expression x193=x138.join(x12); + Expression x194=x134.join(x14); + Expression x192=x193.join(x194); + Formula x189=x190.eq(x192); + IntExpression x196=x7.count(); + Expression x195=x196.toExpression(); + Formula x199=x192.eq(x190); + IntExpression x200=IntConstant.constant(0); + Expression x204=x19.closure(); + Expression x203=x190.join(x204); + Formula x202=x192.in(x203); + Expression x209=x19.closure(); + Expression x208=x190.join(x209); + Expression x212=x19.transpose(); + Expression x211=x212.closure(); + Expression x210=x192.join(x211); + Expression x207=x208.intersection(x210); + Expression x206=x207.union(x192); + IntExpression x205=x206.count(); + Expression x218=x19.closure(); + Expression x217=x192.join(x218); + Expression x221=x19.transpose(); + Expression x220=x221.closure(); + Expression x219=x190.join(x220); + Expression x216=x217.intersection(x219); + Expression x215=x216.union(x192); + Expression x214=x7.difference(x215); + IntExpression x213=x214.count(); + IntExpression x201=x202.thenElse(x205,x213); + IntExpression x198=x199.thenElse(x200,x201); + Expression x197=x198.toExpression(); + Expression x188=x189.thenElse(x195,x197); + IntExpression x187=x188.sum(); + Formula x150=x151.eq(x187); + IntExpression x223=x188.sum(); + IntExpression x224=x7.count(); + Formula x222=x223.eq(x224); + Formula x149=x150.and(x222); + IntExpression x226=x152.sum(); + IntExpression x227=x188.sum(); + Formula x225=x226.lt(x227); + Formula x148=x149.or(x225); + Expression x230=x134.join(x14); + Expression x229=x138.join(x230); + Expression x228=x229.join(x13); + Expression x147=x148.thenElse(x228,x229); + Formula x143=x144.eq(x147); + Formula x140=x141.and(x143); + Variable x233=Variable.unary("OneAtATimeTrans_other"); + Expression x234=x6.difference(x138); + Decls x232=x233.oneOf(x234); + Expression x237=x146.join(x14); + Expression x236=x233.join(x237); + Expression x239=x134.join(x14); + Expression x238=x233.join(x239); + Formula x235=x236.eq(x238); + Formula x231=x235.forAll(x232); + Formula x139=x140.and(x231); + Formula x136=x139.forSome(x137); + Formula x132=x136.forAll(x133); + Variable x246=Variable.unary("LeadersAtState_p"); + Decls x245=x246.oneOf(x6); + Expression x249=x20.join(x14); + Expression x248=x246.join(x249); + Formula x247=x248.eq(x18); + Expression x244=x247.comprehension(x245); + Formula x243=x244.one(); + Variable x252=Variable.unary("Legit_p"); + Decls x251=x252.oneOf(x6); + Expression x260=x12.transpose(); + Expression x259=x252.join(x260); + Expression x261=x20.join(x14); + Expression x258=x259.join(x261); + Expression x263=x20.join(x14); + Expression x262=x252.join(x263); + Formula x257=x258.eq(x262); + IntExpression x265=x7.count(); + Expression x264=x265.toExpression(); + Formula x268=x262.eq(x258); + IntExpression x269=IntConstant.constant(0); + Expression x273=x19.closure(); + Expression x272=x258.join(x273); + Formula x271=x262.in(x272); + Expression x278=x19.closure(); + Expression x277=x258.join(x278); + Expression x281=x19.transpose(); + Expression x280=x281.closure(); + Expression x279=x262.join(x280); + Expression x276=x277.intersection(x279); + Expression x275=x276.union(x262); + IntExpression x274=x275.count(); + Expression x287=x19.closure(); + Expression x286=x262.join(x287); + Expression x290=x19.transpose(); + Expression x289=x290.closure(); + Expression x288=x258.join(x289); + Expression x285=x286.intersection(x288); + Expression x284=x285.union(x262); + Expression x283=x7.difference(x284); + IntExpression x282=x283.count(); + IntExpression x270=x271.thenElse(x274,x282); + IntExpression x267=x268.thenElse(x269,x270); + Expression x266=x267.toExpression(); + Expression x256=x257.thenElse(x264,x266); + IntExpression x255=x256.sum(); + IntExpression x291=x7.count(); + Formula x254=x255.lt(x291); + Expression x297=x20.join(x14); + Expression x296=x252.join(x297); + Expression x299=x252.join(x12); + Expression x300=x20.join(x14); + Expression x298=x299.join(x300); + Formula x295=x296.eq(x298); + IntExpression x302=x7.count(); + Expression x301=x302.toExpression(); + Formula x305=x298.eq(x296); + IntExpression x306=IntConstant.constant(0); + Expression x310=x19.closure(); + Expression x309=x296.join(x310); + Formula x308=x298.in(x309); + Expression x315=x19.closure(); + Expression x314=x296.join(x315); + Expression x318=x19.transpose(); + Expression x317=x318.closure(); + Expression x316=x298.join(x317); + Expression x313=x314.intersection(x316); + Expression x312=x313.union(x298); + IntExpression x311=x312.count(); + Expression x324=x19.closure(); + Expression x323=x298.join(x324); + Expression x327=x19.transpose(); + Expression x326=x327.closure(); + Expression x325=x296.join(x326); + Expression x322=x323.intersection(x325); + Expression x321=x322.union(x298); + Expression x320=x7.difference(x321); + IntExpression x319=x320.count(); + IntExpression x307=x308.thenElse(x311,x319); + IntExpression x304=x305.thenElse(x306,x307); + Expression x303=x304.toExpression(); + Expression x294=x295.thenElse(x301,x303); + IntExpression x293=x294.sum(); + IntExpression x328=x7.count(); + Formula x292=x293.lt(x328); + Formula x253=x254.and(x292); + Formula x250=x253.forAll(x251); + Formula x242=x243.and(x250); + Variable x332=Variable.unary("Legit_p"); + Decls x331=x332.oneOf(x6); + Variable x334=Variable.unary("Legit_p'"); + Decls x333=x334.oneOf(x6); + Decls x330=x331.and(x333); + Expression x342=x12.transpose(); + Expression x341=x332.join(x342); + Expression x343=x20.join(x14); + Expression x340=x341.join(x343); + Expression x345=x20.join(x14); + Expression x344=x332.join(x345); + Formula x339=x340.eq(x344); + IntExpression x347=x7.count(); + Expression x346=x347.toExpression(); + Formula x350=x344.eq(x340); + IntExpression x351=IntConstant.constant(0); + Expression x355=x19.closure(); + Expression x354=x340.join(x355); + Formula x353=x344.in(x354); + Expression x360=x19.closure(); + Expression x359=x340.join(x360); + Expression x363=x19.transpose(); + Expression x362=x363.closure(); + Expression x361=x344.join(x362); + Expression x358=x359.intersection(x361); + Expression x357=x358.union(x344); + IntExpression x356=x357.count(); + Expression x369=x19.closure(); + Expression x368=x344.join(x369); + Expression x372=x19.transpose(); + Expression x371=x372.closure(); + Expression x370=x340.join(x371); + Expression x367=x368.intersection(x370); + Expression x366=x367.union(x344); + Expression x365=x7.difference(x366); + IntExpression x364=x365.count(); + IntExpression x352=x353.thenElse(x356,x364); + IntExpression x349=x350.thenElse(x351,x352); + Expression x348=x349.toExpression(); + Expression x338=x339.thenElse(x346,x348); + IntExpression x337=x338.sum(); + Expression x378=x12.transpose(); + Expression x377=x334.join(x378); + Expression x379=x20.join(x14); + Expression x376=x377.join(x379); + Expression x381=x20.join(x14); + Expression x380=x334.join(x381); + Formula x375=x376.eq(x380); + IntExpression x383=x7.count(); + Expression x382=x383.toExpression(); + Formula x386=x380.eq(x376); + IntExpression x387=IntConstant.constant(0); + Expression x391=x19.closure(); + Expression x390=x376.join(x391); + Formula x389=x380.in(x390); + Expression x396=x19.closure(); + Expression x395=x376.join(x396); + Expression x399=x19.transpose(); + Expression x398=x399.closure(); + Expression x397=x380.join(x398); + Expression x394=x395.intersection(x397); + Expression x393=x394.union(x380); + IntExpression x392=x393.count(); + Expression x405=x19.closure(); + Expression x404=x380.join(x405); + Expression x408=x19.transpose(); + Expression x407=x408.closure(); + Expression x406=x376.join(x407); + Expression x403=x404.intersection(x406); + Expression x402=x403.union(x380); + Expression x401=x7.difference(x402); + IntExpression x400=x401.count(); + IntExpression x388=x389.thenElse(x392,x400); + IntExpression x385=x386.thenElse(x387,x388); + Expression x384=x385.toExpression(); + Expression x374=x375.thenElse(x382,x384); + IntExpression x373=x374.sum(); + Formula x336=x337.eq(x373); + Expression x414=x20.join(x14); + Expression x413=x332.join(x414); + Expression x416=x332.join(x12); + Expression x417=x20.join(x14); + Expression x415=x416.join(x417); + Formula x412=x413.eq(x415); + IntExpression x419=x7.count(); + Expression x418=x419.toExpression(); + Formula x422=x415.eq(x413); + IntExpression x423=IntConstant.constant(0); + Expression x427=x19.closure(); + Expression x426=x413.join(x427); + Formula x425=x415.in(x426); + Expression x432=x19.closure(); + Expression x431=x413.join(x432); + Expression x435=x19.transpose(); + Expression x434=x435.closure(); + Expression x433=x415.join(x434); + Expression x430=x431.intersection(x433); + Expression x429=x430.union(x415); + IntExpression x428=x429.count(); + Expression x441=x19.closure(); + Expression x440=x415.join(x441); + Expression x444=x19.transpose(); + Expression x443=x444.closure(); + Expression x442=x413.join(x443); + Expression x439=x440.intersection(x442); + Expression x438=x439.union(x415); + Expression x437=x7.difference(x438); + IntExpression x436=x437.count(); + IntExpression x424=x425.thenElse(x428,x436); + IntExpression x421=x422.thenElse(x423,x424); + Expression x420=x421.toExpression(); + Expression x411=x412.thenElse(x418,x420); + IntExpression x410=x411.sum(); + Expression x449=x20.join(x14); + Expression x448=x334.join(x449); + Expression x451=x334.join(x12); + Expression x452=x20.join(x14); + Expression x450=x451.join(x452); + Formula x447=x448.eq(x450); + IntExpression x454=x7.count(); + Expression x453=x454.toExpression(); + Formula x457=x450.eq(x448); + IntExpression x458=IntConstant.constant(0); + Expression x462=x19.closure(); + Expression x461=x448.join(x462); + Formula x460=x450.in(x461); + Expression x467=x19.closure(); + Expression x466=x448.join(x467); + Expression x470=x19.transpose(); + Expression x469=x470.closure(); + Expression x468=x450.join(x469); + Expression x465=x466.intersection(x468); + Expression x464=x465.union(x450); + IntExpression x463=x464.count(); + Expression x476=x19.closure(); + Expression x475=x450.join(x476); + Expression x479=x19.transpose(); + Expression x478=x479.closure(); + Expression x477=x448.join(x478); + Expression x474=x475.intersection(x477); + Expression x473=x474.union(x450); + Expression x472=x7.difference(x473); + IntExpression x471=x472.count(); + IntExpression x459=x460.thenElse(x463,x471); + IntExpression x456=x457.thenElse(x458,x459); + Expression x455=x456.toExpression(); + Expression x446=x447.thenElse(x453,x455); + IntExpression x445=x446.sum(); + Formula x409=x410.eq(x445); + Formula x335=x336.and(x409); + Formula x329=x335.forAll(x330); + Formula x241=x242.and(x329); + Formula x240=x241.not(); + Variable x482=Variable.unary("ConvergingRun_t"); + Decls x481=x482.oneOf(x8); + Variable x488=Variable.unary("LeadersAtState_p"); + Decls x487=x488.oneOf(x6); + Expression x491=x482.join(x14); + Expression x490=x488.join(x491); + Formula x489=x490.eq(x18); + Expression x486=x489.comprehension(x487); + Formula x485=x486.one(); + Variable x494=Variable.unary("Legit_p"); + Decls x493=x494.oneOf(x6); + Expression x502=x12.transpose(); + Expression x501=x494.join(x502); + Expression x503=x482.join(x14); + Expression x500=x501.join(x503); + Expression x505=x482.join(x14); + Expression x504=x494.join(x505); + Formula x499=x500.eq(x504); + IntExpression x507=x7.count(); + Expression x506=x507.toExpression(); + Formula x510=x504.eq(x500); + IntExpression x511=IntConstant.constant(0); + Expression x515=x19.closure(); + Expression x514=x500.join(x515); + Formula x513=x504.in(x514); + Expression x520=x19.closure(); + Expression x519=x500.join(x520); + Expression x523=x19.transpose(); + Expression x522=x523.closure(); + Expression x521=x504.join(x522); + Expression x518=x519.intersection(x521); + Expression x517=x518.union(x504); + IntExpression x516=x517.count(); + Expression x529=x19.closure(); + Expression x528=x504.join(x529); + Expression x532=x19.transpose(); + Expression x531=x532.closure(); + Expression x530=x500.join(x531); + Expression x527=x528.intersection(x530); + Expression x526=x527.union(x504); + Expression x525=x7.difference(x526); + IntExpression x524=x525.count(); + IntExpression x512=x513.thenElse(x516,x524); + IntExpression x509=x510.thenElse(x511,x512); + Expression x508=x509.toExpression(); + Expression x498=x499.thenElse(x506,x508); + IntExpression x497=x498.sum(); + IntExpression x533=x7.count(); + Formula x496=x497.lt(x533); + Expression x539=x482.join(x14); + Expression x538=x494.join(x539); + Expression x541=x494.join(x12); + Expression x542=x482.join(x14); + Expression x540=x541.join(x542); + Formula x537=x538.eq(x540); + IntExpression x544=x7.count(); + Expression x543=x544.toExpression(); + Formula x547=x540.eq(x538); + IntExpression x548=IntConstant.constant(0); + Expression x552=x19.closure(); + Expression x551=x538.join(x552); + Formula x550=x540.in(x551); + Expression x557=x19.closure(); + Expression x556=x538.join(x557); + Expression x560=x19.transpose(); + Expression x559=x560.closure(); + Expression x558=x540.join(x559); + Expression x555=x556.intersection(x558); + Expression x554=x555.union(x540); + IntExpression x553=x554.count(); + Expression x566=x19.closure(); + Expression x565=x540.join(x566); + Expression x569=x19.transpose(); + Expression x568=x569.closure(); + Expression x567=x538.join(x568); + Expression x564=x565.intersection(x567); + Expression x563=x564.union(x540); + Expression x562=x7.difference(x563); + IntExpression x561=x562.count(); + IntExpression x549=x550.thenElse(x553,x561); + IntExpression x546=x547.thenElse(x548,x549); + Expression x545=x546.toExpression(); + Expression x536=x537.thenElse(x543,x545); + IntExpression x535=x536.sum(); + IntExpression x570=x7.count(); + Formula x534=x535.lt(x570); + Formula x495=x496.and(x534); + Formula x492=x495.forAll(x493); + Formula x484=x485.and(x492); + Variable x574=Variable.unary("Legit_p"); + Decls x573=x574.oneOf(x6); + Variable x576=Variable.unary("Legit_p'"); + Decls x575=x576.oneOf(x6); + Decls x572=x573.and(x575); + Expression x584=x12.transpose(); + Expression x583=x574.join(x584); + Expression x585=x482.join(x14); + Expression x582=x583.join(x585); + Expression x587=x482.join(x14); + Expression x586=x574.join(x587); + Formula x581=x582.eq(x586); + IntExpression x589=x7.count(); + Expression x588=x589.toExpression(); + Formula x592=x586.eq(x582); + IntExpression x593=IntConstant.constant(0); + Expression x597=x19.closure(); + Expression x596=x582.join(x597); + Formula x595=x586.in(x596); + Expression x602=x19.closure(); + Expression x601=x582.join(x602); + Expression x605=x19.transpose(); + Expression x604=x605.closure(); + Expression x603=x586.join(x604); + Expression x600=x601.intersection(x603); + Expression x599=x600.union(x586); + IntExpression x598=x599.count(); + Expression x611=x19.closure(); + Expression x610=x586.join(x611); + Expression x614=x19.transpose(); + Expression x613=x614.closure(); + Expression x612=x582.join(x613); + Expression x609=x610.intersection(x612); + Expression x608=x609.union(x586); + Expression x607=x7.difference(x608); + IntExpression x606=x607.count(); + IntExpression x594=x595.thenElse(x598,x606); + IntExpression x591=x592.thenElse(x593,x594); + Expression x590=x591.toExpression(); + Expression x580=x581.thenElse(x588,x590); + IntExpression x579=x580.sum(); + Expression x620=x12.transpose(); + Expression x619=x576.join(x620); + Expression x621=x482.join(x14); + Expression x618=x619.join(x621); + Expression x623=x482.join(x14); + Expression x622=x576.join(x623); + Formula x617=x618.eq(x622); + IntExpression x625=x7.count(); + Expression x624=x625.toExpression(); + Formula x628=x622.eq(x618); + IntExpression x629=IntConstant.constant(0); + Expression x633=x19.closure(); + Expression x632=x618.join(x633); + Formula x631=x622.in(x632); + Expression x638=x19.closure(); + Expression x637=x618.join(x638); + Expression x641=x19.transpose(); + Expression x640=x641.closure(); + Expression x639=x622.join(x640); + Expression x636=x637.intersection(x639); + Expression x635=x636.union(x622); + IntExpression x634=x635.count(); + Expression x647=x19.closure(); + Expression x646=x622.join(x647); + Expression x650=x19.transpose(); + Expression x649=x650.closure(); + Expression x648=x618.join(x649); + Expression x645=x646.intersection(x648); + Expression x644=x645.union(x622); + Expression x643=x7.difference(x644); + IntExpression x642=x643.count(); + IntExpression x630=x631.thenElse(x634,x642); + IntExpression x627=x628.thenElse(x629,x630); + Expression x626=x627.toExpression(); + Expression x616=x617.thenElse(x624,x626); + IntExpression x615=x616.sum(); + Formula x578=x579.eq(x615); + Expression x656=x482.join(x14); + Expression x655=x574.join(x656); + Expression x658=x574.join(x12); + Expression x659=x482.join(x14); + Expression x657=x658.join(x659); + Formula x654=x655.eq(x657); + IntExpression x661=x7.count(); + Expression x660=x661.toExpression(); + Formula x664=x657.eq(x655); + IntExpression x665=IntConstant.constant(0); + Expression x669=x19.closure(); + Expression x668=x655.join(x669); + Formula x667=x657.in(x668); + Expression x674=x19.closure(); + Expression x673=x655.join(x674); + Expression x677=x19.transpose(); + Expression x676=x677.closure(); + Expression x675=x657.join(x676); + Expression x672=x673.intersection(x675); + Expression x671=x672.union(x657); + IntExpression x670=x671.count(); + Expression x683=x19.closure(); + Expression x682=x657.join(x683); + Expression x686=x19.transpose(); + Expression x685=x686.closure(); + Expression x684=x655.join(x685); + Expression x681=x682.intersection(x684); + Expression x680=x681.union(x657); + Expression x679=x7.difference(x680); + IntExpression x678=x679.count(); + IntExpression x666=x667.thenElse(x670,x678); + IntExpression x663=x664.thenElse(x665,x666); + Expression x662=x663.toExpression(); + Expression x653=x654.thenElse(x660,x662); + IntExpression x652=x653.sum(); + Expression x691=x482.join(x14); + Expression x690=x576.join(x691); + Expression x693=x576.join(x12); + Expression x694=x482.join(x14); + Expression x692=x693.join(x694); + Formula x689=x690.eq(x692); + IntExpression x696=x7.count(); + Expression x695=x696.toExpression(); + Formula x699=x692.eq(x690); + IntExpression x700=IntConstant.constant(0); + Expression x704=x19.closure(); + Expression x703=x690.join(x704); + Formula x702=x692.in(x703); + Expression x709=x19.closure(); + Expression x708=x690.join(x709); + Expression x712=x19.transpose(); + Expression x711=x712.closure(); + Expression x710=x692.join(x711); + Expression x707=x708.intersection(x710); + Expression x706=x707.union(x692); + IntExpression x705=x706.count(); + Expression x718=x19.closure(); + Expression x717=x692.join(x718); + Expression x721=x19.transpose(); + Expression x720=x721.closure(); + Expression x719=x690.join(x720); + Expression x716=x717.intersection(x719); + Expression x715=x716.union(x692); + Expression x714=x7.difference(x715); + IntExpression x713=x714.count(); + IntExpression x701=x702.thenElse(x705,x713); + IntExpression x698=x699.thenElse(x700,x701); + Expression x697=x698.toExpression(); + Expression x688=x689.thenElse(x695,x697); + IntExpression x687=x688.sum(); + Formula x651=x652.eq(x687); + Formula x577=x578.and(x651); + Formula x571=x577.forAll(x572); + Formula x483=x484.and(x571); + Formula x480=x483.forSome(x481); + Formula x722=x0.eq(x0); + Formula x723=x1.eq(x1); + Formula x724=x2.eq(x2); + Formula x725=x3.eq(x3); + Formula x726=x4.eq(x4); + Formula x727=x5.eq(x5); + Formula x728=x6.eq(x6); + Formula x729=x7.eq(x7); + Formula x730=x8.eq(x8); + Formula x731=x9.eq(x9); + Formula x732=x10.eq(x10); + Formula x733=x11.eq(x11); + Formula x734=x12.eq(x12); + Formula x735=x13.eq(x13); + Formula x736=x14.eq(x14); + Formula x737=x15.eq(x15); + Formula x738=x16.eq(x16); + Formula x739=x17.eq(x17); + Formula x740=x18.eq(x18); + Formula x741=x19.eq(x19); + Formula x742=x20.eq(x20); + Formula x743=x21.eq(x21); + Formula x744=x22.eq(x22); + Formula x745=x23.eq(x23); + Formula x746=x24.eq(x24); + Formula x25=Formula.compose(FormulaOperator.AND, x26, x33, x36, x43, x45, x65, x68, x73, x75, x78, x82, x83, x86, x90, x91, x94, x98, x99, x120, x125, x128, x132, x240, x480, x722, x723, x724, x725, x726, x727, x728, x729, x730, x731, x732, x733, x734, x735, x736, x737, x738, x739, x740, x741, x742, x743, x744, x745, x746); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x25,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/gc/marksweepgcCompletenessCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/gc/marksweepgcCompletenessCheck.java new file mode 100644 index 0000000..91dad70 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/gc/marksweepgcCompletenessCheck.java @@ -0,0 +1,423 @@ +package kodkod.examples.models.algorithm.gc; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "marksweepgc", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations =2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 23, + TransitiveClosure = 4, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 10, + OrderedRelations = 0, + Constraints =14 +) + + +public final class marksweepgcCompletenessCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Node"); + Relation x7 = Relation.unary("this/HeapState"); + Relation x8 = Relation.nary("this/HeapState.left", 3); + Relation x9 = Relation.nary("this/HeapState.right", 3); + Relation x10 = Relation.nary("this/HeapState.marked", 2); + Relation x11 = Relation.nary("this/HeapState.freeList", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "HeapState$0", + "HeapState$1", "HeapState$2", "Node$0", "Node$1", "Node$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Node$0")); + x6_upper.add(factory.tuple("Node$1")); + x6_upper.add(factory.tuple("Node$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("HeapState$0")); + x7_upper.add(factory.tuple("HeapState$1")); + x7_upper.add(factory.tuple("HeapState$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(3); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(3); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0"))); + x10_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1"))); + x10_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2"))); + x10_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0"))); + x10_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1"))); + x10_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2"))); + x10_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0"))); + x10_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1"))); + x10_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0"))); + x11_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1"))); + x11_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2"))); + x11_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0"))); + x11_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1"))); + x11_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2"))); + x11_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0"))); + x11_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1"))); + x11_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2"))); + bounds.bound(x11, x11_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x15=Variable.unary("Completeness_this"); + Decls x14=x15.oneOf(x7); + Expression x19=x15.join(x8); + Expression x20=x6.product(x6); + Formula x18=x19.in(x20); + Variable x23=Variable.unary(""); + Decls x22=x23.oneOf(x6); + Expression x26=x23.join(x19); + Formula x25=x26.lone(); + Formula x27=x26.in(x6); + Formula x24=x25.and(x27); + Formula x21=x24.forAll(x22); + Formula x17=x18.and(x21); + Variable x30=Variable.unary(""); + Decls x29=x30.oneOf(x6); + Expression x32=x19.join(x30); + Formula x31=x32.in(x6); + Formula x28=x31.forAll(x29); + Formula x16=x17.and(x28); + Formula x13=x16.forAll(x14); + Expression x35=x8.join(Expression.UNIV); + Expression x34=x35.join(Expression.UNIV); + Formula x33=x34.in(x7); + Variable x39=Variable.unary("Completeness_this"); + Decls x38=x39.oneOf(x7); + Expression x43=x39.join(x9); + Expression x44=x6.product(x6); + Formula x42=x43.in(x44); + Variable x47=Variable.unary(""); + Decls x46=x47.oneOf(x6); + Expression x50=x47.join(x43); + Formula x49=x50.lone(); + Formula x51=x50.in(x6); + Formula x48=x49.and(x51); + Formula x45=x48.forAll(x46); + Formula x41=x42.and(x45); + Variable x54=Variable.unary(""); + Decls x53=x54.oneOf(x6); + Expression x56=x43.join(x54); + Formula x55=x56.in(x6); + Formula x52=x55.forAll(x53); + Formula x40=x41.and(x52); + Formula x37=x40.forAll(x38); + Expression x59=x9.join(Expression.UNIV); + Expression x58=x59.join(Expression.UNIV); + Formula x57=x58.in(x7); + Variable x62=Variable.unary("Completeness_this"); + Decls x61=x62.oneOf(x7); + Expression x64=x62.join(x10); + Formula x63=x64.in(x6); + Formula x60=x63.forAll(x61); + Expression x66=x10.join(Expression.UNIV); + Formula x65=x66.in(x7); + Variable x69=Variable.unary("Completeness_this"); + Decls x68=x69.oneOf(x7); + Expression x72=x69.join(x11); + Formula x71=x72.lone(); + Formula x73=x72.in(x6); + Formula x70=x71.and(x73); + Formula x67=x70.forAll(x68); + Expression x75=x11.join(Expression.UNIV); + Formula x74=x75.in(x7); + Variable x80=Variable.unary("Completeness_h"); + Decls x79=x80.oneOf(x7); + Variable x82=Variable.unary("Completeness_h'"); + Decls x81=x82.oneOf(x7); + Variable x84=Variable.unary("Completeness_root"); + Decls x83=x84.oneOf(x6); + Decls x78=x79.and(x81).and(x83); + Variable x90=Variable.unary("GC_hs1"); + Decls x89=x90.oneOf(x7); + Variable x92=Variable.unary("GC_hs2"); + Decls x91=x92.oneOf(x7); + Decls x88=x89.and(x91); + Expression x98=x90.join(x10); + Formula x97=x98.no(); + Expression x100=x90.join(x8); + Expression x101=x80.join(x8); + Formula x99=x100.eq(x101); + Formula x96=x97.and(x99); + Expression x103=x90.join(x9); + Expression x104=x80.join(x9); + Formula x102=x103.eq(x104); + Formula x95=x96.and(x102); + Expression x108=x92.join(x10); + Expression x113=x90.join(x8); + Expression x114=x90.join(x9); + Expression x112=x113.union(x114); + Expression x111=x112.closure(); + Expression x110=x84.join(x111); + Expression x109=x84.union(x110); + Formula x107=x108.eq(x109); + Expression x116=x92.join(x8); + Expression x117=x90.join(x8); + Formula x115=x116.eq(x117); + Formula x106=x107.and(x115); + Expression x119=x92.join(x9); + Expression x120=x90.join(x9); + Formula x118=x119.eq(x120); + Formula x105=x106.and(x118); + Formula x94=x95.and(x105); + Expression x125=x82.join(x11); + Expression x128=x82.join(x8); + Expression x127=x128.closure(); + Expression x134=Expression.INTS.union(x5); + Expression x133=x134.union(x6); + Expression x132=x133.union(x7); + Expression x131=x132.product(Expression.UNIV); + Expression x129=Expression.IDEN.intersection(x131); + Expression x126=x127.union(x129); + Expression x124=x125.join(x126); + Expression x137=x92.join(x10); + Expression x136=x6.difference(x137); + Formula x123=x124.in(x136); + Variable x140=Variable.unary("setFreeList_n"); + Decls x139=x140.oneOf(x6); + Expression x145=x92.join(x10); + Formula x144=x140.in(x145); + Formula x143=x144.not(); + Expression x150=x82.join(x9); + Expression x149=x140.join(x150); + Formula x148=x149.no(); + Expression x153=x82.join(x8); + Expression x152=x140.join(x153); + Expression x155=x82.join(x11); + Expression x158=x82.join(x8); + Expression x157=x158.closure(); + Expression x160=x132.product(Expression.UNIV); + Expression x159=Expression.IDEN.intersection(x160); + Expression x156=x157.union(x159); + Expression x154=x155.join(x156); + Formula x151=x152.in(x154); + Formula x147=x148.and(x151); + Expression x163=x82.join(x11); + Expression x166=x82.join(x8); + Expression x165=x166.closure(); + Expression x168=x132.product(Expression.UNIV); + Expression x167=Expression.IDEN.intersection(x168); + Expression x164=x165.union(x167); + Expression x162=x163.join(x164); + Formula x161=x140.in(x162); + Formula x146=x147.and(x161); + Formula x142=x143.implies(x146); + Formula x170=x143.not(); + Expression x174=x82.join(x8); + Expression x173=x140.join(x174); + Expression x176=x92.join(x8); + Expression x175=x140.join(x176); + Formula x172=x173.eq(x175); + Expression x179=x82.join(x9); + Expression x178=x140.join(x179); + Expression x181=x92.join(x9); + Expression x180=x140.join(x181); + Formula x177=x178.eq(x180); + Formula x171=x172.and(x177); + Formula x169=x170.implies(x171); + Formula x141=x142.and(x169); + Formula x138=x141.forAll(x139); + Formula x122=x123.and(x138); + Expression x183=x82.join(x10); + Expression x184=x92.join(x10); + Formula x182=x183.eq(x184); + Formula x121=x122.and(x182); + Formula x93=x94.and(x121); + Formula x87=x93.forSome(x88); + Formula x86=x87.not(); + Expression x191=x82.join(x8); + Expression x192=x82.join(x9); + Expression x190=x191.union(x192); + Expression x189=x190.closure(); + Expression x188=x84.join(x189); + Expression x187=x84.union(x188); + Expression x186=x6.difference(x187); + Expression x194=x82.join(x11); + Expression x198=x82.join(x8); + Expression x199=x82.join(x9); + Expression x197=x198.union(x199); + Expression x196=x197.closure(); + Expression x195=x194.join(x196); + Expression x193=x194.union(x195); + Formula x185=x186.in(x193); + Formula x85=x86.or(x185); + Formula x77=x85.forAll(x78); + Formula x76=x77.not(); + Formula x200=x0.eq(x0); + Formula x201=x1.eq(x1); + Formula x202=x2.eq(x2); + Formula x203=x3.eq(x3); + Formula x204=x4.eq(x4); + Formula x205=x5.eq(x5); + Formula x206=x6.eq(x6); + Formula x207=x7.eq(x7); + Formula x208=x8.eq(x8); + Formula x209=x9.eq(x9); + Formula x210=x10.eq(x10); + Formula x211=x11.eq(x11); + Formula x12=Formula.compose(FormulaOperator.AND, x13, x33, x37, x57, x60, x65, x67, x74, x76, x200, x201, x202, x203, x204, x205, x206, x207, x208, x209, x210, x211); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x12,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/gc/marksweepgcSoundness1Check.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/gc/marksweepgcSoundness1Check.java new file mode 100644 index 0000000..39c715d --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/gc/marksweepgcSoundness1Check.java @@ -0,0 +1,428 @@ +package kodkod.examples.models.algorithm.gc; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "marksweepgc", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations =2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 23, + TransitiveClosure = 4, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 10, + OrderedRelations = 0, + Constraints =14 +) + + +public final class marksweepgcSoundness1Check { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Node"); + Relation x7 = Relation.unary("this/HeapState"); + Relation x8 = Relation.nary("this/HeapState.left", 3); + Relation x9 = Relation.nary("this/HeapState.right", 3); + Relation x10 = Relation.nary("this/HeapState.marked", 2); + Relation x11 = Relation.nary("this/HeapState.freeList", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "HeapState$0", + "HeapState$1", "HeapState$2", "Node$0", "Node$1", "Node$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Node$0")); + x6_upper.add(factory.tuple("Node$1")); + x6_upper.add(factory.tuple("Node$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("HeapState$0")); + x7_upper.add(factory.tuple("HeapState$1")); + x7_upper.add(factory.tuple("HeapState$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(3); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(3); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0"))); + x10_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1"))); + x10_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2"))); + x10_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0"))); + x10_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1"))); + x10_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2"))); + x10_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0"))); + x10_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1"))); + x10_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0"))); + x11_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1"))); + x11_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2"))); + x11_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0"))); + x11_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1"))); + x11_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2"))); + x11_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0"))); + x11_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1"))); + x11_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2"))); + bounds.bound(x11, x11_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x15=Variable.unary("Soundness1_this"); + Decls x14=x15.oneOf(x7); + Expression x19=x15.join(x8); + Expression x20=x6.product(x6); + Formula x18=x19.in(x20); + Variable x23=Variable.unary(""); + Decls x22=x23.oneOf(x6); + Expression x26=x23.join(x19); + Formula x25=x26.lone(); + Formula x27=x26.in(x6); + Formula x24=x25.and(x27); + Formula x21=x24.forAll(x22); + Formula x17=x18.and(x21); + Variable x30=Variable.unary(""); + Decls x29=x30.oneOf(x6); + Expression x32=x19.join(x30); + Formula x31=x32.in(x6); + Formula x28=x31.forAll(x29); + Formula x16=x17.and(x28); + Formula x13=x16.forAll(x14); + Expression x35=x8.join(Expression.UNIV); + Expression x34=x35.join(Expression.UNIV); + Formula x33=x34.in(x7); + Variable x39=Variable.unary("Soundness1_this"); + Decls x38=x39.oneOf(x7); + Expression x43=x39.join(x9); + Expression x44=x6.product(x6); + Formula x42=x43.in(x44); + Variable x47=Variable.unary(""); + Decls x46=x47.oneOf(x6); + Expression x50=x47.join(x43); + Formula x49=x50.lone(); + Formula x51=x50.in(x6); + Formula x48=x49.and(x51); + Formula x45=x48.forAll(x46); + Formula x41=x42.and(x45); + Variable x54=Variable.unary(""); + Decls x53=x54.oneOf(x6); + Expression x56=x43.join(x54); + Formula x55=x56.in(x6); + Formula x52=x55.forAll(x53); + Formula x40=x41.and(x52); + Formula x37=x40.forAll(x38); + Expression x59=x9.join(Expression.UNIV); + Expression x58=x59.join(Expression.UNIV); + Formula x57=x58.in(x7); + Variable x62=Variable.unary("Soundness1_this"); + Decls x61=x62.oneOf(x7); + Expression x64=x62.join(x10); + Formula x63=x64.in(x6); + Formula x60=x63.forAll(x61); + Expression x66=x10.join(Expression.UNIV); + Formula x65=x66.in(x7); + Variable x69=Variable.unary("Soundness1_this"); + Decls x68=x69.oneOf(x7); + Expression x72=x69.join(x11); + Formula x71=x72.lone(); + Formula x73=x72.in(x6); + Formula x70=x71.and(x73); + Formula x67=x70.forAll(x68); + Expression x75=x11.join(Expression.UNIV); + Formula x74=x75.in(x7); + Variable x80=Variable.unary("Soundness1_h"); + Decls x79=x80.oneOf(x7); + Variable x82=Variable.unary("Soundness1_h'"); + Decls x81=x82.oneOf(x7); + Variable x84=Variable.unary("Soundness1_root"); + Decls x83=x84.oneOf(x6); + Decls x78=x79.and(x81).and(x83); + Variable x90=Variable.unary("GC_hs1"); + Decls x89=x90.oneOf(x7); + Variable x92=Variable.unary("GC_hs2"); + Decls x91=x92.oneOf(x7); + Decls x88=x89.and(x91); + Expression x98=x90.join(x10); + Formula x97=x98.no(); + Expression x100=x90.join(x8); + Expression x101=x80.join(x8); + Formula x99=x100.eq(x101); + Formula x96=x97.and(x99); + Expression x103=x90.join(x9); + Expression x104=x80.join(x9); + Formula x102=x103.eq(x104); + Formula x95=x96.and(x102); + Expression x108=x92.join(x10); + Expression x113=x90.join(x8); + Expression x114=x90.join(x9); + Expression x112=x113.union(x114); + Expression x111=x112.closure(); + Expression x110=x84.join(x111); + Expression x109=x84.union(x110); + Formula x107=x108.eq(x109); + Expression x116=x92.join(x8); + Expression x117=x90.join(x8); + Formula x115=x116.eq(x117); + Formula x106=x107.and(x115); + Expression x119=x92.join(x9); + Expression x120=x90.join(x9); + Formula x118=x119.eq(x120); + Formula x105=x106.and(x118); + Formula x94=x95.and(x105); + Expression x125=x82.join(x11); + Expression x128=x82.join(x8); + Expression x127=x128.closure(); + Expression x134=Expression.INTS.union(x5); + Expression x133=x134.union(x6); + Expression x132=x133.union(x7); + Expression x131=x132.product(Expression.UNIV); + Expression x129=Expression.IDEN.intersection(x131); + Expression x126=x127.union(x129); + Expression x124=x125.join(x126); + Expression x137=x92.join(x10); + Expression x136=x6.difference(x137); + Formula x123=x124.in(x136); + Variable x140=Variable.unary("setFreeList_n"); + Decls x139=x140.oneOf(x6); + Expression x145=x92.join(x10); + Formula x144=x140.in(x145); + Formula x143=x144.not(); + Expression x150=x82.join(x9); + Expression x149=x140.join(x150); + Formula x148=x149.no(); + Expression x153=x82.join(x8); + Expression x152=x140.join(x153); + Expression x155=x82.join(x11); + Expression x158=x82.join(x8); + Expression x157=x158.closure(); + Expression x160=x132.product(Expression.UNIV); + Expression x159=Expression.IDEN.intersection(x160); + Expression x156=x157.union(x159); + Expression x154=x155.join(x156); + Formula x151=x152.in(x154); + Formula x147=x148.and(x151); + Expression x163=x82.join(x11); + Expression x166=x82.join(x8); + Expression x165=x166.closure(); + Expression x168=x132.product(Expression.UNIV); + Expression x167=Expression.IDEN.intersection(x168); + Expression x164=x165.union(x167); + Expression x162=x163.join(x164); + Formula x161=x140.in(x162); + Formula x146=x147.and(x161); + Formula x142=x143.implies(x146); + Formula x170=x143.not(); + Expression x174=x82.join(x8); + Expression x173=x140.join(x174); + Expression x176=x92.join(x8); + Expression x175=x140.join(x176); + Formula x172=x173.eq(x175); + Expression x179=x82.join(x9); + Expression x178=x140.join(x179); + Expression x181=x92.join(x9); + Expression x180=x140.join(x181); + Formula x177=x178.eq(x180); + Formula x171=x172.and(x177); + Formula x169=x170.implies(x171); + Formula x141=x142.and(x169); + Formula x138=x141.forAll(x139); + Formula x122=x123.and(x138); + Expression x183=x82.join(x10); + Expression x184=x92.join(x10); + Formula x182=x183.eq(x184); + Formula x121=x122.and(x182); + Formula x93=x94.and(x121); + Formula x87=x93.forSome(x88); + Formula x86=x87.not(); + Variable x187=Variable.unary("Soundness1_live"); + Expression x192=x80.join(x8); + Expression x193=x80.join(x9); + Expression x191=x192.union(x193); + Expression x190=x191.closure(); + Expression x189=x84.join(x190); + Expression x188=x84.union(x189); + Decls x186=x187.oneOf(x188); + Expression x197=x82.join(x8); + Expression x196=x187.join(x197); + Expression x199=x80.join(x8); + Expression x198=x187.join(x199); + Formula x195=x196.eq(x198); + Expression x202=x82.join(x9); + Expression x201=x187.join(x202); + Expression x204=x80.join(x9); + Expression x203=x187.join(x204); + Formula x200=x201.eq(x203); + Formula x194=x195.and(x200); + Formula x185=x194.forAll(x186); + Formula x85=x86.or(x185); + Formula x77=x85.forAll(x78); + Formula x76=x77.not(); + Formula x205=x0.eq(x0); + Formula x206=x1.eq(x1); + Formula x207=x2.eq(x2); + Formula x208=x3.eq(x3); + Formula x209=x4.eq(x4); + Formula x210=x5.eq(x5); + Formula x211=x6.eq(x6); + Formula x212=x7.eq(x7); + Formula x213=x8.eq(x8); + Formula x214=x9.eq(x9); + Formula x215=x10.eq(x10); + Formula x216=x11.eq(x11); + Formula x12=Formula.compose(FormulaOperator.AND, x13, x33, x37, x57, x60, x65, x67, x74, x76, x205, x206, x207, x208, x209, x210, x211, x212, x213, x214, x215, x216); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x12,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/gc/marksweepgcSoundness2Check.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/gc/marksweepgcSoundness2Check.java new file mode 100644 index 0000000..58aaf0b --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/gc/marksweepgcSoundness2Check.java @@ -0,0 +1,423 @@ +package kodkod.examples.models.algorithm.gc; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "marksweepgc", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations =2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 23, + TransitiveClosure = 4, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 10, + OrderedRelations = 0, + Constraints =14 +) + + +public final class marksweepgcSoundness2Check { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Node"); + Relation x7 = Relation.unary("this/HeapState"); + Relation x8 = Relation.nary("this/HeapState.left", 3); + Relation x9 = Relation.nary("this/HeapState.right", 3); + Relation x10 = Relation.nary("this/HeapState.marked", 2); + Relation x11 = Relation.nary("this/HeapState.freeList", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "HeapState$0", + "HeapState$1", "HeapState$2", "Node$0", "Node$1", "Node$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Node$0")); + x6_upper.add(factory.tuple("Node$1")); + x6_upper.add(factory.tuple("Node$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("HeapState$0")); + x7_upper.add(factory.tuple("HeapState$1")); + x7_upper.add(factory.tuple("HeapState$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(3); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x8_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(3); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1")).product(factory.tuple("Node$2"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$0"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$1"))); + x9_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2")).product(factory.tuple("Node$2"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0"))); + x10_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1"))); + x10_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2"))); + x10_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0"))); + x10_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1"))); + x10_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2"))); + x10_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0"))); + x10_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1"))); + x10_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$0"))); + x11_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$1"))); + x11_upper.add(factory.tuple("HeapState$0").product(factory.tuple("Node$2"))); + x11_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$0"))); + x11_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$1"))); + x11_upper.add(factory.tuple("HeapState$1").product(factory.tuple("Node$2"))); + x11_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$0"))); + x11_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$1"))); + x11_upper.add(factory.tuple("HeapState$2").product(factory.tuple("Node$2"))); + bounds.bound(x11, x11_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x15=Variable.unary("Soundness2_this"); + Decls x14=x15.oneOf(x7); + Expression x19=x15.join(x8); + Expression x20=x6.product(x6); + Formula x18=x19.in(x20); + Variable x23=Variable.unary(""); + Decls x22=x23.oneOf(x6); + Expression x26=x23.join(x19); + Formula x25=x26.lone(); + Formula x27=x26.in(x6); + Formula x24=x25.and(x27); + Formula x21=x24.forAll(x22); + Formula x17=x18.and(x21); + Variable x30=Variable.unary(""); + Decls x29=x30.oneOf(x6); + Expression x32=x19.join(x30); + Formula x31=x32.in(x6); + Formula x28=x31.forAll(x29); + Formula x16=x17.and(x28); + Formula x13=x16.forAll(x14); + Expression x35=x8.join(Expression.UNIV); + Expression x34=x35.join(Expression.UNIV); + Formula x33=x34.in(x7); + Variable x39=Variable.unary("Soundness2_this"); + Decls x38=x39.oneOf(x7); + Expression x43=x39.join(x9); + Expression x44=x6.product(x6); + Formula x42=x43.in(x44); + Variable x47=Variable.unary(""); + Decls x46=x47.oneOf(x6); + Expression x50=x47.join(x43); + Formula x49=x50.lone(); + Formula x51=x50.in(x6); + Formula x48=x49.and(x51); + Formula x45=x48.forAll(x46); + Formula x41=x42.and(x45); + Variable x54=Variable.unary(""); + Decls x53=x54.oneOf(x6); + Expression x56=x43.join(x54); + Formula x55=x56.in(x6); + Formula x52=x55.forAll(x53); + Formula x40=x41.and(x52); + Formula x37=x40.forAll(x38); + Expression x59=x9.join(Expression.UNIV); + Expression x58=x59.join(Expression.UNIV); + Formula x57=x58.in(x7); + Variable x62=Variable.unary("Soundness2_this"); + Decls x61=x62.oneOf(x7); + Expression x64=x62.join(x10); + Formula x63=x64.in(x6); + Formula x60=x63.forAll(x61); + Expression x66=x10.join(Expression.UNIV); + Formula x65=x66.in(x7); + Variable x69=Variable.unary("Soundness2_this"); + Decls x68=x69.oneOf(x7); + Expression x72=x69.join(x11); + Formula x71=x72.lone(); + Formula x73=x72.in(x6); + Formula x70=x71.and(x73); + Formula x67=x70.forAll(x68); + Expression x75=x11.join(Expression.UNIV); + Formula x74=x75.in(x7); + Variable x80=Variable.unary("Soundness2_h"); + Decls x79=x80.oneOf(x7); + Variable x82=Variable.unary("Soundness2_h'"); + Decls x81=x82.oneOf(x7); + Variable x84=Variable.unary("Soundness2_root"); + Decls x83=x84.oneOf(x6); + Decls x78=x79.and(x81).and(x83); + Variable x90=Variable.unary("GC_hs1"); + Decls x89=x90.oneOf(x7); + Variable x92=Variable.unary("GC_hs2"); + Decls x91=x92.oneOf(x7); + Decls x88=x89.and(x91); + Expression x98=x90.join(x10); + Formula x97=x98.no(); + Expression x100=x90.join(x8); + Expression x101=x80.join(x8); + Formula x99=x100.eq(x101); + Formula x96=x97.and(x99); + Expression x103=x90.join(x9); + Expression x104=x80.join(x9); + Formula x102=x103.eq(x104); + Formula x95=x96.and(x102); + Expression x108=x92.join(x10); + Expression x113=x90.join(x8); + Expression x114=x90.join(x9); + Expression x112=x113.union(x114); + Expression x111=x112.closure(); + Expression x110=x84.join(x111); + Expression x109=x84.union(x110); + Formula x107=x108.eq(x109); + Expression x116=x92.join(x8); + Expression x117=x90.join(x8); + Formula x115=x116.eq(x117); + Formula x106=x107.and(x115); + Expression x119=x92.join(x9); + Expression x120=x90.join(x9); + Formula x118=x119.eq(x120); + Formula x105=x106.and(x118); + Formula x94=x95.and(x105); + Expression x125=x82.join(x11); + Expression x128=x82.join(x8); + Expression x127=x128.closure(); + Expression x134=Expression.INTS.union(x5); + Expression x133=x134.union(x6); + Expression x132=x133.union(x7); + Expression x131=x132.product(Expression.UNIV); + Expression x129=Expression.IDEN.intersection(x131); + Expression x126=x127.union(x129); + Expression x124=x125.join(x126); + Expression x137=x92.join(x10); + Expression x136=x6.difference(x137); + Formula x123=x124.in(x136); + Variable x140=Variable.unary("setFreeList_n"); + Decls x139=x140.oneOf(x6); + Expression x145=x92.join(x10); + Formula x144=x140.in(x145); + Formula x143=x144.not(); + Expression x150=x82.join(x9); + Expression x149=x140.join(x150); + Formula x148=x149.no(); + Expression x153=x82.join(x8); + Expression x152=x140.join(x153); + Expression x155=x82.join(x11); + Expression x158=x82.join(x8); + Expression x157=x158.closure(); + Expression x160=x132.product(Expression.UNIV); + Expression x159=Expression.IDEN.intersection(x160); + Expression x156=x157.union(x159); + Expression x154=x155.join(x156); + Formula x151=x152.in(x154); + Formula x147=x148.and(x151); + Expression x163=x82.join(x11); + Expression x166=x82.join(x8); + Expression x165=x166.closure(); + Expression x168=x132.product(Expression.UNIV); + Expression x167=Expression.IDEN.intersection(x168); + Expression x164=x165.union(x167); + Expression x162=x163.join(x164); + Formula x161=x140.in(x162); + Formula x146=x147.and(x161); + Formula x142=x143.implies(x146); + Formula x170=x143.not(); + Expression x174=x82.join(x8); + Expression x173=x140.join(x174); + Expression x176=x92.join(x8); + Expression x175=x140.join(x176); + Formula x172=x173.eq(x175); + Expression x179=x82.join(x9); + Expression x178=x140.join(x179); + Expression x181=x92.join(x9); + Expression x180=x140.join(x181); + Formula x177=x178.eq(x180); + Formula x171=x172.and(x177); + Formula x169=x170.implies(x171); + Formula x141=x142.and(x169); + Formula x138=x141.forAll(x139); + Formula x122=x123.and(x138); + Expression x183=x82.join(x10); + Expression x184=x92.join(x10); + Formula x182=x183.eq(x184); + Formula x121=x122.and(x182); + Formula x93=x94.and(x121); + Formula x87=x93.forSome(x88); + Formula x86=x87.not(); + Expression x191=x82.join(x8); + Expression x192=x82.join(x9); + Expression x190=x191.union(x192); + Expression x189=x190.closure(); + Expression x188=x84.join(x189); + Expression x187=x84.union(x188); + Expression x194=x82.join(x11); + Expression x198=x82.join(x8); + Expression x199=x82.join(x9); + Expression x197=x198.union(x199); + Expression x196=x197.closure(); + Expression x195=x194.join(x196); + Expression x193=x194.union(x195); + Expression x186=x187.intersection(x193); + Formula x185=x186.no(); + Formula x85=x86.or(x185); + Formula x77=x85.forAll(x78); + Formula x76=x77.not(); + Formula x200=x0.eq(x0); + Formula x201=x1.eq(x1); + Formula x202=x2.eq(x2); + Formula x203=x3.eq(x3); + Formula x204=x4.eq(x4); + Formula x205=x5.eq(x5); + Formula x206=x6.eq(x6); + Formula x207=x7.eq(x7); + Formula x208=x8.eq(x8); + Formula x209=x9.eq(x9); + Formula x210=x10.eq(x10); + Formula x211=x11.eq(x11); + Formula x12=Formula.compose(FormulaOperator.AND, x13, x33, x37, x57, x60, x65, x67, x74, x76, x200, x201, x202, x203, x204, x205, x206, x207, x208, x209, x210, x211); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x12,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/multicasting/iolusOutsiderCantReadCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/multicasting/iolusOutsiderCantReadCheck.java new file mode 100644 index 0000000..eff1a95 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/multicasting/iolusOutsiderCantReadCheck.java @@ -0,0 +1,1972 @@ +package kodkod.examples.models.algorithm.multicasting; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "iolus", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 11, + TernaryRelations = 4, + NaryRelations = 0, + HierarchicalTypes = 4, + NestedRelationalJoins = 31, + TransitiveClosure = 3, + NestedQuantifiers = 5, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 46, + OrderedRelations = 1, + Constraints = 100 +) + +public final class iolusOutsiderCantReadCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Tick"); + Relation x7 = Relation.unary("this/GroupKey"); + Relation x8 = Relation.unary("this/DataMessage"); + Relation x9 = Relation.unary("this/GSA"); + Relation x10 = Relation.unary("this/Client"); + Relation x11 = Relation.unary("ord/Ord"); + Relation x12 = Relation.nary("this/Message.sender", 2); + Relation x13 = Relation.nary("this/Message.sentTime", 2); + Relation x14 = Relation.nary("this/Message.key", 2); + Relation x15 = Relation.nary("this/KDS.keys", 3); + Relation x16 = Relation.nary("this/KDS.members", 3); + Relation x17 = Relation.nary("this/Member.ownedKeys", 3); + Relation x18 = Relation.nary("this/Member.receivedMessages", 3); + Relation x19 = Relation.nary("this/GroupKey.generator", 2); + Relation x20 = Relation.nary("this/GroupKey.generatedTime", 2); + Relation x21 = Relation.nary("this/DataMessage.gsaID", 2); + Relation x22 = Relation.nary("this/DataMessage.retransmitTime", 2); + Relation x23 = Relation.nary("this/GSA.parent", 2); + Relation x24 = Relation.nary("this/Client.server", 2); + Relation x25 = Relation.unary("ord/Ord.First"); + Relation x26 = Relation.nary("ord/Ord.Next", 2); + Relation x27 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "KDS$0", + "KDS$1", "KDS$2", "KDS$3", "KDS$4", "Key$0", "Key$1", + "Key$2", "Key$3", "Key$4", "Member$0", "Member$1", "Member$2", + "Message$0", "Message$1", "Message$2", "Message$3", "Message$4", "Tick$0", + "Tick$1", "Tick$2", "Tick$3", "Tick$4", "ord/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Tick$0")); + x6_upper.add(factory.tuple("Tick$1")); + x6_upper.add(factory.tuple("Tick$2")); + x6_upper.add(factory.tuple("Tick$3")); + x6_upper.add(factory.tuple("Tick$4")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Key$0")); + x7_upper.add(factory.tuple("Key$1")); + x7_upper.add(factory.tuple("Key$2")); + x7_upper.add(factory.tuple("Key$3")); + x7_upper.add(factory.tuple("Key$4")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Message$0")); + x8_upper.add(factory.tuple("Message$1")); + x8_upper.add(factory.tuple("Message$2")); + x8_upper.add(factory.tuple("Message$3")); + x8_upper.add(factory.tuple("Message$4")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("KDS$0")); + x9_upper.add(factory.tuple("KDS$1")); + x9_upper.add(factory.tuple("KDS$2")); + x9_upper.add(factory.tuple("KDS$3")); + x9_upper.add(factory.tuple("KDS$4")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Member$0")); + x10_upper.add(factory.tuple("Member$1")); + x10_upper.add(factory.tuple("Member$2")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("ord/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Message$0").product(factory.tuple("Member$0"))); + x12_upper.add(factory.tuple("Message$0").product(factory.tuple("Member$1"))); + x12_upper.add(factory.tuple("Message$0").product(factory.tuple("Member$2"))); + x12_upper.add(factory.tuple("Message$1").product(factory.tuple("Member$0"))); + x12_upper.add(factory.tuple("Message$1").product(factory.tuple("Member$1"))); + x12_upper.add(factory.tuple("Message$1").product(factory.tuple("Member$2"))); + x12_upper.add(factory.tuple("Message$2").product(factory.tuple("Member$0"))); + x12_upper.add(factory.tuple("Message$2").product(factory.tuple("Member$1"))); + x12_upper.add(factory.tuple("Message$2").product(factory.tuple("Member$2"))); + x12_upper.add(factory.tuple("Message$3").product(factory.tuple("Member$0"))); + x12_upper.add(factory.tuple("Message$3").product(factory.tuple("Member$1"))); + x12_upper.add(factory.tuple("Message$3").product(factory.tuple("Member$2"))); + x12_upper.add(factory.tuple("Message$4").product(factory.tuple("Member$0"))); + x12_upper.add(factory.tuple("Message$4").product(factory.tuple("Member$1"))); + x12_upper.add(factory.tuple("Message$4").product(factory.tuple("Member$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Message$0").product(factory.tuple("Tick$0"))); + x13_upper.add(factory.tuple("Message$0").product(factory.tuple("Tick$1"))); + x13_upper.add(factory.tuple("Message$0").product(factory.tuple("Tick$2"))); + x13_upper.add(factory.tuple("Message$0").product(factory.tuple("Tick$3"))); + x13_upper.add(factory.tuple("Message$0").product(factory.tuple("Tick$4"))); + x13_upper.add(factory.tuple("Message$1").product(factory.tuple("Tick$0"))); + x13_upper.add(factory.tuple("Message$1").product(factory.tuple("Tick$1"))); + x13_upper.add(factory.tuple("Message$1").product(factory.tuple("Tick$2"))); + x13_upper.add(factory.tuple("Message$1").product(factory.tuple("Tick$3"))); + x13_upper.add(factory.tuple("Message$1").product(factory.tuple("Tick$4"))); + x13_upper.add(factory.tuple("Message$2").product(factory.tuple("Tick$0"))); + x13_upper.add(factory.tuple("Message$2").product(factory.tuple("Tick$1"))); + x13_upper.add(factory.tuple("Message$2").product(factory.tuple("Tick$2"))); + x13_upper.add(factory.tuple("Message$2").product(factory.tuple("Tick$3"))); + x13_upper.add(factory.tuple("Message$2").product(factory.tuple("Tick$4"))); + x13_upper.add(factory.tuple("Message$3").product(factory.tuple("Tick$0"))); + x13_upper.add(factory.tuple("Message$3").product(factory.tuple("Tick$1"))); + x13_upper.add(factory.tuple("Message$3").product(factory.tuple("Tick$2"))); + x13_upper.add(factory.tuple("Message$3").product(factory.tuple("Tick$3"))); + x13_upper.add(factory.tuple("Message$3").product(factory.tuple("Tick$4"))); + x13_upper.add(factory.tuple("Message$4").product(factory.tuple("Tick$0"))); + x13_upper.add(factory.tuple("Message$4").product(factory.tuple("Tick$1"))); + x13_upper.add(factory.tuple("Message$4").product(factory.tuple("Tick$2"))); + x13_upper.add(factory.tuple("Message$4").product(factory.tuple("Tick$3"))); + x13_upper.add(factory.tuple("Message$4").product(factory.tuple("Tick$4"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Message$0").product(factory.tuple("Key$0"))); + x14_upper.add(factory.tuple("Message$0").product(factory.tuple("Key$1"))); + x14_upper.add(factory.tuple("Message$0").product(factory.tuple("Key$2"))); + x14_upper.add(factory.tuple("Message$0").product(factory.tuple("Key$3"))); + x14_upper.add(factory.tuple("Message$0").product(factory.tuple("Key$4"))); + x14_upper.add(factory.tuple("Message$1").product(factory.tuple("Key$0"))); + x14_upper.add(factory.tuple("Message$1").product(factory.tuple("Key$1"))); + x14_upper.add(factory.tuple("Message$1").product(factory.tuple("Key$2"))); + x14_upper.add(factory.tuple("Message$1").product(factory.tuple("Key$3"))); + x14_upper.add(factory.tuple("Message$1").product(factory.tuple("Key$4"))); + x14_upper.add(factory.tuple("Message$2").product(factory.tuple("Key$0"))); + x14_upper.add(factory.tuple("Message$2").product(factory.tuple("Key$1"))); + x14_upper.add(factory.tuple("Message$2").product(factory.tuple("Key$2"))); + x14_upper.add(factory.tuple("Message$2").product(factory.tuple("Key$3"))); + x14_upper.add(factory.tuple("Message$2").product(factory.tuple("Key$4"))); + x14_upper.add(factory.tuple("Message$3").product(factory.tuple("Key$0"))); + x14_upper.add(factory.tuple("Message$3").product(factory.tuple("Key$1"))); + x14_upper.add(factory.tuple("Message$3").product(factory.tuple("Key$2"))); + x14_upper.add(factory.tuple("Message$3").product(factory.tuple("Key$3"))); + x14_upper.add(factory.tuple("Message$3").product(factory.tuple("Key$4"))); + x14_upper.add(factory.tuple("Message$4").product(factory.tuple("Key$0"))); + x14_upper.add(factory.tuple("Message$4").product(factory.tuple("Key$1"))); + x14_upper.add(factory.tuple("Message$4").product(factory.tuple("Key$2"))); + x14_upper.add(factory.tuple("Message$4").product(factory.tuple("Key$3"))); + x14_upper.add(factory.tuple("Message$4").product(factory.tuple("Key$4"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(3); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$0")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$0")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$0")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$0")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$0")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$1")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$1")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$1")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$1")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$1")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$2")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$2")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$2")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$2")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$2")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$3")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$3")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$3")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$3")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$3")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$4")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$4")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$4")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$4")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$4")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$0")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$0")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$0")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$0")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$0")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$1")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$1")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$1")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$1")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$1")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$2")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$2")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$2")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$2")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$2")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$3")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$3")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$3")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$3")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$3")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$4")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$4")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$4")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$4")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$4")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$0")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$0")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$0")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$0")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$0")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$1")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$1")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$1")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$1")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$1")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$2")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$2")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$2")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$2")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$2")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$3")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$3")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$3")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$3")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$3")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$4")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$4")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$4")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$4")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$4")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$0")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$0")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$0")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$0")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$0")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$1")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$1")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$1")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$1")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$1")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$2")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$2")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$2")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$2")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$2")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$3")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$3")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$3")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$3")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$3")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$4")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$4")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$4")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$4")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$4")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$0")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$0")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$0")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$0")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$0")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$1")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$1")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$1")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$1")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$1")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$2")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$2")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$2")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$2")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$2")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$3")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$3")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$3")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$3")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$3")).product(factory.tuple("Key$4"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$4")).product(factory.tuple("Key$0"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$4")).product(factory.tuple("Key$1"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$4")).product(factory.tuple("Key$2"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$4")).product(factory.tuple("Key$3"))); + x15_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$4")).product(factory.tuple("Key$4"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(3); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$0")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$0")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$0")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$1")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$1")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$1")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$2")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$2")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$2")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$3")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$3")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$3")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$4")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$4")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$0").product(factory.tuple("Tick$4")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$0")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$0")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$0")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$1")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$1")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$1")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$2")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$2")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$2")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$3")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$3")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$3")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$4")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$4")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$1").product(factory.tuple("Tick$4")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$0")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$0")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$0")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$1")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$1")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$1")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$2")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$2")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$2")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$3")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$3")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$3")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$4")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$4")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$2").product(factory.tuple("Tick$4")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$0")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$0")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$0")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$1")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$1")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$1")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$2")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$2")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$2")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$3")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$3")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$3")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$4")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$4")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$3").product(factory.tuple("Tick$4")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$0")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$0")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$0")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$1")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$1")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$1")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$2")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$2")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$2")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$3")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$3")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$3")).product(factory.tuple("Member$2"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$4")).product(factory.tuple("Member$0"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$4")).product(factory.tuple("Member$1"))); + x16_upper.add(factory.tuple("KDS$4").product(factory.tuple("Tick$4")).product(factory.tuple("Member$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(3); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$0")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$0")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$0")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$0")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$0")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$1")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$1")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$1")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$1")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$1")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$2")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$2")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$2")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$2")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$2")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$3")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$3")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$3")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$3")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$3")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$4")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$4")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$4")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$4")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$4")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$0")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$0")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$0")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$0")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$0")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$1")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$1")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$1")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$1")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$1")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$2")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$2")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$2")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$2")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$2")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$3")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$3")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$3")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$3")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$3")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$4")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$4")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$4")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$4")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$4")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$0")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$0")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$0")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$0")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$0")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$1")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$1")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$1")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$1")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$1")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$2")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$2")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$2")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$2")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$2")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$3")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$3")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$3")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$3")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$3")).product(factory.tuple("Key$4"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$4")).product(factory.tuple("Key$0"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$4")).product(factory.tuple("Key$1"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$4")).product(factory.tuple("Key$2"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$4")).product(factory.tuple("Key$3"))); + x17_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$4")).product(factory.tuple("Key$4"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$0")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$0")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$0")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$0")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$0")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$1")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$1")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$1")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$1")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$1")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$2")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$2")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$2")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$2")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$2")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$3")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$3")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$3")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$3")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$3")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$4")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$4")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$4")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$4")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$0").product(factory.tuple("Tick$4")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$0")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$0")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$0")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$0")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$0")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$1")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$1")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$1")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$1")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$1")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$2")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$2")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$2")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$2")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$2")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$3")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$3")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$3")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$3")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$3")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$4")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$4")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$4")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$4")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$1").product(factory.tuple("Tick$4")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$0")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$0")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$0")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$0")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$0")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$1")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$1")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$1")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$1")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$1")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$2")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$2")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$2")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$2")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$2")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$3")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$3")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$3")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$3")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$3")).product(factory.tuple("Message$4"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$4")).product(factory.tuple("Message$0"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$4")).product(factory.tuple("Message$1"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$4")).product(factory.tuple("Message$2"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$4")).product(factory.tuple("Message$3"))); + x18_upper.add(factory.tuple("Member$2").product(factory.tuple("Tick$4")).product(factory.tuple("Message$4"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Key$0").product(factory.tuple("KDS$0"))); + x19_upper.add(factory.tuple("Key$0").product(factory.tuple("KDS$1"))); + x19_upper.add(factory.tuple("Key$0").product(factory.tuple("KDS$2"))); + x19_upper.add(factory.tuple("Key$0").product(factory.tuple("KDS$3"))); + x19_upper.add(factory.tuple("Key$0").product(factory.tuple("KDS$4"))); + x19_upper.add(factory.tuple("Key$1").product(factory.tuple("KDS$0"))); + x19_upper.add(factory.tuple("Key$1").product(factory.tuple("KDS$1"))); + x19_upper.add(factory.tuple("Key$1").product(factory.tuple("KDS$2"))); + x19_upper.add(factory.tuple("Key$1").product(factory.tuple("KDS$3"))); + x19_upper.add(factory.tuple("Key$1").product(factory.tuple("KDS$4"))); + x19_upper.add(factory.tuple("Key$2").product(factory.tuple("KDS$0"))); + x19_upper.add(factory.tuple("Key$2").product(factory.tuple("KDS$1"))); + x19_upper.add(factory.tuple("Key$2").product(factory.tuple("KDS$2"))); + x19_upper.add(factory.tuple("Key$2").product(factory.tuple("KDS$3"))); + x19_upper.add(factory.tuple("Key$2").product(factory.tuple("KDS$4"))); + x19_upper.add(factory.tuple("Key$3").product(factory.tuple("KDS$0"))); + x19_upper.add(factory.tuple("Key$3").product(factory.tuple("KDS$1"))); + x19_upper.add(factory.tuple("Key$3").product(factory.tuple("KDS$2"))); + x19_upper.add(factory.tuple("Key$3").product(factory.tuple("KDS$3"))); + x19_upper.add(factory.tuple("Key$3").product(factory.tuple("KDS$4"))); + x19_upper.add(factory.tuple("Key$4").product(factory.tuple("KDS$0"))); + x19_upper.add(factory.tuple("Key$4").product(factory.tuple("KDS$1"))); + x19_upper.add(factory.tuple("Key$4").product(factory.tuple("KDS$2"))); + x19_upper.add(factory.tuple("Key$4").product(factory.tuple("KDS$3"))); + x19_upper.add(factory.tuple("Key$4").product(factory.tuple("KDS$4"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("Key$0").product(factory.tuple("Tick$0"))); + x20_upper.add(factory.tuple("Key$0").product(factory.tuple("Tick$1"))); + x20_upper.add(factory.tuple("Key$0").product(factory.tuple("Tick$2"))); + x20_upper.add(factory.tuple("Key$0").product(factory.tuple("Tick$3"))); + x20_upper.add(factory.tuple("Key$0").product(factory.tuple("Tick$4"))); + x20_upper.add(factory.tuple("Key$1").product(factory.tuple("Tick$0"))); + x20_upper.add(factory.tuple("Key$1").product(factory.tuple("Tick$1"))); + x20_upper.add(factory.tuple("Key$1").product(factory.tuple("Tick$2"))); + x20_upper.add(factory.tuple("Key$1").product(factory.tuple("Tick$3"))); + x20_upper.add(factory.tuple("Key$1").product(factory.tuple("Tick$4"))); + x20_upper.add(factory.tuple("Key$2").product(factory.tuple("Tick$0"))); + x20_upper.add(factory.tuple("Key$2").product(factory.tuple("Tick$1"))); + x20_upper.add(factory.tuple("Key$2").product(factory.tuple("Tick$2"))); + x20_upper.add(factory.tuple("Key$2").product(factory.tuple("Tick$3"))); + x20_upper.add(factory.tuple("Key$2").product(factory.tuple("Tick$4"))); + x20_upper.add(factory.tuple("Key$3").product(factory.tuple("Tick$0"))); + x20_upper.add(factory.tuple("Key$3").product(factory.tuple("Tick$1"))); + x20_upper.add(factory.tuple("Key$3").product(factory.tuple("Tick$2"))); + x20_upper.add(factory.tuple("Key$3").product(factory.tuple("Tick$3"))); + x20_upper.add(factory.tuple("Key$3").product(factory.tuple("Tick$4"))); + x20_upper.add(factory.tuple("Key$4").product(factory.tuple("Tick$0"))); + x20_upper.add(factory.tuple("Key$4").product(factory.tuple("Tick$1"))); + x20_upper.add(factory.tuple("Key$4").product(factory.tuple("Tick$2"))); + x20_upper.add(factory.tuple("Key$4").product(factory.tuple("Tick$3"))); + x20_upper.add(factory.tuple("Key$4").product(factory.tuple("Tick$4"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("Message$0").product(factory.tuple("KDS$0"))); + x21_upper.add(factory.tuple("Message$0").product(factory.tuple("KDS$1"))); + x21_upper.add(factory.tuple("Message$0").product(factory.tuple("KDS$2"))); + x21_upper.add(factory.tuple("Message$0").product(factory.tuple("KDS$3"))); + x21_upper.add(factory.tuple("Message$0").product(factory.tuple("KDS$4"))); + x21_upper.add(factory.tuple("Message$1").product(factory.tuple("KDS$0"))); + x21_upper.add(factory.tuple("Message$1").product(factory.tuple("KDS$1"))); + x21_upper.add(factory.tuple("Message$1").product(factory.tuple("KDS$2"))); + x21_upper.add(factory.tuple("Message$1").product(factory.tuple("KDS$3"))); + x21_upper.add(factory.tuple("Message$1").product(factory.tuple("KDS$4"))); + x21_upper.add(factory.tuple("Message$2").product(factory.tuple("KDS$0"))); + x21_upper.add(factory.tuple("Message$2").product(factory.tuple("KDS$1"))); + x21_upper.add(factory.tuple("Message$2").product(factory.tuple("KDS$2"))); + x21_upper.add(factory.tuple("Message$2").product(factory.tuple("KDS$3"))); + x21_upper.add(factory.tuple("Message$2").product(factory.tuple("KDS$4"))); + x21_upper.add(factory.tuple("Message$3").product(factory.tuple("KDS$0"))); + x21_upper.add(factory.tuple("Message$3").product(factory.tuple("KDS$1"))); + x21_upper.add(factory.tuple("Message$3").product(factory.tuple("KDS$2"))); + x21_upper.add(factory.tuple("Message$3").product(factory.tuple("KDS$3"))); + x21_upper.add(factory.tuple("Message$3").product(factory.tuple("KDS$4"))); + x21_upper.add(factory.tuple("Message$4").product(factory.tuple("KDS$0"))); + x21_upper.add(factory.tuple("Message$4").product(factory.tuple("KDS$1"))); + x21_upper.add(factory.tuple("Message$4").product(factory.tuple("KDS$2"))); + x21_upper.add(factory.tuple("Message$4").product(factory.tuple("KDS$3"))); + x21_upper.add(factory.tuple("Message$4").product(factory.tuple("KDS$4"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(2); + x22_upper.add(factory.tuple("Message$0").product(factory.tuple("Tick$0"))); + x22_upper.add(factory.tuple("Message$0").product(factory.tuple("Tick$1"))); + x22_upper.add(factory.tuple("Message$0").product(factory.tuple("Tick$2"))); + x22_upper.add(factory.tuple("Message$0").product(factory.tuple("Tick$3"))); + x22_upper.add(factory.tuple("Message$0").product(factory.tuple("Tick$4"))); + x22_upper.add(factory.tuple("Message$1").product(factory.tuple("Tick$0"))); + x22_upper.add(factory.tuple("Message$1").product(factory.tuple("Tick$1"))); + x22_upper.add(factory.tuple("Message$1").product(factory.tuple("Tick$2"))); + x22_upper.add(factory.tuple("Message$1").product(factory.tuple("Tick$3"))); + x22_upper.add(factory.tuple("Message$1").product(factory.tuple("Tick$4"))); + x22_upper.add(factory.tuple("Message$2").product(factory.tuple("Tick$0"))); + x22_upper.add(factory.tuple("Message$2").product(factory.tuple("Tick$1"))); + x22_upper.add(factory.tuple("Message$2").product(factory.tuple("Tick$2"))); + x22_upper.add(factory.tuple("Message$2").product(factory.tuple("Tick$3"))); + x22_upper.add(factory.tuple("Message$2").product(factory.tuple("Tick$4"))); + x22_upper.add(factory.tuple("Message$3").product(factory.tuple("Tick$0"))); + x22_upper.add(factory.tuple("Message$3").product(factory.tuple("Tick$1"))); + x22_upper.add(factory.tuple("Message$3").product(factory.tuple("Tick$2"))); + x22_upper.add(factory.tuple("Message$3").product(factory.tuple("Tick$3"))); + x22_upper.add(factory.tuple("Message$3").product(factory.tuple("Tick$4"))); + x22_upper.add(factory.tuple("Message$4").product(factory.tuple("Tick$0"))); + x22_upper.add(factory.tuple("Message$4").product(factory.tuple("Tick$1"))); + x22_upper.add(factory.tuple("Message$4").product(factory.tuple("Tick$2"))); + x22_upper.add(factory.tuple("Message$4").product(factory.tuple("Tick$3"))); + x22_upper.add(factory.tuple("Message$4").product(factory.tuple("Tick$4"))); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("KDS$0").product(factory.tuple("KDS$0"))); + x23_upper.add(factory.tuple("KDS$0").product(factory.tuple("KDS$1"))); + x23_upper.add(factory.tuple("KDS$0").product(factory.tuple("KDS$2"))); + x23_upper.add(factory.tuple("KDS$0").product(factory.tuple("KDS$3"))); + x23_upper.add(factory.tuple("KDS$0").product(factory.tuple("KDS$4"))); + x23_upper.add(factory.tuple("KDS$1").product(factory.tuple("KDS$0"))); + x23_upper.add(factory.tuple("KDS$1").product(factory.tuple("KDS$1"))); + x23_upper.add(factory.tuple("KDS$1").product(factory.tuple("KDS$2"))); + x23_upper.add(factory.tuple("KDS$1").product(factory.tuple("KDS$3"))); + x23_upper.add(factory.tuple("KDS$1").product(factory.tuple("KDS$4"))); + x23_upper.add(factory.tuple("KDS$2").product(factory.tuple("KDS$0"))); + x23_upper.add(factory.tuple("KDS$2").product(factory.tuple("KDS$1"))); + x23_upper.add(factory.tuple("KDS$2").product(factory.tuple("KDS$2"))); + x23_upper.add(factory.tuple("KDS$2").product(factory.tuple("KDS$3"))); + x23_upper.add(factory.tuple("KDS$2").product(factory.tuple("KDS$4"))); + x23_upper.add(factory.tuple("KDS$3").product(factory.tuple("KDS$0"))); + x23_upper.add(factory.tuple("KDS$3").product(factory.tuple("KDS$1"))); + x23_upper.add(factory.tuple("KDS$3").product(factory.tuple("KDS$2"))); + x23_upper.add(factory.tuple("KDS$3").product(factory.tuple("KDS$3"))); + x23_upper.add(factory.tuple("KDS$3").product(factory.tuple("KDS$4"))); + x23_upper.add(factory.tuple("KDS$4").product(factory.tuple("KDS$0"))); + x23_upper.add(factory.tuple("KDS$4").product(factory.tuple("KDS$1"))); + x23_upper.add(factory.tuple("KDS$4").product(factory.tuple("KDS$2"))); + x23_upper.add(factory.tuple("KDS$4").product(factory.tuple("KDS$3"))); + x23_upper.add(factory.tuple("KDS$4").product(factory.tuple("KDS$4"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(2); + x24_upper.add(factory.tuple("Member$0").product(factory.tuple("KDS$0"))); + x24_upper.add(factory.tuple("Member$0").product(factory.tuple("KDS$1"))); + x24_upper.add(factory.tuple("Member$0").product(factory.tuple("KDS$2"))); + x24_upper.add(factory.tuple("Member$0").product(factory.tuple("KDS$3"))); + x24_upper.add(factory.tuple("Member$0").product(factory.tuple("KDS$4"))); + x24_upper.add(factory.tuple("Member$1").product(factory.tuple("KDS$0"))); + x24_upper.add(factory.tuple("Member$1").product(factory.tuple("KDS$1"))); + x24_upper.add(factory.tuple("Member$1").product(factory.tuple("KDS$2"))); + x24_upper.add(factory.tuple("Member$1").product(factory.tuple("KDS$3"))); + x24_upper.add(factory.tuple("Member$1").product(factory.tuple("KDS$4"))); + x24_upper.add(factory.tuple("Member$2").product(factory.tuple("KDS$0"))); + x24_upper.add(factory.tuple("Member$2").product(factory.tuple("KDS$1"))); + x24_upper.add(factory.tuple("Member$2").product(factory.tuple("KDS$2"))); + x24_upper.add(factory.tuple("Member$2").product(factory.tuple("KDS$3"))); + x24_upper.add(factory.tuple("Member$2").product(factory.tuple("KDS$4"))); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(1); + x25_upper.add(factory.tuple("Tick$0")); + x25_upper.add(factory.tuple("Tick$1")); + x25_upper.add(factory.tuple("Tick$2")); + x25_upper.add(factory.tuple("Tick$3")); + x25_upper.add(factory.tuple("Tick$4")); + bounds.bound(x25, x25_upper); + + TupleSet x26_upper = factory.noneOf(2); + x26_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$0"))); + x26_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$1"))); + x26_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$2"))); + x26_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$3"))); + x26_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$4"))); + x26_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$0"))); + x26_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$1"))); + x26_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$2"))); + x26_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$3"))); + x26_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$4"))); + x26_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$0"))); + x26_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$1"))); + x26_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$2"))); + x26_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$3"))); + x26_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$4"))); + x26_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$0"))); + x26_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$1"))); + x26_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$2"))); + x26_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$3"))); + x26_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$4"))); + x26_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$0"))); + x26_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$1"))); + x26_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$2"))); + x26_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$3"))); + x26_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$4"))); + bounds.bound(x26, x26_upper); + + TupleSet x27_upper = factory.noneOf(1); + x27_upper.add(factory.tuple("Tick$0")); + x27_upper.add(factory.tuple("Tick$1")); + x27_upper.add(factory.tuple("Tick$2")); + x27_upper.add(factory.tuple("Tick$3")); + x27_upper.add(factory.tuple("Tick$4")); + bounds.bound(x27, x27_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x31=Variable.unary("OutsiderCantRead_this"); + Decls x30=x31.oneOf(x7); + Expression x34=x31.join(x19); + Formula x33=x34.one(); + Formula x35=x34.in(x9); + Formula x32=x33.and(x35); + Formula x29=x32.forAll(x30); + Expression x37=x19.join(Expression.UNIV); + Formula x36=x37.in(x7); + Variable x41=Variable.unary("OutsiderCantRead_this"); + Decls x40=x41.oneOf(x7); + Expression x44=x41.join(x20); + Formula x43=x44.one(); + Formula x45=x44.in(x6); + Formula x42=x43.and(x45); + Formula x39=x42.forAll(x40); + Expression x47=x20.join(Expression.UNIV); + Formula x46=x47.in(x7); + Variable x50=Variable.unary("OutsiderCantRead_this"); + Decls x49=x50.oneOf(x7); + Variable x53=Variable.unary("OutsiderCantRead_c"); + Decls x52=x53.oneOf(x10); + Expression x59=x53.join(x24); + Expression x60=x53.join(x24); + Formula x58=x59.eq(x60); + Expression x67=x50.join(x20); + Expression x68=x26.transpose(); + Expression x66=x67.join(x68); + Expression x69=x59.join(x16); + Expression x65=x66.join(x69); + Formula x64=x53.in(x65); + Formula x63=x64.not(); + Variable x72=Variable.unary("KeyUpdate_k"); + Decls x71=x72.oneOf(x7); + Expression x77=x72.join(x19); + Formula x76=x77.eq(x59); + Expression x79=x72.join(x20); + Formula x78=x79.eq(x67); + Formula x75=x76.and(x78); + Variable x82=Variable.unary("KeyUpdate_c"); + Decls x81=x82.oneOf(x10); + Expression x86=x59.join(x16); + Expression x85=x67.join(x86); + Formula x84=x82.in(x85); + Expression x89=x82.join(x17); + Expression x88=x67.join(x89); + Formula x87=x72.in(x88); + Formula x83=x84.iff(x87); + Formula x80=x83.forAll(x81); + Formula x74=x75.and(x80); + Expression x92=x59.join(x15); + Expression x91=x67.join(x92); + Formula x90=x72.in(x91); + Formula x73=x74.and(x90); + Formula x70=x73.forSome(x71); + Formula x62=x63.and(x70); + Expression x95=x59.join(x16); + Expression x94=x67.join(x95); + Formula x93=x53.in(x94); + Formula x61=x62.and(x93); + Formula x57=x58.and(x61); + Expression x98=x67.join(x68); + Expression x99=x53.join(x18); + Expression x97=x98.join(x99); + Expression x100=x67.join(x99); + Formula x96=x97.eq(x100); + Formula x56=x57.and(x96); + Expression x107=x50.join(x20); + Expression x106=x107.join(x68); + Expression x109=x53.join(x24); + Expression x108=x109.join(x16); + Expression x105=x106.join(x108); + Formula x104=x53.in(x105); + Variable x112=Variable.unary("KeyUpdate_k"); + Decls x111=x112.oneOf(x7); + Expression x117=x112.join(x19); + Formula x116=x117.eq(x109); + Expression x119=x112.join(x20); + Formula x118=x119.eq(x107); + Formula x115=x116.and(x118); + Variable x122=Variable.unary("KeyUpdate_c"); + Decls x121=x122.oneOf(x10); + Expression x126=x109.join(x16); + Expression x125=x107.join(x126); + Formula x124=x122.in(x125); + Expression x129=x122.join(x17); + Expression x128=x107.join(x129); + Formula x127=x112.in(x128); + Formula x123=x124.iff(x127); + Formula x120=x123.forAll(x121); + Formula x114=x115.and(x120); + Expression x132=x109.join(x15); + Expression x131=x107.join(x132); + Formula x130=x112.in(x131); + Formula x113=x114.and(x130); + Formula x110=x113.forSome(x111); + Formula x103=x104.and(x110); + Expression x136=x109.join(x16); + Expression x135=x107.join(x136); + Formula x134=x53.in(x135); + Formula x133=x134.not(); + Formula x102=x103.and(x133); + Expression x139=x107.join(x68); + Expression x140=x53.join(x18); + Expression x138=x139.join(x140); + Expression x141=x107.join(x140); + Formula x137=x138.eq(x141); + Formula x101=x102.and(x137); + Formula x55=x56.or(x101); + Expression x143=x53.join(x24); + Expression x144=x50.join(x19); + Formula x142=x143.eq(x144); + Formula x54=x55.and(x142); + Formula x51=x54.forSome(x52); + Formula x48=x51.forAll(x49); + Variable x147=Variable.unary("OutsiderCantRead_this"); + Decls x146=x147.oneOf(x8); + Expression x150=x147.join(x21); + Formula x149=x150.one(); + Formula x151=x150.in(x9); + Formula x148=x149.and(x151); + Formula x145=x148.forAll(x146); + Expression x153=x21.join(Expression.UNIV); + Formula x152=x153.in(x8); + Variable x156=Variable.unary("OutsiderCantRead_this"); + Decls x155=x156.oneOf(x8); + Expression x159=x156.join(x22); + Formula x158=x159.one(); + Formula x160=x159.in(x6); + Formula x157=x158.and(x160); + Formula x154=x157.forAll(x155); + Expression x162=x22.join(Expression.UNIV); + Formula x161=x162.in(x8); + Variable x165=Variable.unary("OutsiderCantRead_this"); + Decls x164=x165.oneOf(x8); + Expression x172=x165.join(x12); + Expression x174=x165.join(x13); + Expression x176=x172.join(x24); + Expression x175=x176.join(x16); + Expression x173=x174.join(x175); + Formula x171=x172.in(x173); + Expression x180=x165.join(x12); + Formula x179=x180.eq(x172); + Expression x186=x176.join(x15); + Expression x185=x174.join(x186); + Formula x184=x185.some(); + Expression x188=x165.join(x14); + Formula x187=x188.some(); + Formula x183=x184.iff(x187); + Formula x189=x188.in(x185); + Formula x182=x183.and(x189); + Expression x193=x188.join(x20); + Expression x194=x26.closure(); + Expression x192=x193.join(x194); + Expression x195=x185.join(x20); + Expression x191=x192.intersection(x195); + Formula x190=x191.no(); + Formula x181=x182.and(x190); + Formula x178=x179.and(x181); + Expression x197=x165.join(x21); + Formula x196=x197.eq(x176); + Formula x177=x178.and(x196); + Formula x170=x171.and(x177); + Expression x201=x165.join(x13); + Formula x200=x201.eq(x174); + Expression x203=x165.join(x22); + Formula x202=x203.eq(x174); + Formula x199=x200.and(x202); + Expression x209=x176.join(x23); + Expression x208=x209.join(x16); + Expression x207=x174.join(x208); + Formula x206=x207.some(); + Formula x205=x206.not(); + Variable x212=Variable.unary("SendRequest_msg'"); + Decls x211=x212.oneOf(x8); + Expression x218=x165.join(x22); + Expression x221=x26.transpose(); + Expression x220=x221.closure(); + Expression x219=x174.join(x220); + Formula x217=x218.in(x219); + Expression x223=x165.join(x14); + Expression x226=x176.join(x15); + Expression x225=x174.join(x226); + Expression x229=x176.join(x23); + Expression x228=x229.join(x15); + Expression x227=x174.join(x228); + Expression x224=x225.union(x227); + Formula x222=x223.in(x224); + Formula x216=x217.and(x222); + Expression x233=x176.join(x23); + Expression x232=x233.union(x176); + Expression x234=x165.join(x21); + Expression x231=x232.difference(x234); + Formula x230=x231.some(); + Formula x215=x216.and(x230); + Expression x242=x165.join(x13); + Expression x246=x176.join(x23); + Expression x245=x246.union(x176); + Expression x247=x165.join(x21); + Expression x244=x245.difference(x247); + Expression x243=x244.join(x15); + Expression x241=x242.join(x243); + Formula x240=x241.some(); + Expression x249=x212.join(x14); + Formula x248=x249.some(); + Formula x239=x240.iff(x248); + Formula x250=x249.in(x241); + Formula x238=x239.and(x250); + Expression x254=x249.join(x20); + Expression x255=x26.closure(); + Expression x253=x254.join(x255); + Expression x256=x241.join(x20); + Expression x252=x253.intersection(x256); + Formula x251=x252.no(); + Formula x237=x238.and(x251); + Expression x258=x212.join(x13); + Expression x259=x165.join(x13); + Formula x257=x258.eq(x259); + Formula x236=x237.and(x257); + Expression x261=x212.join(x22); + Formula x260=x261.eq(x174); + Formula x235=x236.and(x260); + Formula x214=x215.and(x235); + Expression x264=x212.join(x12); + Expression x265=x165.join(x12); + Formula x263=x264.eq(x265); + Expression x267=x212.join(x21); + Formula x266=x267.eq(x176); + Formula x262=x263.and(x266); + Formula x213=x214.and(x262); + Formula x210=x213.forSome(x211); + Formula x204=x205.or(x210); + Formula x198=x199.and(x204); + Formula x169=x170.and(x198); + Expression x270=x172.join(x18); + Expression x269=x174.join(x270); + Expression x273=x174.join(x68); + Expression x274=x172.join(x18); + Expression x272=x273.join(x274); + Expression x271=x272.union(x165); + Formula x268=x269.eq(x271); + Formula x168=x169.and(x268); + Variable x278=Variable.unary("IsMember_kds"); + Decls x277=x278.oneOf(x9); + Expression x281=x278.join(x16); + Expression x280=x174.join(x281); + Formula x279=x172.in(x280); + Formula x276=x279.forSome(x277); + Variable x284=Variable.unary("IsMember_kds"); + Decls x283=x284.oneOf(x9); + Expression x287=x174.join(x68); + Expression x288=x284.join(x16); + Expression x286=x287.join(x288); + Formula x285=x172.in(x286); + Formula x282=x285.forSome(x283); + Formula x275=x276.iff(x282); + Formula x167=x168.and(x275); + Variable x291=Variable.unary("OutsiderCantRead_msg'"); + Decls x290=x291.oneOf(x8); + Expression x297=x291.join(x22); + Expression x299=x165.join(x22); + Expression x301=x26.transpose(); + Expression x300=x301.closure(); + Expression x298=x299.join(x300); + Formula x296=x297.in(x298); + Expression x303=x291.join(x14); + Expression x307=x165.join(x21); + Expression x306=x307.join(x15); + Expression x305=x299.join(x306); + Expression x310=x307.join(x23); + Expression x309=x310.join(x15); + Expression x308=x299.join(x309); + Expression x304=x305.union(x308); + Formula x302=x303.in(x304); + Formula x295=x296.and(x302); + Expression x314=x307.join(x23); + Expression x313=x314.union(x307); + Expression x315=x291.join(x21); + Expression x312=x313.difference(x315); + Formula x311=x312.some(); + Formula x294=x295.and(x311); + Expression x323=x291.join(x13); + Expression x327=x307.join(x23); + Expression x326=x327.union(x307); + Expression x328=x291.join(x21); + Expression x325=x326.difference(x328); + Expression x324=x325.join(x15); + Expression x322=x323.join(x324); + Formula x321=x322.some(); + Expression x330=x165.join(x14); + Formula x329=x330.some(); + Formula x320=x321.iff(x329); + Formula x331=x330.in(x322); + Formula x319=x320.and(x331); + Expression x335=x330.join(x20); + Expression x336=x26.closure(); + Expression x334=x335.join(x336); + Expression x337=x322.join(x20); + Expression x333=x334.intersection(x337); + Formula x332=x333.no(); + Formula x318=x319.and(x332); + Expression x339=x165.join(x13); + Expression x340=x291.join(x13); + Formula x338=x339.eq(x340); + Formula x317=x318.and(x338); + Expression x342=x165.join(x22); + Formula x341=x342.eq(x299); + Formula x316=x317.and(x341); + Formula x293=x294.and(x316); + Expression x345=x165.join(x12); + Expression x346=x291.join(x12); + Formula x344=x345.eq(x346); + Expression x348=x165.join(x21); + Formula x347=x348.eq(x307); + Formula x343=x344.and(x347); + Formula x292=x293.and(x343); + Formula x289=x292.forSome(x290); + Formula x166=x167.or(x289); + Formula x163=x166.forAll(x164); + Variable x351=Variable.unary("OutsiderCantRead_this"); + Decls x350=x351.oneOf(x8); + Expression x354=x351.join(x12); + Formula x353=x354.one(); + Formula x355=x354.in(x10); + Formula x352=x353.and(x355); + Formula x349=x352.forAll(x350); + Expression x357=x12.join(Expression.UNIV); + Formula x356=x357.in(x8); + Variable x360=Variable.unary("OutsiderCantRead_this"); + Decls x359=x360.oneOf(x8); + Expression x363=x360.join(x13); + Formula x362=x363.one(); + Formula x364=x363.in(x6); + Formula x361=x362.and(x364); + Formula x358=x361.forAll(x359); + Expression x366=x13.join(Expression.UNIV); + Formula x365=x366.in(x8); + Variable x369=Variable.unary("OutsiderCantRead_this"); + Decls x368=x369.oneOf(x8); + Expression x372=x369.join(x14); + Formula x371=x372.one(); + Formula x373=x372.in(x7); + Formula x370=x371.and(x373); + Formula x367=x370.forAll(x368); + Expression x375=x14.join(Expression.UNIV); + Formula x374=x375.in(x8); + Variable x378=Variable.unary("OutsiderCantRead_this"); + Decls x377=x378.oneOf(x9); + Expression x381=x378.join(x23); + Formula x380=x381.lone(); + Formula x382=x381.in(x9); + Formula x379=x380.and(x382); + Formula x376=x379.forAll(x377); + Expression x384=x23.join(Expression.UNIV); + Formula x383=x384.in(x9); + Variable x387=Variable.unary("OutsiderCantRead_this"); + Decls x386=x387.oneOf(x9); + Expression x392=x387.join(x15); + Expression x391=x6.join(x392); + Expression x390=x391.join(x19); + Formula x389=x390.eq(x387); + Variable x396=Variable.unary("OutsiderCantRead_t"); + Decls x395=x396.oneOf(x6); + Variable x398=Variable.unary("OutsiderCantRead_k"); + Expression x401=x387.join(x15); + Expression x400=x396.join(x401); + Expression x403=x396.join(x68); + Expression x404=x387.join(x15); + Expression x402=x403.join(x404); + Expression x399=x400.difference(x402); + Decls x397=x398.oneOf(x399); + Decls x394=x395.and(x397); + Expression x406=x398.join(x20); + Formula x405=x406.eq(x396); + Formula x393=x405.forAll(x394); + Formula x388=x389.and(x393); + Formula x385=x388.forAll(x386); + Variable x409=Variable.unary("OutsiderCantRead_this"); + Decls x408=x409.oneOf(x9); + Expression x411=x409.join(x15); + Expression x412=x6.product(x7); + Formula x410=x411.in(x412); + Formula x407=x410.forAll(x408); + Expression x415=x15.join(Expression.UNIV); + Expression x414=x415.join(Expression.UNIV); + Formula x413=x414.in(x9); + Variable x418=Variable.unary("OutsiderCantRead_this"); + Decls x417=x418.oneOf(x9); + Expression x420=x418.join(x16); + Expression x421=x6.product(x10); + Formula x419=x420.in(x421); + Formula x416=x419.forAll(x417); + Expression x424=x16.join(Expression.UNIV); + Expression x423=x424.join(Expression.UNIV); + Formula x422=x423.in(x9); + Variable x427=Variable.unary("OutsiderCantRead_this"); + Decls x426=x427.oneOf(x9); + Variable x431=Variable.unary("Monotonic_t"); + Decls x430=x431.oneOf(x6); + Expression x434=x431.join(x68); + Expression x435=x427.join(x15); + Expression x433=x434.join(x435); + Expression x436=x431.join(x435); + Formula x432=x433.in(x436); + Formula x429=x432.forAll(x430); + Variable x439=Variable.unary("OutsiderCantRead_t"); + Decls x438=x439.oneOf(x6); + Variable x443=Variable.unary("OutsiderCantRead_m"); + Expression x446=x427.join(x16); + Expression x445=x439.join(x446); + Expression x448=x439.join(x68); + Expression x449=x427.join(x16); + Expression x447=x448.join(x449); + Expression x444=x445.difference(x447); + Decls x442=x443.oneOf(x444); + Expression x453=x443.join(x24); + Formula x452=x427.eq(x453); + Expression x459=x439.join(x68); + Expression x460=x427.join(x16); + Expression x458=x459.join(x460); + Formula x457=x443.in(x458); + Formula x456=x457.not(); + Variable x463=Variable.unary("KeyUpdate_k"); + Decls x462=x463.oneOf(x7); + Expression x468=x463.join(x19); + Formula x467=x468.eq(x427); + Expression x470=x463.join(x20); + Formula x469=x470.eq(x439); + Formula x466=x467.and(x469); + Variable x473=Variable.unary("KeyUpdate_c"); + Decls x472=x473.oneOf(x10); + Expression x477=x427.join(x16); + Expression x476=x439.join(x477); + Formula x475=x473.in(x476); + Expression x480=x473.join(x17); + Expression x479=x439.join(x480); + Formula x478=x463.in(x479); + Formula x474=x475.iff(x478); + Formula x471=x474.forAll(x472); + Formula x465=x466.and(x471); + Expression x483=x427.join(x15); + Expression x482=x439.join(x483); + Formula x481=x463.in(x482); + Formula x464=x465.and(x481); + Formula x461=x464.forSome(x462); + Formula x455=x456.and(x461); + Expression x486=x427.join(x16); + Expression x485=x439.join(x486); + Formula x484=x443.in(x485); + Formula x454=x455.and(x484); + Formula x451=x452.and(x454); + Expression x489=x439.join(x68); + Expression x490=x443.join(x18); + Expression x488=x489.join(x490); + Expression x491=x439.join(x490); + Formula x487=x488.eq(x491); + Formula x450=x451.and(x487); + Formula x441=x450.forAll(x442); + Variable x494=Variable.unary("OutsiderCantRead_m"); + Expression x497=x427.join(x16); + Expression x496=x448.join(x497); + Expression x499=x427.join(x16); + Expression x498=x439.join(x499); + Expression x495=x496.difference(x498); + Decls x493=x494.oneOf(x495); + Expression x505=x439.join(x68); + Expression x507=x494.join(x24); + Expression x506=x507.join(x16); + Expression x504=x505.join(x506); + Formula x503=x494.in(x504); + Variable x510=Variable.unary("KeyUpdate_k"); + Decls x509=x510.oneOf(x7); + Expression x515=x510.join(x19); + Formula x514=x515.eq(x507); + Expression x517=x510.join(x20); + Formula x516=x517.eq(x439); + Formula x513=x514.and(x516); + Variable x520=Variable.unary("KeyUpdate_c"); + Decls x519=x520.oneOf(x10); + Expression x524=x507.join(x16); + Expression x523=x439.join(x524); + Formula x522=x520.in(x523); + Expression x527=x520.join(x17); + Expression x526=x439.join(x527); + Formula x525=x510.in(x526); + Formula x521=x522.iff(x525); + Formula x518=x521.forAll(x519); + Formula x512=x513.and(x518); + Expression x530=x507.join(x15); + Expression x529=x439.join(x530); + Formula x528=x510.in(x529); + Formula x511=x512.and(x528); + Formula x508=x511.forSome(x509); + Formula x502=x503.and(x508); + Expression x534=x507.join(x16); + Expression x533=x439.join(x534); + Formula x532=x494.in(x533); + Formula x531=x532.not(); + Formula x501=x502.and(x531); + Expression x537=x439.join(x68); + Expression x538=x494.join(x18); + Expression x536=x537.join(x538); + Expression x539=x439.join(x538); + Formula x535=x536.eq(x539); + Formula x500=x501.and(x535); + Formula x492=x500.forAll(x493); + Formula x440=x441.and(x492); + Formula x437=x440.forAll(x438); + Formula x428=x429.and(x437); + Formula x425=x428.forAll(x426); + Variable x542=Variable.unary("OutsiderCantRead_this"); + Decls x541=x542.oneOf(x10); + Expression x545=x542.join(x24); + Formula x544=x545.one(); + Formula x546=x545.in(x9); + Formula x543=x544.and(x546); + Formula x540=x543.forAll(x541); + Expression x548=x24.join(Expression.UNIV); + Formula x547=x548.in(x10); + Variable x551=Variable.unary("OutsiderCantRead_this"); + Decls x550=x551.oneOf(x10); + Variable x555=Variable.unary("OutsiderCantRead_t"); + Decls x554=x555.oneOf(x6); + Variable x557=Variable.unary("OutsiderCantRead_k"); + Expression x560=x551.join(x17); + Expression x559=x555.join(x560); + Expression x562=x555.join(x68); + Expression x563=x551.join(x17); + Expression x561=x562.join(x563); + Expression x558=x559.difference(x561); + Decls x556=x557.oneOf(x558); + Decls x553=x554.and(x556); + Expression x566=x557.join(x19); + Expression x567=x551.join(x24); + Formula x565=x566.eq(x567); + Expression x569=x557.join(x20); + Formula x568=x569.eq(x555); + Formula x564=x565.and(x568); + Formula x552=x564.forAll(x553); + Formula x549=x552.forAll(x550); + Variable x572=Variable.unary("OutsiderCantRead_this"); + Decls x571=x572.oneOf(x10); + Expression x574=x572.join(x17); + Expression x575=x6.product(x7); + Formula x573=x574.in(x575); + Formula x570=x573.forAll(x571); + Expression x578=x17.join(Expression.UNIV); + Expression x577=x578.join(Expression.UNIV); + Formula x576=x577.in(x10); + Variable x581=Variable.unary("OutsiderCantRead_this"); + Decls x580=x581.oneOf(x10); + Expression x583=x581.join(x18); + Expression x584=x6.product(x8); + Formula x582=x583.in(x584); + Formula x579=x582.forAll(x580); + Expression x587=x18.join(Expression.UNIV); + Expression x586=x587.join(Expression.UNIV); + Formula x585=x586.in(x10); + Variable x590=Variable.unary("OutsiderCantRead_this"); + Decls x589=x590.oneOf(x10); + Variable x594=Variable.unary("Monotonic_t"); + Decls x593=x594.oneOf(x6); + Expression x597=x594.join(x68); + Expression x598=x590.join(x17); + Expression x596=x597.join(x598); + Expression x599=x594.join(x598); + Formula x595=x596.in(x599); + Formula x592=x595.forAll(x593); + Variable x602=Variable.unary("Monotonic_t"); + Decls x601=x602.oneOf(x6); + Expression x605=x602.join(x68); + Expression x606=x590.join(x18); + Expression x604=x605.join(x606); + Expression x607=x602.join(x606); + Formula x603=x604.in(x607); + Formula x600=x603.forAll(x601); + Formula x591=x592.and(x600); + Formula x588=x591.forAll(x589); + Expression x610=x11.product(x25); + Expression x609=x11.join(x610); + Formula x608=x609.in(x6); + Expression x613=x11.product(x26); + Expression x612=x11.join(x613); + Expression x614=x6.product(x6); + Formula x611=x612.in(x614); + Formula x615=x26.totalOrder(x6,x25,x27); + Expression x620=x10.join(x18); + Expression x619=x25.join(x620); + Formula x618=x619.no(); + Expression x624=x10.join(x17); + Expression x623=x25.join(x624); + Formula x622=x623.no(); + Expression x627=x9.join(x16); + Expression x626=x25.join(x627); + Formula x625=x626.no(); + Formula x621=x622.and(x625); + Formula x617=x618.and(x621); + Expression x630=x9.join(x15); + Expression x629=x25.join(x630); + Formula x628=x629.no(); + Formula x616=x617.and(x628); + Variable x634=Variable.unary("OutsiderCantRead_m"); + Decls x633=x634.oneOf(x10); + Variable x636=Variable.unary("OutsiderCantRead_t"); + Expression x637=x6.difference(x25); + Decls x635=x636.oneOf(x637); + Decls x632=x633.and(x635); + Variable x642=Variable.unary("OutsiderCantRead_msg"); + Decls x641=x642.oneOf(x8); + Expression x651=x634.join(x24); + Expression x650=x651.join(x16); + Expression x649=x636.join(x650); + Formula x648=x634.in(x649); + Expression x655=x642.join(x12); + Formula x654=x655.eq(x634); + Expression x661=x651.join(x15); + Expression x660=x636.join(x661); + Formula x659=x660.some(); + Expression x663=x642.join(x14); + Formula x662=x663.some(); + Formula x658=x659.iff(x662); + Formula x664=x663.in(x660); + Formula x657=x658.and(x664); + Expression x668=x663.join(x20); + Expression x669=x26.closure(); + Expression x667=x668.join(x669); + Expression x670=x660.join(x20); + Expression x666=x667.intersection(x670); + Formula x665=x666.no(); + Formula x656=x657.and(x665); + Formula x653=x654.and(x656); + Expression x672=x642.join(x21); + Formula x671=x672.eq(x651); + Formula x652=x653.and(x671); + Formula x647=x648.and(x652); + Expression x676=x642.join(x13); + Formula x675=x676.eq(x636); + Expression x678=x642.join(x22); + Formula x677=x678.eq(x636); + Formula x674=x675.and(x677); + Expression x684=x651.join(x23); + Expression x683=x684.join(x16); + Expression x682=x636.join(x683); + Formula x681=x682.some(); + Formula x680=x681.not(); + Variable x687=Variable.unary("SendRequest_msg'"); + Decls x686=x687.oneOf(x8); + Expression x693=x642.join(x22); + Expression x696=x26.transpose(); + Expression x695=x696.closure(); + Expression x694=x636.join(x695); + Formula x692=x693.in(x694); + Expression x698=x642.join(x14); + Expression x701=x651.join(x15); + Expression x700=x636.join(x701); + Expression x704=x651.join(x23); + Expression x703=x704.join(x15); + Expression x702=x636.join(x703); + Expression x699=x700.union(x702); + Formula x697=x698.in(x699); + Formula x691=x692.and(x697); + Expression x708=x651.join(x23); + Expression x707=x708.union(x651); + Expression x709=x642.join(x21); + Expression x706=x707.difference(x709); + Formula x705=x706.some(); + Formula x690=x691.and(x705); + Expression x717=x642.join(x13); + Expression x721=x651.join(x23); + Expression x720=x721.union(x651); + Expression x722=x642.join(x21); + Expression x719=x720.difference(x722); + Expression x718=x719.join(x15); + Expression x716=x717.join(x718); + Formula x715=x716.some(); + Expression x724=x687.join(x14); + Formula x723=x724.some(); + Formula x714=x715.iff(x723); + Formula x725=x724.in(x716); + Formula x713=x714.and(x725); + Expression x729=x724.join(x20); + Expression x730=x26.closure(); + Expression x728=x729.join(x730); + Expression x731=x716.join(x20); + Expression x727=x728.intersection(x731); + Formula x726=x727.no(); + Formula x712=x713.and(x726); + Expression x733=x687.join(x13); + Expression x734=x642.join(x13); + Formula x732=x733.eq(x734); + Formula x711=x712.and(x732); + Expression x736=x687.join(x22); + Formula x735=x736.eq(x636); + Formula x710=x711.and(x735); + Formula x689=x690.and(x710); + Expression x739=x687.join(x12); + Expression x740=x642.join(x12); + Formula x738=x739.eq(x740); + Expression x742=x687.join(x21); + Formula x741=x742.eq(x651); + Formula x737=x738.and(x741); + Formula x688=x689.and(x737); + Formula x685=x688.forSome(x686); + Formula x679=x680.or(x685); + Formula x673=x674.and(x679); + Formula x646=x647.and(x673); + Expression x745=x634.join(x18); + Expression x744=x636.join(x745); + Expression x748=x636.join(x68); + Expression x749=x634.join(x18); + Expression x747=x748.join(x749); + Expression x746=x747.union(x642); + Formula x743=x744.eq(x746); + Formula x645=x646.and(x743); + Variable x753=Variable.unary("IsMember_kds"); + Decls x752=x753.oneOf(x9); + Expression x756=x753.join(x16); + Expression x755=x636.join(x756); + Formula x754=x634.in(x755); + Formula x751=x754.forSome(x752); + Variable x759=Variable.unary("IsMember_kds"); + Decls x758=x759.oneOf(x9); + Expression x762=x636.join(x68); + Expression x763=x759.join(x16); + Expression x761=x762.join(x763); + Formula x760=x634.in(x761); + Formula x757=x760.forSome(x758); + Formula x750=x751.iff(x757); + Formula x644=x645.and(x750); + Variable x770=Variable.unary("IsMember_kds"); + Decls x769=x770.oneOf(x9); + Expression x773=x770.join(x16); + Expression x772=x636.join(x773); + Formula x771=x634.in(x772); + Formula x768=x771.forSome(x769); + Variable x776=Variable.unary("IsMember_kds"); + Decls x775=x776.oneOf(x9); + Expression x779=x636.join(x68); + Expression x780=x776.join(x16); + Expression x778=x779.join(x780); + Formula x777=x634.in(x778); + Formula x774=x777.forSome(x775); + Formula x767=x768.iff(x774); + Expression x785=x636.join(x68); + Expression x786=x634.join(x18); + Expression x784=x785.join(x786); + Formula x783=x642.in(x784); + Formula x782=x783.not(); + Expression x788=x642.join(x14); + Expression x790=x634.join(x17); + Expression x789=x636.join(x790); + Formula x787=x788.in(x789); + Formula x781=x782.and(x787); + Formula x766=x767.and(x781); + Expression x792=x642.join(x22); + Expression x795=x26.transpose(); + Expression x794=x795.closure(); + Expression x793=x636.join(x794); + Formula x791=x792.in(x793); + Formula x765=x766.and(x791); + Expression x798=x634.join(x18); + Expression x797=x636.join(x798); + Expression x801=x636.join(x68); + Expression x802=x634.join(x18); + Expression x800=x801.join(x802); + Expression x799=x800.union(x642); + Formula x796=x797.eq(x799); + Formula x764=x765.and(x796); + Formula x643=x644.or(x764); + Formula x640=x643.forSome(x641); + Variable x806=Variable.unary("OutsiderCantRead_kds"); + Decls x805=x806.oneOf(x9); + Expression x810=x634.join(x24); + Formula x809=x806.eq(x810); + Expression x816=x636.join(x68); + Expression x817=x806.join(x16); + Expression x815=x816.join(x817); + Formula x814=x634.in(x815); + Formula x813=x814.not(); + Variable x820=Variable.unary("KeyUpdate_k"); + Decls x819=x820.oneOf(x7); + Expression x825=x820.join(x19); + Formula x824=x825.eq(x806); + Expression x827=x820.join(x20); + Formula x826=x827.eq(x636); + Formula x823=x824.and(x826); + Variable x830=Variable.unary("KeyUpdate_c"); + Decls x829=x830.oneOf(x10); + Expression x834=x806.join(x16); + Expression x833=x636.join(x834); + Formula x832=x830.in(x833); + Expression x837=x830.join(x17); + Expression x836=x636.join(x837); + Formula x835=x820.in(x836); + Formula x831=x832.iff(x835); + Formula x828=x831.forAll(x829); + Formula x822=x823.and(x828); + Expression x840=x806.join(x15); + Expression x839=x636.join(x840); + Formula x838=x820.in(x839); + Formula x821=x822.and(x838); + Formula x818=x821.forSome(x819); + Formula x812=x813.and(x818); + Expression x843=x806.join(x16); + Expression x842=x636.join(x843); + Formula x841=x634.in(x842); + Formula x811=x812.and(x841); + Formula x808=x809.and(x811); + Expression x846=x636.join(x68); + Expression x847=x634.join(x18); + Expression x845=x846.join(x847); + Expression x848=x636.join(x847); + Formula x844=x845.eq(x848); + Formula x807=x808.and(x844); + Formula x804=x807.forSome(x805); + Expression x852=x636.join(x68); + Expression x853=x634.join(x18); + Expression x851=x852.join(x853); + Expression x854=x636.join(x853); + Formula x850=x851.eq(x854); + Variable x858=Variable.unary("IsMember_kds"); + Decls x857=x858.oneOf(x9); + Expression x861=x858.join(x16); + Expression x860=x636.join(x861); + Formula x859=x634.in(x860); + Formula x856=x859.forSome(x857); + Variable x864=Variable.unary("IsMember_kds"); + Decls x863=x864.oneOf(x9); + Expression x867=x636.join(x68); + Expression x868=x864.join(x16); + Expression x866=x867.join(x868); + Formula x865=x634.in(x866); + Formula x862=x865.forSome(x863); + Formula x855=x856.iff(x862); + Formula x849=x850.and(x855); + Formula x803=x804.or(x849); + Formula x639=x640.or(x803); + Expression x874=x636.join(x68); + Expression x876=x634.join(x24); + Expression x875=x876.join(x16); + Expression x873=x874.join(x875); + Formula x872=x634.in(x873); + Variable x879=Variable.unary("KeyUpdate_k"); + Decls x878=x879.oneOf(x7); + Expression x884=x879.join(x19); + Formula x883=x884.eq(x876); + Expression x886=x879.join(x20); + Formula x885=x886.eq(x636); + Formula x882=x883.and(x885); + Variable x889=Variable.unary("KeyUpdate_c"); + Decls x888=x889.oneOf(x10); + Expression x893=x876.join(x16); + Expression x892=x636.join(x893); + Formula x891=x889.in(x892); + Expression x896=x889.join(x17); + Expression x895=x636.join(x896); + Formula x894=x879.in(x895); + Formula x890=x891.iff(x894); + Formula x887=x890.forAll(x888); + Formula x881=x882.and(x887); + Expression x899=x876.join(x15); + Expression x898=x636.join(x899); + Formula x897=x879.in(x898); + Formula x880=x881.and(x897); + Formula x877=x880.forSome(x878); + Formula x871=x872.and(x877); + Expression x903=x876.join(x16); + Expression x902=x636.join(x903); + Formula x901=x634.in(x902); + Formula x900=x901.not(); + Formula x870=x871.and(x900); + Expression x906=x636.join(x68); + Expression x907=x634.join(x18); + Expression x905=x906.join(x907); + Expression x908=x636.join(x907); + Formula x904=x905.eq(x908); + Formula x869=x870.and(x904); + Formula x638=x639.or(x869); + Formula x631=x638.forAll(x632); + Variable x912=Variable.unary("OutsiderCantRead_k"); + Decls x911=x912.oneOf(x7); + Variable x914=Variable.unary("OutsiderCantRead_k'"); + Decls x913=x914.oneOf(x7); + Decls x910=x911.and(x913); + Formula x919=x912.eq(x914); + Formula x918=x919.not(); + Expression x921=x912.join(x19); + Expression x922=x914.join(x19); + Formula x920=x921.eq(x922); + Formula x917=x918.and(x920); + Expression x924=x912.join(x20); + Expression x925=x914.join(x20); + Formula x923=x924.eq(x925); + Formula x916=x917.and(x923); + Formula x915=x916.not(); + Formula x909=x915.forAll(x910); + Variable x929=Variable.unary("OutsiderCantRead_g"); + Decls x928=x929.oneOf(x9); + Variable x931=Variable.unary("OutsiderCantRead_msg"); + Decls x930=x931.oneOf(x8); + Variable x933=Variable.unary("OutsiderCantRead_t"); + Decls x932=x933.oneOf(x6); + Decls x927=x928.and(x930).and(x932); + Expression x939=x931.join(x22); + Expression x942=x26.transpose(); + Expression x941=x942.closure(); + Expression x940=x933.join(x941); + Formula x938=x939.in(x940); + Expression x944=x931.join(x14); + Expression x947=x929.join(x15); + Expression x946=x933.join(x947); + Expression x950=x929.join(x23); + Expression x949=x950.join(x15); + Expression x948=x933.join(x949); + Expression x945=x946.union(x948); + Formula x943=x944.in(x945); + Formula x937=x938.and(x943); + Expression x954=x929.join(x23); + Expression x953=x954.union(x929); + Expression x955=x931.join(x21); + Expression x952=x953.difference(x955); + Formula x951=x952.some(); + Formula x936=x937.and(x951); + Formula x935=x936.not(); + Variable x958=Variable.unary("OutsiderCantRead_msg'"); + Decls x957=x958.oneOf(x8); + Expression x964=x931.join(x22); + Expression x967=x26.transpose(); + Expression x966=x967.closure(); + Expression x965=x933.join(x966); + Formula x963=x964.in(x965); + Expression x969=x931.join(x14); + Expression x972=x929.join(x15); + Expression x971=x933.join(x972); + Expression x975=x929.join(x23); + Expression x974=x975.join(x15); + Expression x973=x933.join(x974); + Expression x970=x971.union(x973); + Formula x968=x969.in(x970); + Formula x962=x963.and(x968); + Expression x979=x929.join(x23); + Expression x978=x979.union(x929); + Expression x980=x931.join(x21); + Expression x977=x978.difference(x980); + Formula x976=x977.some(); + Formula x961=x962.and(x976); + Expression x988=x931.join(x13); + Expression x992=x929.join(x23); + Expression x991=x992.union(x929); + Expression x993=x931.join(x21); + Expression x990=x991.difference(x993); + Expression x989=x990.join(x15); + Expression x987=x988.join(x989); + Formula x986=x987.some(); + Expression x995=x958.join(x14); + Formula x994=x995.some(); + Formula x985=x986.iff(x994); + Formula x996=x995.in(x987); + Formula x984=x985.and(x996); + Expression x1000=x995.join(x20); + Expression x1001=x26.closure(); + Expression x999=x1000.join(x1001); + Expression x1002=x987.join(x20); + Expression x998=x999.intersection(x1002); + Formula x997=x998.no(); + Formula x983=x984.and(x997); + Expression x1004=x958.join(x13); + Expression x1005=x931.join(x13); + Formula x1003=x1004.eq(x1005); + Formula x982=x983.and(x1003); + Expression x1007=x958.join(x22); + Formula x1006=x1007.eq(x933); + Formula x981=x982.and(x1006); + Formula x960=x961.and(x981); + Expression x1010=x958.join(x12); + Expression x1011=x931.join(x12); + Formula x1009=x1010.eq(x1011); + Expression x1013=x958.join(x21); + Formula x1012=x1013.eq(x929); + Formula x1008=x1009.and(x1012); + Formula x959=x960.and(x1008); + Formula x956=x959.forSome(x957); + Formula x934=x935.or(x956); + Formula x926=x934.forAll(x927); + Variable x1018=Variable.unary("OutsiderCantRead_g"); + Decls x1017=x1018.oneOf(x9); + Expression x1020=x1018.join(x23); + Formula x1019=x1020.no(); + Expression x1016=x1019.comprehension(x1017); + Formula x1015=x1016.one(); + Expression x1025=x23.transpose(); + Expression x1024=x1025.closure(); + Expression x1035=Expression.INTS.union(x5); + Expression x1034=x1035.union(x6); + Expression x1033=x1034.union(x7); + Expression x1032=x1033.union(x8); + Expression x1031=x1032.union(x9); + Expression x1030=x1031.union(x10); + Expression x1029=x1030.union(x11); + Expression x1028=x1029.product(Expression.UNIV); + Expression x1026=Expression.IDEN.intersection(x1028); + Expression x1023=x1024.union(x1026); + Expression x1022=x1016.join(x1023); + Formula x1021=x9.in(x1022); + Formula x1014=x1015.and(x1021); + Formula x1037=x10.eq(x10); + Formula x1038=x9.eq(x9); + Formula x1039=x8.eq(x8); + Formula x1040=x7.eq(x7); + Variable x1044=Variable.unary("OutsiderCantRead_m"); + Decls x1043=x1044.oneOf(x8); + Variable x1046=Variable.unary("OutsiderCantRead_m'"); + Decls x1045=x1046.oneOf(x8); + Decls x1042=x1043.and(x1045); + Formula x1051=x1044.eq(x1046); + Formula x1050=x1051.not(); + Expression x1055=x1044.join(x12); + Expression x1056=x1046.join(x12); + Formula x1054=x1055.eq(x1056); + Expression x1058=x1044.join(x14); + Expression x1059=x1046.join(x14); + Formula x1057=x1058.eq(x1059); + Formula x1053=x1054.and(x1057); + Expression x1061=x1044.join(x21); + Expression x1062=x1046.join(x21); + Formula x1060=x1061.eq(x1062); + Formula x1052=x1053.and(x1060); + Formula x1049=x1050.and(x1052); + Expression x1065=x1044.join(x13); + Expression x1066=x1046.join(x13); + Formula x1064=x1065.eq(x1066); + Expression x1068=x1044.join(x22); + Expression x1069=x1046.join(x22); + Formula x1067=x1068.eq(x1069); + Formula x1063=x1064.and(x1067); + Formula x1048=x1049.and(x1063); + Formula x1047=x1048.not(); + Formula x1041=x1047.forAll(x1042); + Variable x1074=Variable.unary("OutsiderCantRead_msg"); + Decls x1073=x1074.oneOf(x8); + Variable x1076=Variable.unary("OutsiderCantRead_m"); + Decls x1075=x1076.oneOf(x10); + Variable x1078=Variable.unary("OutsiderCantRead_t"); + Decls x1077=x1078.oneOf(x6); + Decls x1072=x1073.and(x1075).and(x1077); + Variable x1084=Variable.unary("IsMember_kds"); + Decls x1083=x1084.oneOf(x9); + Expression x1086=x1074.join(x12); + Expression x1088=x1074.join(x13); + Expression x1089=x1084.join(x16); + Expression x1087=x1088.join(x1089); + Formula x1085=x1086.in(x1087); + Formula x1082=x1085.forSome(x1083); + Variable x1093=Variable.unary("IsMember_kds"); + Decls x1092=x1093.oneOf(x9); + Expression x1096=x1074.join(x13); + Expression x1097=x1093.join(x16); + Expression x1095=x1096.join(x1097); + Formula x1094=x1076.in(x1095); + Formula x1091=x1094.forSome(x1092); + Formula x1090=x1091.not(); + Formula x1081=x1082.and(x1090); + Variable x1100=Variable.unary("CanReceive_msg'"); + Decls x1099=x1100.oneOf(x8); + Expression x1104=x1100.join(x13); + Expression x1105=x1074.join(x13); + Formula x1103=x1104.eq(x1105); + Expression x1107=x1100.join(x12); + Expression x1108=x1074.join(x12); + Formula x1106=x1107.eq(x1108); + Formula x1102=x1103.and(x1106); + Expression x1112=x1078.join(x68); + Expression x1113=x1076.join(x18); + Expression x1111=x1112.join(x1113); + Formula x1110=x1100.in(x1111); + Variable x1119=Variable.unary("IsMember_kds"); + Decls x1118=x1119.oneOf(x9); + Expression x1122=x1119.join(x16); + Expression x1121=x1078.join(x1122); + Formula x1120=x1076.in(x1121); + Formula x1117=x1120.forSome(x1118); + Variable x1125=Variable.unary("IsMember_kds"); + Decls x1124=x1125.oneOf(x9); + Expression x1128=x1078.join(x68); + Expression x1129=x1125.join(x16); + Expression x1127=x1128.join(x1129); + Formula x1126=x1076.in(x1127); + Formula x1123=x1126.forSome(x1124); + Formula x1116=x1117.iff(x1123); + Expression x1134=x1078.join(x68); + Expression x1135=x1076.join(x18); + Expression x1133=x1134.join(x1135); + Formula x1132=x1100.in(x1133); + Formula x1131=x1132.not(); + Expression x1137=x1100.join(x14); + Expression x1139=x1076.join(x17); + Expression x1138=x1078.join(x1139); + Formula x1136=x1137.in(x1138); + Formula x1130=x1131.and(x1136); + Formula x1115=x1116.and(x1130); + Expression x1141=x1100.join(x22); + Expression x1144=x26.transpose(); + Expression x1143=x1144.closure(); + Expression x1142=x1078.join(x1143); + Formula x1140=x1141.in(x1142); + Formula x1114=x1115.and(x1140); + Formula x1109=x1110.or(x1114); + Formula x1101=x1102.and(x1109); + Formula x1098=x1101.forSome(x1099); + Formula x1080=x1081.and(x1098); + Formula x1079=x1080.not(); + Formula x1071=x1079.forAll(x1072); + Formula x1070=x1071.not(); + Formula x1145=x0.eq(x0); + Formula x1146=x1.eq(x1); + Formula x1147=x2.eq(x2); + Formula x1148=x3.eq(x3); + Formula x1149=x4.eq(x4); + Formula x1150=x5.eq(x5); + Formula x1151=x6.eq(x6); + Formula x1152=x7.eq(x7); + Formula x1153=x8.eq(x8); + Formula x1154=x9.eq(x9); + Formula x1155=x10.eq(x10); + Formula x1156=x11.eq(x11); + Formula x1157=x12.eq(x12); + Formula x1158=x13.eq(x13); + Formula x1159=x14.eq(x14); + Formula x1160=x15.eq(x15); + Formula x1161=x16.eq(x16); + Formula x1162=x17.eq(x17); + Formula x1163=x18.eq(x18); + Formula x1164=x19.eq(x19); + Formula x1165=x20.eq(x20); + Formula x1166=x21.eq(x21); + Formula x1167=x22.eq(x22); + Formula x1168=x23.eq(x23); + Formula x1169=x24.eq(x24); + Formula x1170=x25.eq(x25); + Formula x1171=x26.eq(x26); + Formula x1172=x27.eq(x27); + Formula x28=Formula.compose(FormulaOperator.AND, x29, x36, x39, x46, x48, x145, x152, x154, x161, x163, x349, x356, x358, x365, x367, x374, x376, x383, x385, x407, x413, x416, x422, x425, x540, x547, x549, x570, x576, x579, x585, x588, x608, x611, x615, x616, x631, x909, x926, x1014, x1037, x1038, x1039, x1040, x1041, x1070, x1145, x1146, x1147, x1148, x1149, x1150, x1151, x1152, x1153, x1154, x1155, x1156, x1157, x1158, x1159, x1160, x1161, x1162, x1163, x1164, x1165, x1166, x1167, x1168, x1169, x1170, x1171, x1172); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x28,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstra2ProcessDeadlockRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstra2ProcessDeadlockRun.java new file mode 100644 index 0000000..edd758d --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstra2ProcessDeadlockRun.java @@ -0,0 +1,335 @@ +package kodkod.examples.models.algorithm.mutex; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "dijkstra-2-process", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 33, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 13, + OrderedRelations = 2, + Constraints = 34 +) + +public final class dijkstra2ProcessDeadlockRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Process"); + Relation x7 = Relation.unary("this/Mutex"); + Relation x8 = Relation.unary("this/State"); + Relation x9 = Relation.unary("so/Ord"); + Relation x10 = Relation.unary("mo/Ord"); + Relation x11 = Relation.nary("this/State.holds", 3); + Relation x12 = Relation.nary("this/State.waits", 3); + Relation x13 = Relation.unary("so/Ord.First"); + Relation x14 = Relation.nary("so/Ord.Next", 2); + Relation x15 = Relation.unary("mo/Ord.First"); + Relation x16 = Relation.nary("mo/Ord.Next", 2); + Relation x17 = Relation.unary(""); + Relation x18 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Mutex$0", + "Mutex$1", "Mutex$2", "Process$0", "Process$1", "Process$2", "State$0", + "State$1", "State$2", "mo/Ord$0", "so/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Process$0")); + x6_upper.add(factory.tuple("Process$1")); + x6_upper.add(factory.tuple("Process$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Mutex$0")); + x7_upper.add(factory.tuple("Mutex$1")); + x7_upper.add(factory.tuple("Mutex$2")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("mo/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(3); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("State$0")); + x13_upper.add(factory.tuple("State$1")); + x13_upper.add(factory.tuple("State$2")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("Mutex$0")); + x15_upper.add(factory.tuple("Mutex$1")); + x15_upper.add(factory.tuple("Mutex$2")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Mutex$0").product(factory.tuple("Mutex$0"))); + x16_upper.add(factory.tuple("Mutex$0").product(factory.tuple("Mutex$1"))); + x16_upper.add(factory.tuple("Mutex$0").product(factory.tuple("Mutex$2"))); + x16_upper.add(factory.tuple("Mutex$1").product(factory.tuple("Mutex$0"))); + x16_upper.add(factory.tuple("Mutex$1").product(factory.tuple("Mutex$1"))); + x16_upper.add(factory.tuple("Mutex$1").product(factory.tuple("Mutex$2"))); + x16_upper.add(factory.tuple("Mutex$2").product(factory.tuple("Mutex$0"))); + x16_upper.add(factory.tuple("Mutex$2").product(factory.tuple("Mutex$1"))); + x16_upper.add(factory.tuple("Mutex$2").product(factory.tuple("Mutex$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("State$0")); + x17_upper.add(factory.tuple("State$1")); + x17_upper.add(factory.tuple("State$2")); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Mutex$0")); + x18_upper.add(factory.tuple("Mutex$1")); + x18_upper.add(factory.tuple("Mutex$2")); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("Deadlock_this"); + Decls x21=x22.oneOf(x8); + Expression x24=x22.join(x11); + Expression x25=x6.product(x7); + Formula x23=x24.in(x25); + Formula x20=x23.forAll(x21); + Expression x28=x11.join(Expression.UNIV); + Expression x27=x28.join(Expression.UNIV); + Formula x26=x27.in(x8); + Variable x32=Variable.unary("Deadlock_this"); + Decls x31=x32.oneOf(x8); + Expression x34=x32.join(x12); + Expression x35=x6.product(x7); + Formula x33=x34.in(x35); + Formula x30=x33.forAll(x31); + Expression x38=x12.join(Expression.UNIV); + Expression x37=x38.join(Expression.UNIV); + Formula x36=x37.in(x8); + Expression x41=x9.product(x13); + Expression x40=x9.join(x41); + Formula x39=x40.in(x8); + Expression x44=x9.product(x14); + Expression x43=x9.join(x44); + Expression x45=x8.product(x8); + Formula x42=x43.in(x45); + Formula x46=x14.totalOrder(x8,x13,x17); + Expression x49=x10.product(x15); + Expression x48=x10.join(x49); + Formula x47=x48.in(x7); + Expression x52=x10.product(x16); + Expression x51=x10.join(x52); + Expression x53=x7.product(x7); + Formula x50=x51.in(x53); + Formula x54=x16.totalOrder(x7,x15,x18); + Formula x55=x6.some(); + Variable x58=Variable.unary("Deadlock_s"); + Decls x57=x58.oneOf(x8); + Variable x61=Variable.unary("Deadlock_p"); + Decls x60=x61.oneOf(x6); + Expression x64=x58.join(x12); + Expression x63=x61.join(x64); + Formula x62=x63.some(); + Formula x59=x62.forAll(x60); + Formula x56=x59.forSome(x57); + Formula x65=x0.eq(x0); + Formula x66=x1.eq(x1); + Formula x67=x2.eq(x2); + Formula x68=x3.eq(x3); + Formula x69=x4.eq(x4); + Formula x70=x5.eq(x5); + Formula x71=x6.eq(x6); + Formula x72=x7.eq(x7); + Formula x73=x8.eq(x8); + Formula x74=x9.eq(x9); + Formula x75=x10.eq(x10); + Formula x76=x11.eq(x11); + Formula x77=x12.eq(x12); + Formula x78=x13.eq(x13); + Formula x79=x14.eq(x14); + Formula x80=x15.eq(x15); + Formula x81=x16.eq(x16); + Formula x82=x17.eq(x17); + Formula x83=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x26, x30, x36, x39, x42, x46, x47, x50, x54, x55, x56, x65, x66, x67, x68, x69, x70, x71, x72, x73, x74, x75, x76, x77, x78, x79, x80, x81, x82, x83); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstra2ProcessDijkstraPreventsDeadlocksCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstra2ProcessDijkstraPreventsDeadlocksCheck.java new file mode 100644 index 0000000..c35220a --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstra2ProcessDijkstraPreventsDeadlocksCheck.java @@ -0,0 +1,695 @@ +package kodkod.examples.models.algorithm.mutex; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "dijkstra-2-process", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 33, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 13, + OrderedRelations = 2, + Constraints = 34 +) + + +public final class dijkstra2ProcessDijkstraPreventsDeadlocksCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Process"); + Relation x7 = Relation.unary("this/Mutex"); + Relation x8 = Relation.unary("this/State"); + Relation x9 = Relation.unary("so/Ord"); + Relation x10 = Relation.unary("mo/Ord"); + Relation x11 = Relation.nary("this/State.holds", 3); + Relation x12 = Relation.nary("this/State.waits", 3); + Relation x13 = Relation.unary("so/Ord.First"); + Relation x14 = Relation.nary("so/Ord.Next", 2); + Relation x15 = Relation.unary("mo/Ord.First"); + Relation x16 = Relation.nary("mo/Ord.Next", 2); + Relation x17 = Relation.unary(""); + Relation x18 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Mutex$0", + "Mutex$1", "Mutex$2", "Mutex$3", "Process$0", "Process$1", "Process$2", + "Process$3", "Process$4", "State$0", "State$1", "State$2", "State$3", + "State$4", "mo/Ord$0", "so/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Process$0")); + x6_upper.add(factory.tuple("Process$1")); + x6_upper.add(factory.tuple("Process$2")); + x6_upper.add(factory.tuple("Process$3")); + x6_upper.add(factory.tuple("Process$4")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Mutex$0")); + x7_upper.add(factory.tuple("Mutex$1")); + x7_upper.add(factory.tuple("Mutex$2")); + x7_upper.add(factory.tuple("Mutex$3")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + x8_upper.add(factory.tuple("State$3")); + x8_upper.add(factory.tuple("State$4")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("mo/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(3); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$3"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$2"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$3"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Mutex$3"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$2"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$4")).product(factory.tuple("Mutex$3"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("State$0")); + x13_upper.add(factory.tuple("State$1")); + x13_upper.add(factory.tuple("State$2")); + x13_upper.add(factory.tuple("State$3")); + x13_upper.add(factory.tuple("State$4")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("Mutex$0")); + x15_upper.add(factory.tuple("Mutex$1")); + x15_upper.add(factory.tuple("Mutex$2")); + x15_upper.add(factory.tuple("Mutex$3")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Mutex$0").product(factory.tuple("Mutex$0"))); + x16_upper.add(factory.tuple("Mutex$0").product(factory.tuple("Mutex$1"))); + x16_upper.add(factory.tuple("Mutex$0").product(factory.tuple("Mutex$2"))); + x16_upper.add(factory.tuple("Mutex$0").product(factory.tuple("Mutex$3"))); + x16_upper.add(factory.tuple("Mutex$1").product(factory.tuple("Mutex$0"))); + x16_upper.add(factory.tuple("Mutex$1").product(factory.tuple("Mutex$1"))); + x16_upper.add(factory.tuple("Mutex$1").product(factory.tuple("Mutex$2"))); + x16_upper.add(factory.tuple("Mutex$1").product(factory.tuple("Mutex$3"))); + x16_upper.add(factory.tuple("Mutex$2").product(factory.tuple("Mutex$0"))); + x16_upper.add(factory.tuple("Mutex$2").product(factory.tuple("Mutex$1"))); + x16_upper.add(factory.tuple("Mutex$2").product(factory.tuple("Mutex$2"))); + x16_upper.add(factory.tuple("Mutex$2").product(factory.tuple("Mutex$3"))); + x16_upper.add(factory.tuple("Mutex$3").product(factory.tuple("Mutex$0"))); + x16_upper.add(factory.tuple("Mutex$3").product(factory.tuple("Mutex$1"))); + x16_upper.add(factory.tuple("Mutex$3").product(factory.tuple("Mutex$2"))); + x16_upper.add(factory.tuple("Mutex$3").product(factory.tuple("Mutex$3"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("State$0")); + x17_upper.add(factory.tuple("State$1")); + x17_upper.add(factory.tuple("State$2")); + x17_upper.add(factory.tuple("State$3")); + x17_upper.add(factory.tuple("State$4")); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Mutex$0")); + x18_upper.add(factory.tuple("Mutex$1")); + x18_upper.add(factory.tuple("Mutex$2")); + x18_upper.add(factory.tuple("Mutex$3")); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("DijkstraPreventsDeadlocks_this"); + Decls x21=x22.oneOf(x8); + Expression x24=x22.join(x11); + Expression x25=x6.product(x7); + Formula x23=x24.in(x25); + Formula x20=x23.forAll(x21); + Expression x28=x11.join(Expression.UNIV); + Expression x27=x28.join(Expression.UNIV); + Formula x26=x27.in(x8); + Variable x32=Variable.unary("DijkstraPreventsDeadlocks_this"); + Decls x31=x32.oneOf(x8); + Expression x34=x32.join(x12); + Expression x35=x6.product(x7); + Formula x33=x34.in(x35); + Formula x30=x33.forAll(x31); + Expression x38=x12.join(Expression.UNIV); + Expression x37=x38.join(Expression.UNIV); + Formula x36=x37.in(x8); + Expression x41=x9.product(x13); + Expression x40=x9.join(x41); + Formula x39=x40.in(x8); + Expression x44=x9.product(x14); + Expression x43=x9.join(x44); + Expression x45=x8.product(x8); + Formula x42=x43.in(x45); + Formula x46=x14.totalOrder(x8,x13,x17); + Expression x49=x10.product(x15); + Expression x48=x10.join(x49); + Formula x47=x48.in(x7); + Expression x52=x10.product(x16); + Expression x51=x10.join(x52); + Expression x53=x7.product(x7); + Formula x50=x51.in(x53); + Formula x54=x16.totalOrder(x7,x15,x18); + Expression x61=x13.join(x11); + Expression x62=x13.join(x12); + Expression x60=x61.union(x62); + Formula x59=x60.no(); + Variable x65=Variable.unary("GrabOrRelease_pre"); + Expression x68=x14.join(x8); + Expression x67=x8.difference(x68); + Expression x66=x8.difference(x67); + Decls x64=x65.oneOf(x66); + Expression x74=x65.join(x14); + Expression x73=x74.join(x11); + Expression x75=x65.join(x11); + Formula x72=x73.eq(x75); + Expression x77=x74.join(x12); + Expression x78=x65.join(x12); + Formula x76=x77.eq(x78); + Formula x71=x72.and(x76); + Variable x82=Variable.unary("GrabOrRelease_p"); + Decls x81=x82.oneOf(x6); + Variable x84=Variable.unary("GrabOrRelease_m"); + Decls x83=x84.oneOf(x7); + Decls x80=x81.and(x83); + Expression x90=x65.join(x12); + Expression x89=x82.join(x90); + Formula x88=x89.some(); + Formula x87=x88.not(); + Expression x96=x65.join(x11); + Expression x95=x82.join(x96); + Formula x94=x84.in(x95); + Formula x93=x94.not(); + Expression x102=x65.join(x11); + Expression x101=x102.transpose(); + Expression x100=x84.join(x101); + Formula x99=x100.no(); + Expression x106=x74.join(x11); + Expression x105=x82.join(x106); + Expression x109=x65.join(x11); + Expression x108=x82.join(x109); + Expression x107=x108.union(x84); + Formula x104=x105.eq(x107); + Expression x112=x74.join(x12); + Expression x111=x82.join(x112); + Formula x110=x111.no(); + Formula x103=x104.and(x110); + Formula x98=x99.implies(x103); + Formula x114=x99.not(); + Expression x118=x74.join(x11); + Expression x117=x82.join(x118); + Expression x120=x65.join(x11); + Expression x119=x82.join(x120); + Formula x116=x117.eq(x119); + Expression x123=x74.join(x12); + Expression x122=x82.join(x123); + Formula x121=x122.eq(x84); + Formula x115=x116.and(x121); + Formula x113=x114.implies(x115); + Formula x97=x98.and(x113); + Formula x92=x93.and(x97); + Variable x126=Variable.unary("GrabMutex_otherProc"); + Expression x127=x6.difference(x82); + Decls x125=x126.oneOf(x127); + Expression x131=x74.join(x11); + Expression x130=x126.join(x131); + Expression x133=x65.join(x11); + Expression x132=x126.join(x133); + Formula x129=x130.eq(x132); + Expression x136=x74.join(x12); + Expression x135=x126.join(x136); + Expression x138=x65.join(x12); + Expression x137=x126.join(x138); + Formula x134=x135.eq(x137); + Formula x128=x129.and(x134); + Formula x124=x128.forAll(x125); + Formula x91=x92.and(x124); + Formula x86=x87.and(x91); + Variable x141=Variable.unary("GrabMutex_m'"); + Expression x143=x65.join(x11); + Expression x142=x82.join(x143); + Decls x140=x141.oneOf(x142); + Expression x147=x16.transpose(); + Expression x146=x147.closure(); + Expression x145=x84.join(x146); + Formula x144=x141.in(x145); + Formula x139=x144.forAll(x140); + Formula x85=x86.and(x139); + Formula x79=x85.forSome(x80); + Formula x70=x71.or(x79); + Variable x151=Variable.unary("GrabOrRelease_p"); + Decls x150=x151.oneOf(x6); + Variable x153=Variable.unary("GrabOrRelease_m"); + Decls x152=x153.oneOf(x7); + Decls x149=x150.and(x152); + Expression x159=x65.join(x12); + Expression x158=x151.join(x159); + Formula x157=x158.some(); + Formula x156=x157.not(); + Expression x164=x65.join(x11); + Expression x163=x151.join(x164); + Formula x162=x153.in(x163); + Expression x167=x74.join(x12); + Expression x166=x151.join(x167); + Formula x165=x166.no(); + Formula x161=x162.and(x165); + Expression x173=x65.join(x12); + Expression x172=x173.transpose(); + Expression x171=x153.join(x172); + Formula x170=x171.no(); + Expression x178=x74.join(x11); + Expression x177=x178.transpose(); + Expression x176=x153.join(x177); + Formula x175=x176.no(); + Expression x182=x74.join(x12); + Expression x181=x182.transpose(); + Expression x180=x153.join(x181); + Formula x179=x180.no(); + Formula x174=x175.and(x179); + Formula x169=x170.implies(x174); + Formula x184=x170.not(); + Variable x187=Variable.unary("ReleaseMutex_lucky"); + Expression x190=x65.join(x12); + Expression x189=x190.transpose(); + Expression x188=x153.join(x189); + Decls x186=x187.oneOf(x188); + Expression x195=x74.join(x12); + Expression x194=x195.transpose(); + Expression x193=x153.join(x194); + Expression x199=x65.join(x12); + Expression x198=x199.transpose(); + Expression x197=x153.join(x198); + Expression x196=x197.difference(x187); + Formula x192=x193.eq(x196); + Expression x203=x74.join(x11); + Expression x202=x203.transpose(); + Expression x201=x153.join(x202); + Formula x200=x201.eq(x187); + Formula x191=x192.and(x200); + Formula x185=x191.forSome(x186); + Formula x183=x184.implies(x185); + Formula x168=x169.and(x183); + Formula x160=x161.and(x168); + Formula x155=x156.and(x160); + Expression x207=x74.join(x11); + Expression x206=x151.join(x207); + Expression x210=x65.join(x11); + Expression x209=x151.join(x210); + Expression x208=x209.difference(x153); + Formula x205=x206.eq(x208); + Variable x213=Variable.unary("ReleaseMutex_mu"); + Expression x214=x7.difference(x153); + Decls x212=x213.oneOf(x214); + Expression x219=x74.join(x12); + Expression x218=x219.transpose(); + Expression x217=x213.join(x218); + Expression x222=x65.join(x12); + Expression x221=x222.transpose(); + Expression x220=x213.join(x221); + Formula x216=x217.eq(x220); + Expression x226=x74.join(x11); + Expression x225=x226.transpose(); + Expression x224=x213.join(x225); + Expression x229=x65.join(x11); + Expression x228=x229.transpose(); + Expression x227=x213.join(x228); + Formula x223=x224.eq(x227); + Formula x215=x216.and(x223); + Formula x211=x215.forAll(x212); + Formula x204=x205.and(x211); + Formula x154=x155.and(x204); + Formula x148=x154.forSome(x149); + Formula x69=x70.or(x148); + Formula x63=x69.forAll(x64); + Formula x58=x59.and(x63); + Formula x57=x58.not(); + Formula x232=x6.some(); + Variable x235=Variable.unary("Deadlock_s"); + Decls x234=x235.oneOf(x8); + Variable x238=Variable.unary("Deadlock_p"); + Decls x237=x238.oneOf(x6); + Expression x241=x235.join(x12); + Expression x240=x238.join(x241); + Formula x239=x240.some(); + Formula x236=x239.forAll(x237); + Formula x233=x236.forSome(x234); + Formula x231=x232.and(x233); + Formula x230=x231.not(); + Formula x56=x57.or(x230); + Formula x55=x56.not(); + Formula x242=x0.eq(x0); + Formula x243=x1.eq(x1); + Formula x244=x2.eq(x2); + Formula x245=x3.eq(x3); + Formula x246=x4.eq(x4); + Formula x247=x5.eq(x5); + Formula x248=x6.eq(x6); + Formula x249=x7.eq(x7); + Formula x250=x8.eq(x8); + Formula x251=x9.eq(x9); + Formula x252=x10.eq(x10); + Formula x253=x11.eq(x11); + Formula x254=x12.eq(x12); + Formula x255=x13.eq(x13); + Formula x256=x14.eq(x14); + Formula x257=x15.eq(x15); + Formula x258=x16.eq(x16); + Formula x259=x17.eq(x17); + Formula x260=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x26, x30, x36, x39, x42, x46, x47, x50, x54, x55, x242, x243, x244, x245, x246, x247, x248, x249, x250, x251, x252, x253, x254, x255, x256, x257, x258, x259, x260); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstra2ProcessShowDijkstraRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstra2ProcessShowDijkstraRun.java new file mode 100644 index 0000000..02e4761 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstra2ProcessShowDijkstraRun.java @@ -0,0 +1,510 @@ +package kodkod.examples.models.algorithm.mutex; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "dijkstra-2-process", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 33, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 13, + OrderedRelations = 2, + Constraints = 34 +) + + +public final class dijkstra2ProcessShowDijkstraRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Process"); + Relation x7 = Relation.unary("this/Mutex"); + Relation x8 = Relation.unary("this/State"); + Relation x9 = Relation.unary("so/Ord"); + Relation x10 = Relation.unary("mo/Ord"); + Relation x11 = Relation.nary("this/State.holds", 3); + Relation x12 = Relation.nary("this/State.waits", 3); + Relation x13 = Relation.unary("so/Ord.First"); + Relation x14 = Relation.nary("so/Ord.Next", 2); + Relation x15 = Relation.unary("mo/Ord.First"); + Relation x16 = Relation.nary("mo/Ord.Next", 2); + Relation x17 = Relation.unary(""); + Relation x18 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Mutex$0", + "Mutex$1", "Process$0", "Process$1", "State$0", "State$1", "State$2", + "State$3", "State$4", "mo/Ord$0", "so/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Process$0")); + x6_upper.add(factory.tuple("Process$1")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Mutex$0")); + x7_upper.add(factory.tuple("Mutex$1")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + x8_upper.add(factory.tuple("State$3")); + x8_upper.add(factory.tuple("State$4")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("mo/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(3); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x11_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Mutex$1"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$0"))); + x12_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Mutex$1"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("State$0")); + x13_upper.add(factory.tuple("State$1")); + x13_upper.add(factory.tuple("State$2")); + x13_upper.add(factory.tuple("State$3")); + x13_upper.add(factory.tuple("State$4")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("Mutex$0")); + x15_upper.add(factory.tuple("Mutex$1")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Mutex$0").product(factory.tuple("Mutex$0"))); + x16_upper.add(factory.tuple("Mutex$0").product(factory.tuple("Mutex$1"))); + x16_upper.add(factory.tuple("Mutex$1").product(factory.tuple("Mutex$0"))); + x16_upper.add(factory.tuple("Mutex$1").product(factory.tuple("Mutex$1"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("State$0")); + x17_upper.add(factory.tuple("State$1")); + x17_upper.add(factory.tuple("State$2")); + x17_upper.add(factory.tuple("State$3")); + x17_upper.add(factory.tuple("State$4")); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Mutex$0")); + x18_upper.add(factory.tuple("Mutex$1")); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("ShowDijkstra_this"); + Decls x21=x22.oneOf(x8); + Expression x24=x22.join(x11); + Expression x25=x6.product(x7); + Formula x23=x24.in(x25); + Formula x20=x23.forAll(x21); + Expression x28=x11.join(Expression.UNIV); + Expression x27=x28.join(Expression.UNIV); + Formula x26=x27.in(x8); + Variable x32=Variable.unary("ShowDijkstra_this"); + Decls x31=x32.oneOf(x8); + Expression x34=x32.join(x12); + Expression x35=x6.product(x7); + Formula x33=x34.in(x35); + Formula x30=x33.forAll(x31); + Expression x38=x12.join(Expression.UNIV); + Expression x37=x38.join(Expression.UNIV); + Formula x36=x37.in(x8); + Expression x41=x9.product(x13); + Expression x40=x9.join(x41); + Formula x39=x40.in(x8); + Expression x44=x9.product(x14); + Expression x43=x9.join(x44); + Expression x45=x8.product(x8); + Formula x42=x43.in(x45); + Formula x46=x14.totalOrder(x8,x13,x17); + Expression x49=x10.product(x15); + Expression x48=x10.join(x49); + Formula x47=x48.in(x7); + Expression x52=x10.product(x16); + Expression x51=x10.join(x52); + Expression x53=x7.product(x7); + Formula x50=x51.in(x53); + Formula x54=x16.totalOrder(x7,x15,x18); + Expression x58=x13.join(x11); + Expression x59=x13.join(x12); + Expression x57=x58.union(x59); + Formula x56=x57.no(); + Variable x62=Variable.unary("GrabOrRelease_pre"); + Expression x65=x14.join(x8); + Expression x64=x8.difference(x65); + Expression x63=x8.difference(x64); + Decls x61=x62.oneOf(x63); + Expression x71=x62.join(x14); + Expression x70=x71.join(x11); + Expression x72=x62.join(x11); + Formula x69=x70.eq(x72); + Expression x74=x71.join(x12); + Expression x75=x62.join(x12); + Formula x73=x74.eq(x75); + Formula x68=x69.and(x73); + Variable x79=Variable.unary("GrabOrRelease_p"); + Decls x78=x79.oneOf(x6); + Variable x81=Variable.unary("GrabOrRelease_m"); + Decls x80=x81.oneOf(x7); + Decls x77=x78.and(x80); + Expression x87=x62.join(x12); + Expression x86=x79.join(x87); + Formula x85=x86.some(); + Formula x84=x85.not(); + Expression x93=x62.join(x11); + Expression x92=x79.join(x93); + Formula x91=x81.in(x92); + Formula x90=x91.not(); + Expression x99=x62.join(x11); + Expression x98=x99.transpose(); + Expression x97=x81.join(x98); + Formula x96=x97.no(); + Expression x103=x71.join(x11); + Expression x102=x79.join(x103); + Expression x106=x62.join(x11); + Expression x105=x79.join(x106); + Expression x104=x105.union(x81); + Formula x101=x102.eq(x104); + Expression x109=x71.join(x12); + Expression x108=x79.join(x109); + Formula x107=x108.no(); + Formula x100=x101.and(x107); + Formula x95=x96.implies(x100); + Formula x111=x96.not(); + Expression x115=x71.join(x11); + Expression x114=x79.join(x115); + Expression x117=x62.join(x11); + Expression x116=x79.join(x117); + Formula x113=x114.eq(x116); + Expression x120=x71.join(x12); + Expression x119=x79.join(x120); + Formula x118=x119.eq(x81); + Formula x112=x113.and(x118); + Formula x110=x111.implies(x112); + Formula x94=x95.and(x110); + Formula x89=x90.and(x94); + Variable x123=Variable.unary("GrabMutex_otherProc"); + Expression x124=x6.difference(x79); + Decls x122=x123.oneOf(x124); + Expression x128=x71.join(x11); + Expression x127=x123.join(x128); + Expression x130=x62.join(x11); + Expression x129=x123.join(x130); + Formula x126=x127.eq(x129); + Expression x133=x71.join(x12); + Expression x132=x123.join(x133); + Expression x135=x62.join(x12); + Expression x134=x123.join(x135); + Formula x131=x132.eq(x134); + Formula x125=x126.and(x131); + Formula x121=x125.forAll(x122); + Formula x88=x89.and(x121); + Formula x83=x84.and(x88); + Variable x138=Variable.unary("GrabMutex_m'"); + Expression x140=x62.join(x11); + Expression x139=x79.join(x140); + Decls x137=x138.oneOf(x139); + Expression x144=x16.transpose(); + Expression x143=x144.closure(); + Expression x142=x81.join(x143); + Formula x141=x138.in(x142); + Formula x136=x141.forAll(x137); + Formula x82=x83.and(x136); + Formula x76=x82.forSome(x77); + Formula x67=x68.or(x76); + Variable x148=Variable.unary("GrabOrRelease_p"); + Decls x147=x148.oneOf(x6); + Variable x150=Variable.unary("GrabOrRelease_m"); + Decls x149=x150.oneOf(x7); + Decls x146=x147.and(x149); + Expression x156=x62.join(x12); + Expression x155=x148.join(x156); + Formula x154=x155.some(); + Formula x153=x154.not(); + Expression x161=x62.join(x11); + Expression x160=x148.join(x161); + Formula x159=x150.in(x160); + Expression x164=x71.join(x12); + Expression x163=x148.join(x164); + Formula x162=x163.no(); + Formula x158=x159.and(x162); + Expression x170=x62.join(x12); + Expression x169=x170.transpose(); + Expression x168=x150.join(x169); + Formula x167=x168.no(); + Expression x175=x71.join(x11); + Expression x174=x175.transpose(); + Expression x173=x150.join(x174); + Formula x172=x173.no(); + Expression x179=x71.join(x12); + Expression x178=x179.transpose(); + Expression x177=x150.join(x178); + Formula x176=x177.no(); + Formula x171=x172.and(x176); + Formula x166=x167.implies(x171); + Formula x181=x167.not(); + Variable x184=Variable.unary("ReleaseMutex_lucky"); + Expression x187=x62.join(x12); + Expression x186=x187.transpose(); + Expression x185=x150.join(x186); + Decls x183=x184.oneOf(x185); + Expression x192=x71.join(x12); + Expression x191=x192.transpose(); + Expression x190=x150.join(x191); + Expression x196=x62.join(x12); + Expression x195=x196.transpose(); + Expression x194=x150.join(x195); + Expression x193=x194.difference(x184); + Formula x189=x190.eq(x193); + Expression x200=x71.join(x11); + Expression x199=x200.transpose(); + Expression x198=x150.join(x199); + Formula x197=x198.eq(x184); + Formula x188=x189.and(x197); + Formula x182=x188.forSome(x183); + Formula x180=x181.implies(x182); + Formula x165=x166.and(x180); + Formula x157=x158.and(x165); + Formula x152=x153.and(x157); + Expression x204=x71.join(x11); + Expression x203=x148.join(x204); + Expression x207=x62.join(x11); + Expression x206=x148.join(x207); + Expression x205=x206.difference(x150); + Formula x202=x203.eq(x205); + Variable x210=Variable.unary("ReleaseMutex_mu"); + Expression x211=x7.difference(x150); + Decls x209=x210.oneOf(x211); + Expression x216=x71.join(x12); + Expression x215=x216.transpose(); + Expression x214=x210.join(x215); + Expression x219=x62.join(x12); + Expression x218=x219.transpose(); + Expression x217=x210.join(x218); + Formula x213=x214.eq(x217); + Expression x223=x71.join(x11); + Expression x222=x223.transpose(); + Expression x221=x210.join(x222); + Expression x226=x62.join(x11); + Expression x225=x226.transpose(); + Expression x224=x210.join(x225); + Formula x220=x221.eq(x224); + Formula x212=x213.and(x220); + Formula x208=x212.forAll(x209); + Formula x201=x202.and(x208); + Formula x151=x152.and(x201); + Formula x145=x151.forSome(x146); + Formula x66=x67.or(x145); + Formula x60=x66.forAll(x61); + Formula x55=x56.and(x60); + Formula x228=x6.some(); + Variable x231=Variable.unary("Deadlock_s"); + Decls x230=x231.oneOf(x8); + Variable x234=Variable.unary("Deadlock_p"); + Decls x233=x234.oneOf(x6); + Expression x237=x231.join(x12); + Expression x236=x234.join(x237); + Formula x235=x236.some(); + Formula x232=x235.forAll(x233); + Formula x229=x232.forSome(x230); + Formula x227=x228.and(x229); + Formula x238=x12.some(); + Formula x239=x0.eq(x0); + Formula x240=x1.eq(x1); + Formula x241=x2.eq(x2); + Formula x242=x3.eq(x3); + Formula x243=x4.eq(x4); + Formula x244=x5.eq(x5); + Formula x245=x6.eq(x6); + Formula x246=x7.eq(x7); + Formula x247=x8.eq(x8); + Formula x248=x9.eq(x9); + Formula x249=x10.eq(x10); + Formula x250=x11.eq(x11); + Formula x251=x12.eq(x12); + Formula x252=x13.eq(x13); + Formula x253=x14.eq(x14); + Formula x254=x15.eq(x15); + Formula x255=x16.eq(x16); + Formula x256=x17.eq(x17); + Formula x257=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x26, x30, x36, x39, x42, x46, x47, x50, x54, x55, x227, x238, x239, x240, x241, x242, x243, x244, x245, x246, x247, x248, x249, x250, x251, x252, x253, x254, x255, x256, x257); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstraKStateClosureCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstraKStateClosureCheck.java new file mode 100644 index 0000000..5147c8a --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstraKStateClosureCheck.java @@ -0,0 +1,773 @@ +package kodkod.examples.models.algorithm.mutex; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "dijkstra-k-state", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 6, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes = 1, + NestedRelationalJoins = 9, + TransitiveClosure = 2, + NestedQuantifiers = 1, + SetCardinality = 2, + Additions = 0, + Subtractions = 0, + Comparison = 22, + OrderedRelations = 1, + Constraints = 36 +) + + +public final class dijkstraKStateClosureCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/FirstProc"); + Relation x7 = Relation.unary("this/Process remainder"); + Relation x8 = Relation.unary("this/Val"); + Relation x9 = Relation.unary("this/Tick"); + Relation x10 = Relation.unary("to/Ord"); + Relation x11 = Relation.nary("this/Process.rightNeighbor", 2); + Relation x12 = Relation.nary("this/Val.nextVal", 2); + Relation x13 = Relation.nary("this/Tick.val", 3); + Relation x14 = Relation.nary("this/Tick.runs", 2); + Relation x15 = Relation.nary("this/Tick.priv", 2); + Relation x16 = Relation.unary("to/Ord.First"); + Relation x17 = Relation.nary("to/Ord.Next", 2); + Relation x18 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "FirstProc$0", + "Process$0", "Process$1", "Process$2", "Process$3", "Tick$0", "Tick$1", + "Tick$2", "Tick$3", "Tick$4", "Val$0", "Val$1", "Val$2", + "Val$3", "Val$4", "Val$5", "to/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("FirstProc$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Process$0")); + x7_upper.add(factory.tuple("Process$1")); + x7_upper.add(factory.tuple("Process$2")); + x7_upper.add(factory.tuple("Process$3")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Val$0")); + x8_upper.add(factory.tuple("Val$1")); + x8_upper.add(factory.tuple("Val$2")); + x8_upper.add(factory.tuple("Val$3")); + x8_upper.add(factory.tuple("Val$4")); + x8_upper.add(factory.tuple("Val$5")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Tick$0")); + x9_upper.add(factory.tuple("Tick$1")); + x9_upper.add(factory.tuple("Tick$2")); + x9_upper.add(factory.tuple("Tick$3")); + x9_upper.add(factory.tuple("Tick$4")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("to/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("FirstProc$0").product(factory.tuple("FirstProc$0"))); + x11_upper.add(factory.tuple("FirstProc$0").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("FirstProc$0").product(factory.tuple("Process$1"))); + x11_upper.add(factory.tuple("FirstProc$0").product(factory.tuple("Process$2"))); + x11_upper.add(factory.tuple("FirstProc$0").product(factory.tuple("Process$3"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("FirstProc$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$3"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("FirstProc$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$3"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("FirstProc$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$3"))); + x11_upper.add(factory.tuple("Process$3").product(factory.tuple("FirstProc$0"))); + x11_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$1"))); + x11_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$2"))); + x11_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$3"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x12_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x12_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x12_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$3"))); + x12_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$4"))); + x12_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$5"))); + x12_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x12_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x12_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x12_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$3"))); + x12_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$4"))); + x12_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$5"))); + x12_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x12_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x12_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + x12_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$3"))); + x12_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$4"))); + x12_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$5"))); + x12_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$0"))); + x12_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$1"))); + x12_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$2"))); + x12_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$3"))); + x12_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$4"))); + x12_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$5"))); + x12_upper.add(factory.tuple("Val$4").product(factory.tuple("Val$0"))); + x12_upper.add(factory.tuple("Val$4").product(factory.tuple("Val$1"))); + x12_upper.add(factory.tuple("Val$4").product(factory.tuple("Val$2"))); + x12_upper.add(factory.tuple("Val$4").product(factory.tuple("Val$3"))); + x12_upper.add(factory.tuple("Val$4").product(factory.tuple("Val$4"))); + x12_upper.add(factory.tuple("Val$4").product(factory.tuple("Val$5"))); + x12_upper.add(factory.tuple("Val$5").product(factory.tuple("Val$0"))); + x12_upper.add(factory.tuple("Val$5").product(factory.tuple("Val$1"))); + x12_upper.add(factory.tuple("Val$5").product(factory.tuple("Val$2"))); + x12_upper.add(factory.tuple("Val$5").product(factory.tuple("Val$3"))); + x12_upper.add(factory.tuple("Val$5").product(factory.tuple("Val$4"))); + x12_upper.add(factory.tuple("Val$5").product(factory.tuple("Val$5"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(3); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$3")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$3")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$3")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$3")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$3")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$3")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$3")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$3")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$3")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$3")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$3")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$3")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$2")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$3")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$3")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$3")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$3")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$3")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$3")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$2")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$3")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$3")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$3")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$3")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$3")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$3")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$2")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$2")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$2")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$2")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$2")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$2")).product(factory.tuple("Val$5"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$3")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$3")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$3")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$3")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$3")).product(factory.tuple("Val$4"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$3")).product(factory.tuple("Val$5"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1"))); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2"))); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$3"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$3"))); + x14_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1"))); + x14_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$2"))); + x14_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$3"))); + x14_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1"))); + x14_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$2"))); + x14_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$3"))); + x14_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1"))); + x14_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$2"))); + x14_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$3"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$3"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("Tick$0")); + x16_upper.add(factory.tuple("Tick$1")); + x16_upper.add(factory.tuple("Tick$2")); + x16_upper.add(factory.tuple("Tick$3")); + x16_upper.add(factory.tuple("Tick$4")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$4"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Tick$0")); + x18_upper.add(factory.tuple("Tick$1")); + x18_upper.add(factory.tuple("Tick$2")); + x18_upper.add(factory.tuple("Tick$3")); + x18_upper.add(factory.tuple("Tick$4")); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("Closure_this"); + Expression x23=x6.union(x7); + Decls x21=x22.oneOf(x23); + Expression x26=x22.join(x11); + Formula x25=x26.one(); + Formula x27=x26.in(x23); + Formula x24=x25.and(x27); + Formula x20=x24.forAll(x21); + Expression x29=x11.join(Expression.UNIV); + Formula x28=x29.in(x23); + Variable x33=Variable.unary("Closure_this"); + Decls x32=x33.oneOf(x8); + Expression x36=x33.join(x12); + Formula x35=x36.one(); + Formula x37=x36.in(x8); + Formula x34=x35.and(x37); + Formula x31=x34.forAll(x32); + Expression x39=x12.join(Expression.UNIV); + Formula x38=x39.in(x8); + Variable x42=Variable.unary("Closure_this"); + Decls x41=x42.oneOf(x9); + Expression x46=x42.join(x13); + Expression x47=x23.product(x8); + Formula x45=x46.in(x47); + Variable x50=Variable.unary(""); + Decls x49=x50.oneOf(x23); + Expression x53=x50.join(x46); + Formula x52=x53.one(); + Formula x54=x53.in(x8); + Formula x51=x52.and(x54); + Formula x48=x51.forAll(x49); + Formula x44=x45.and(x48); + Variable x57=Variable.unary(""); + Decls x56=x57.oneOf(x8); + Expression x59=x46.join(x57); + Formula x58=x59.in(x23); + Formula x55=x58.forAll(x56); + Formula x43=x44.and(x55); + Formula x40=x43.forAll(x41); + Expression x62=x13.join(Expression.UNIV); + Expression x61=x62.join(Expression.UNIV); + Formula x60=x61.in(x9); + Variable x65=Variable.unary("Closure_this"); + Decls x64=x65.oneOf(x9); + Expression x67=x65.join(x14); + Formula x66=x67.in(x23); + Formula x63=x66.forAll(x64); + Expression x69=x14.join(Expression.UNIV); + Formula x68=x69.in(x9); + Variable x72=Variable.unary("Closure_this"); + Decls x71=x72.oneOf(x9); + Expression x74=x72.join(x15); + Formula x73=x74.in(x23); + Formula x70=x73.forAll(x71); + Expression x76=x15.join(Expression.UNIV); + Formula x75=x76.in(x9); + Variable x79=Variable.unary("Closure_this"); + Decls x78=x79.oneOf(x9); + Expression x81=x79.join(x15); + Variable x84=Variable.unary("Closure_p"); + Decls x83=x84.oneOf(x23); + Formula x87=x84.eq(x6); + Expression x90=x79.join(x13); + Expression x89=x84.join(x90); + Expression x92=x84.join(x11); + Expression x93=x79.join(x13); + Expression x91=x92.join(x93); + Formula x88=x89.eq(x91); + Formula x86=x87.implies(x88); + Formula x95=x87.not(); + Expression x99=x79.join(x13); + Expression x98=x84.join(x99); + Expression x101=x84.join(x11); + Expression x102=x79.join(x13); + Expression x100=x101.join(x102); + Formula x97=x98.eq(x100); + Formula x96=x97.not(); + Formula x94=x95.implies(x96); + Formula x85=x86.and(x94); + Expression x82=x85.comprehension(x83); + Formula x80=x81.eq(x82); + Formula x77=x80.forAll(x78); + Expression x105=x10.product(x16); + Expression x104=x10.join(x105); + Formula x103=x104.in(x9); + Expression x108=x10.product(x17); + Expression x107=x10.join(x108); + Expression x109=x9.product(x9); + Formula x106=x107.in(x109); + Formula x110=x17.totalOrder(x9,x16,x18); + IntExpression x112=x8.count(); + IntExpression x113=x23.count(); + Formula x111=x112.gt(x113); + Variable x116=Variable.unary("ring_n"); + Decls x115=x116.oneOf(x23); + Expression x119=x116.join(x11); + Formula x118=x119.one(); + Expression x123=x11.closure(); + Expression x131=Expression.INTS.union(x5); + Expression x130=x131.union(x23); + Expression x129=x130.union(x8); + Expression x128=x129.union(x9); + Expression x127=x128.union(x10); + Expression x126=x127.product(Expression.UNIV); + Expression x124=Expression.IDEN.intersection(x126); + Expression x122=x123.union(x124); + Expression x121=x116.join(x122); + Formula x120=x23.in(x121); + Formula x117=x118.and(x120); + Formula x114=x117.forAll(x115); + Variable x135=Variable.unary("ring_n"); + Decls x134=x135.oneOf(x8); + Expression x138=x135.join(x12); + Formula x137=x138.one(); + Expression x142=x12.closure(); + Expression x144=x127.product(Expression.UNIV); + Expression x143=Expression.IDEN.intersection(x144); + Expression x141=x142.union(x143); + Expression x140=x135.join(x141); + Formula x139=x8.in(x140); + Formula x136=x137.and(x139); + Formula x133=x136.forAll(x134); + Variable x147=Variable.unary("Closure_tp"); + Expression x150=x17.join(x9); + Expression x149=x9.difference(x150); + Expression x148=x9.difference(x149); + Decls x146=x147.oneOf(x148); + Variable x153=Variable.unary("Closure_p"); + Decls x152=x153.oneOf(x23); + Expression x158=x147.join(x14); + Formula x157=x153.in(x158); + Formula x156=x157.not(); + Expression x162=x147.join(x17); + Expression x161=x162.join(x13); + Expression x160=x153.join(x161); + Expression x164=x147.join(x13); + Expression x163=x153.join(x164); + Formula x159=x160.eq(x163); + Formula x155=x156.implies(x159); + Formula x166=x156.not(); + Formula x169=x153.eq(x6); + Expression x174=x153.join(x11); + Expression x175=x147.join(x13); + Expression x173=x174.join(x175); + Formula x172=x163.eq(x173); + Expression x176=x163.join(x12); + Expression x171=x172.thenElse(x176,x163); + Formula x170=x160.eq(x171); + Formula x168=x169.implies(x170); + Formula x178=x169.not(); + Formula x182=x163.eq(x173); + Formula x181=x182.not(); + Expression x180=x181.thenElse(x173,x163); + Formula x179=x160.eq(x180); + Formula x177=x178.implies(x179); + Formula x167=x168.and(x177); + Formula x165=x166.implies(x167); + Formula x154=x155.and(x165); + Formula x151=x154.forAll(x152); + Formula x145=x151.forAll(x146); + Variable x190=Variable.unary("BadTick_p1"); + Decls x189=x190.oneOf(x23); + Variable x192=Variable.unary("BadTick_p2"); + Decls x191=x192.oneOf(x23); + Decls x188=x189.and(x191); + Formula x196=x190.eq(x192); + Formula x195=x196.not(); + Formula x199=x190.eq(x6); + Expression x202=x16.join(x13); + Expression x201=x190.join(x202); + Expression x204=x190.join(x11); + Expression x205=x16.join(x13); + Expression x203=x204.join(x205); + Formula x200=x201.eq(x203); + Formula x198=x199.implies(x200); + Formula x207=x199.not(); + Expression x211=x16.join(x13); + Expression x210=x190.join(x211); + Expression x213=x190.join(x11); + Expression x214=x16.join(x13); + Expression x212=x213.join(x214); + Formula x209=x210.eq(x212); + Formula x208=x209.not(); + Formula x206=x207.implies(x208); + Formula x197=x198.and(x206); + Formula x194=x195.and(x197); + Formula x217=x192.eq(x6); + Expression x220=x16.join(x13); + Expression x219=x192.join(x220); + Expression x222=x192.join(x11); + Expression x223=x16.join(x13); + Expression x221=x222.join(x223); + Formula x218=x219.eq(x221); + Formula x216=x217.implies(x218); + Formula x225=x217.not(); + Expression x229=x16.join(x13); + Expression x228=x192.join(x229); + Expression x231=x192.join(x11); + Expression x232=x16.join(x13); + Expression x230=x231.join(x232); + Formula x227=x228.eq(x230); + Formula x226=x227.not(); + Formula x224=x225.implies(x226); + Formula x215=x216.and(x224); + Formula x193=x194.and(x215); + Formula x187=x193.forSome(x188); + Formula x186=x187.not(); + Formula x185=x186.not(); + Variable x235=Variable.unary("Closure_t"); + Decls x234=x235.oneOf(x9); + Variable x240=Variable.unary("BadTick_p1"); + Decls x239=x240.oneOf(x23); + Variable x242=Variable.unary("BadTick_p2"); + Decls x241=x242.oneOf(x23); + Decls x238=x239.and(x241); + Formula x246=x240.eq(x242); + Formula x245=x246.not(); + Formula x249=x240.eq(x6); + Expression x252=x235.join(x13); + Expression x251=x240.join(x252); + Expression x254=x240.join(x11); + Expression x255=x235.join(x13); + Expression x253=x254.join(x255); + Formula x250=x251.eq(x253); + Formula x248=x249.implies(x250); + Formula x257=x249.not(); + Expression x261=x235.join(x13); + Expression x260=x240.join(x261); + Expression x263=x240.join(x11); + Expression x264=x235.join(x13); + Expression x262=x263.join(x264); + Formula x259=x260.eq(x262); + Formula x258=x259.not(); + Formula x256=x257.implies(x258); + Formula x247=x248.and(x256); + Formula x244=x245.and(x247); + Formula x267=x242.eq(x6); + Expression x270=x235.join(x13); + Expression x269=x242.join(x270); + Expression x272=x242.join(x11); + Expression x273=x235.join(x13); + Expression x271=x272.join(x273); + Formula x268=x269.eq(x271); + Formula x266=x267.implies(x268); + Formula x275=x267.not(); + Expression x279=x235.join(x13); + Expression x278=x242.join(x279); + Expression x281=x242.join(x11); + Expression x282=x235.join(x13); + Expression x280=x281.join(x282); + Formula x277=x278.eq(x280); + Formula x276=x277.not(); + Formula x274=x275.implies(x276); + Formula x265=x266.and(x274); + Formula x243=x244.and(x265); + Formula x237=x243.forSome(x238); + Formula x236=x237.not(); + Formula x233=x236.forAll(x234); + Formula x184=x185.or(x233); + Formula x183=x184.not(); + Formula x283=x0.eq(x0); + Formula x284=x1.eq(x1); + Formula x285=x2.eq(x2); + Formula x286=x3.eq(x3); + Formula x287=x4.eq(x4); + Formula x288=x5.eq(x5); + Formula x289=x6.eq(x6); + Formula x290=x7.eq(x7); + Formula x291=x8.eq(x8); + Formula x292=x9.eq(x9); + Formula x293=x10.eq(x10); + Formula x294=x11.eq(x11); + Formula x295=x12.eq(x12); + Formula x296=x13.eq(x13); + Formula x297=x14.eq(x14); + Formula x298=x15.eq(x15); + Formula x299=x16.eq(x16); + Formula x300=x17.eq(x17); + Formula x301=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x28, x31, x38, x40, x60, x63, x68, x70, x75, x77, x103, x106, x110, x111, x114, x133, x145, x183, x283, x284, x285, x286, x287, x288, x289, x290, x291, x292, x293, x294, x295, x296, x297, x298, x299, x300, x301); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstraKStateTraceShorterThanMaxLoopRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstraKStateTraceShorterThanMaxLoopRun.java new file mode 100644 index 0000000..4176abb --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstraKStateTraceShorterThanMaxLoopRun.java @@ -0,0 +1,532 @@ +package kodkod.examples.models.algorithm.mutex; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "dijkstra-k-state", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 6, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes = 1, + NestedRelationalJoins = 9, + TransitiveClosure = 2, + NestedQuantifiers = 1, + SetCardinality = 2, + Additions = 0, + Subtractions = 0, + Comparison = 22, + OrderedRelations = 1, + Constraints = 36 +) + + +public final class dijkstraKStateTraceShorterThanMaxLoopRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/FirstProc"); + Relation x7 = Relation.unary("this/Process remainder"); + Relation x8 = Relation.unary("this/Val"); + Relation x9 = Relation.unary("this/Tick"); + Relation x10 = Relation.unary("to/Ord"); + Relation x11 = Relation.nary("this/Process.rightNeighbor", 2); + Relation x12 = Relation.nary("this/Val.nextVal", 2); + Relation x13 = Relation.nary("this/Tick.val", 3); + Relation x14 = Relation.nary("this/Tick.runs", 2); + Relation x15 = Relation.nary("this/Tick.priv", 2); + Relation x16 = Relation.unary("to/Ord.First"); + Relation x17 = Relation.nary("to/Ord.Next", 2); + Relation x18 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "FirstProc$0", + "Process$0", "Tick$0", "Tick$1", "Tick$2", "Tick$3", "Tick$4", + "Tick$5", "Tick$6", "Val$0", "Val$1", "Val$2", "to/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + x4_upper.add(factory.tuple("5")); + x4_upper.add(factory.tuple("6")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("FirstProc$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Process$0")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Val$0")); + x8_upper.add(factory.tuple("Val$1")); + x8_upper.add(factory.tuple("Val$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Tick$0")); + x9_upper.add(factory.tuple("Tick$1")); + x9_upper.add(factory.tuple("Tick$2")); + x9_upper.add(factory.tuple("Tick$3")); + x9_upper.add(factory.tuple("Tick$4")); + x9_upper.add(factory.tuple("Tick$5")); + x9_upper.add(factory.tuple("Tick$6")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("to/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("FirstProc$0").product(factory.tuple("FirstProc$0"))); + x11_upper.add(factory.tuple("FirstProc$0").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("FirstProc$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x12_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x12_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x12_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x12_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x12_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x12_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x12_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x12_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(3); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$5").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$5").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$5").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$5").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$5").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$5").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$6").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$6").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$6").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$6").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$6").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$6").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$5").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$5").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$6").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$6").product(factory.tuple("Process$0"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$5").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$5").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$6").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$6").product(factory.tuple("Process$0"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("Tick$0")); + x16_upper.add(factory.tuple("Tick$1")); + x16_upper.add(factory.tuple("Tick$2")); + x16_upper.add(factory.tuple("Tick$3")); + x16_upper.add(factory.tuple("Tick$4")); + x16_upper.add(factory.tuple("Tick$5")); + x16_upper.add(factory.tuple("Tick$6")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$5"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$6"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$5"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$6"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$5"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$6"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$5"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$6"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$5"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$6"))); + x17_upper.add(factory.tuple("Tick$5").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$5").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$5").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$5").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$5").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$5").product(factory.tuple("Tick$5"))); + x17_upper.add(factory.tuple("Tick$5").product(factory.tuple("Tick$6"))); + x17_upper.add(factory.tuple("Tick$6").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$6").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$6").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$6").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$6").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$6").product(factory.tuple("Tick$5"))); + x17_upper.add(factory.tuple("Tick$6").product(factory.tuple("Tick$6"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Tick$0")); + x18_upper.add(factory.tuple("Tick$1")); + x18_upper.add(factory.tuple("Tick$2")); + x18_upper.add(factory.tuple("Tick$3")); + x18_upper.add(factory.tuple("Tick$4")); + x18_upper.add(factory.tuple("Tick$5")); + x18_upper.add(factory.tuple("Tick$6")); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("TraceShorterThanMaxSimpleLoop_this"); + Expression x23=x6.union(x7); + Decls x21=x22.oneOf(x23); + Expression x26=x22.join(x11); + Formula x25=x26.one(); + Formula x27=x26.in(x23); + Formula x24=x25.and(x27); + Formula x20=x24.forAll(x21); + Expression x29=x11.join(Expression.UNIV); + Formula x28=x29.in(x23); + Variable x33=Variable.unary("TraceShorterThanMaxSimpleLoop_this"); + Decls x32=x33.oneOf(x8); + Expression x36=x33.join(x12); + Formula x35=x36.one(); + Formula x37=x36.in(x8); + Formula x34=x35.and(x37); + Formula x31=x34.forAll(x32); + Expression x39=x12.join(Expression.UNIV); + Formula x38=x39.in(x8); + Variable x42=Variable.unary("TraceShorterThanMaxSimpleLoop_this"); + Decls x41=x42.oneOf(x9); + Expression x46=x42.join(x13); + Expression x47=x23.product(x8); + Formula x45=x46.in(x47); + Variable x50=Variable.unary(""); + Decls x49=x50.oneOf(x23); + Expression x53=x50.join(x46); + Formula x52=x53.one(); + Formula x54=x53.in(x8); + Formula x51=x52.and(x54); + Formula x48=x51.forAll(x49); + Formula x44=x45.and(x48); + Variable x57=Variable.unary(""); + Decls x56=x57.oneOf(x8); + Expression x59=x46.join(x57); + Formula x58=x59.in(x23); + Formula x55=x58.forAll(x56); + Formula x43=x44.and(x55); + Formula x40=x43.forAll(x41); + Expression x62=x13.join(Expression.UNIV); + Expression x61=x62.join(Expression.UNIV); + Formula x60=x61.in(x9); + Variable x65=Variable.unary("TraceShorterThanMaxSimpleLoop_this"); + Decls x64=x65.oneOf(x9); + Expression x67=x65.join(x14); + Formula x66=x67.in(x23); + Formula x63=x66.forAll(x64); + Expression x69=x14.join(Expression.UNIV); + Formula x68=x69.in(x9); + Variable x72=Variable.unary("TraceShorterThanMaxSimpleLoop_this"); + Decls x71=x72.oneOf(x9); + Expression x74=x72.join(x15); + Formula x73=x74.in(x23); + Formula x70=x73.forAll(x71); + Expression x76=x15.join(Expression.UNIV); + Formula x75=x76.in(x9); + Variable x79=Variable.unary("TraceShorterThanMaxSimpleLoop_this"); + Decls x78=x79.oneOf(x9); + Expression x81=x79.join(x15); + Variable x84=Variable.unary("TraceShorterThanMaxSimpleLoop_p"); + Decls x83=x84.oneOf(x23); + Formula x87=x84.eq(x6); + Expression x90=x79.join(x13); + Expression x89=x84.join(x90); + Expression x92=x84.join(x11); + Expression x93=x79.join(x13); + Expression x91=x92.join(x93); + Formula x88=x89.eq(x91); + Formula x86=x87.implies(x88); + Formula x95=x87.not(); + Expression x99=x79.join(x13); + Expression x98=x84.join(x99); + Expression x101=x84.join(x11); + Expression x102=x79.join(x13); + Expression x100=x101.join(x102); + Formula x97=x98.eq(x100); + Formula x96=x97.not(); + Formula x94=x95.implies(x96); + Formula x85=x86.and(x94); + Expression x82=x85.comprehension(x83); + Formula x80=x81.eq(x82); + Formula x77=x80.forAll(x78); + Expression x105=x10.product(x16); + Expression x104=x10.join(x105); + Formula x103=x104.in(x9); + Expression x108=x10.product(x17); + Expression x107=x10.join(x108); + Expression x109=x9.product(x9); + Formula x106=x107.in(x109); + Formula x110=x17.totalOrder(x9,x16,x18); + IntExpression x112=x8.count(); + IntExpression x113=x23.count(); + Formula x111=x112.gt(x113); + Variable x116=Variable.unary("ring_n"); + Decls x115=x116.oneOf(x23); + Expression x119=x116.join(x11); + Formula x118=x119.one(); + Expression x123=x11.closure(); + Expression x131=Expression.INTS.union(x5); + Expression x130=x131.union(x23); + Expression x129=x130.union(x8); + Expression x128=x129.union(x9); + Expression x127=x128.union(x10); + Expression x126=x127.product(Expression.UNIV); + Expression x124=Expression.IDEN.intersection(x126); + Expression x122=x123.union(x124); + Expression x121=x116.join(x122); + Formula x120=x23.in(x121); + Formula x117=x118.and(x120); + Formula x114=x117.forAll(x115); + Variable x135=Variable.unary("ring_n"); + Decls x134=x135.oneOf(x8); + Expression x138=x135.join(x12); + Formula x137=x138.one(); + Expression x142=x12.closure(); + Expression x144=x127.product(Expression.UNIV); + Expression x143=Expression.IDEN.intersection(x144); + Expression x141=x142.union(x143); + Expression x140=x135.join(x141); + Formula x139=x8.in(x140); + Formula x136=x137.and(x139); + Formula x133=x136.forAll(x134); + Variable x147=Variable.unary("TraceShorterThanMaxSimpleLoop_tp"); + Expression x150=x17.join(x9); + Expression x149=x9.difference(x150); + Expression x148=x9.difference(x149); + Decls x146=x147.oneOf(x148); + Variable x153=Variable.unary("TraceShorterThanMaxSimpleLoop_p"); + Decls x152=x153.oneOf(x23); + Expression x158=x147.join(x14); + Formula x157=x153.in(x158); + Formula x156=x157.not(); + Expression x162=x147.join(x17); + Expression x161=x162.join(x13); + Expression x160=x153.join(x161); + Expression x164=x147.join(x13); + Expression x163=x153.join(x164); + Formula x159=x160.eq(x163); + Formula x155=x156.implies(x159); + Formula x166=x156.not(); + Formula x169=x153.eq(x6); + Expression x174=x153.join(x11); + Expression x175=x147.join(x13); + Expression x173=x174.join(x175); + Formula x172=x163.eq(x173); + Expression x176=x163.join(x12); + Expression x171=x172.thenElse(x176,x163); + Formula x170=x160.eq(x171); + Formula x168=x169.implies(x170); + Formula x178=x169.not(); + Formula x182=x163.eq(x173); + Formula x181=x182.not(); + Expression x180=x181.thenElse(x173,x163); + Formula x179=x160.eq(x180); + Formula x177=x178.implies(x179); + Formula x167=x168.and(x177); + Formula x165=x166.implies(x167); + Formula x154=x155.and(x165); + Formula x151=x154.forAll(x152); + Formula x145=x151.forAll(x146); + Expression x184=x16.join(x13); + Expression x185=x149.join(x13); + Formula x183=x184.eq(x185); + Variable x188=Variable.unary("TraceShorterThanMaxSimpleLoop_t"); + Expression x190=x9.difference(x16); + Expression x189=x190.difference(x149); + Decls x187=x188.oneOf(x189); + Expression x193=x188.join(x13); + Expression x194=x16.join(x13); + Formula x192=x193.eq(x194); + Formula x191=x192.not(); + Formula x186=x191.forAll(x187); + Formula x195=x0.eq(x0); + Formula x196=x1.eq(x1); + Formula x197=x2.eq(x2); + Formula x198=x3.eq(x3); + Formula x199=x4.eq(x4); + Formula x200=x5.eq(x5); + Formula x201=x6.eq(x6); + Formula x202=x7.eq(x7); + Formula x203=x8.eq(x8); + Formula x204=x9.eq(x9); + Formula x205=x10.eq(x10); + Formula x206=x11.eq(x11); + Formula x207=x12.eq(x12); + Formula x208=x13.eq(x13); + Formula x209=x14.eq(x14); + Formula x210=x15.eq(x15); + Formula x211=x16.eq(x16); + Formula x212=x17.eq(x17); + Formula x213=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x28, x31, x38, x40, x60, x63, x68, x70, x75, x77, x103, x106, x110, x111, x114, x133, x145, x183, x186, x195, x196, x197, x198, x199, x200, x201, x202, x203, x204, x205, x206, x207, x208, x209, x210, x211, x212, x213); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstraKStateTwoPrivilegedRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstraKStateTwoPrivilegedRun.java new file mode 100644 index 0000000..8da5cc6 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/dijkstraKStateTwoPrivilegedRun.java @@ -0,0 +1,619 @@ +package kodkod.examples.models.algorithm.mutex; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "dijkstra-k-state", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 6, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes = 1, + NestedRelationalJoins = 9, + TransitiveClosure = 2, + NestedQuantifiers = 1, + SetCardinality = 2, + Additions = 0, + Subtractions = 0, + Comparison = 22, + OrderedRelations = 1, + Constraints = 36 +) + + +public final class dijkstraKStateTwoPrivilegedRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/FirstProc"); + Relation x7 = Relation.unary("this/Process remainder"); + Relation x8 = Relation.unary("this/Val"); + Relation x9 = Relation.unary("this/Tick"); + Relation x10 = Relation.unary("to/Ord"); + Relation x11 = Relation.nary("this/Process.rightNeighbor", 2); + Relation x12 = Relation.nary("this/Val.nextVal", 2); + Relation x13 = Relation.nary("this/Tick.val", 3); + Relation x14 = Relation.nary("this/Tick.runs", 2); + Relation x15 = Relation.nary("this/Tick.priv", 2); + Relation x16 = Relation.unary("to/Ord.First"); + Relation x17 = Relation.nary("to/Ord.Next", 2); + Relation x18 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "FirstProc$0", + "Process$0", "Process$1", "Tick$0", "Tick$1", "Tick$2", "Tick$3", + "Tick$4", "Val$0", "Val$1", "Val$2", "Val$3", "to/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("FirstProc$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Process$0")); + x7_upper.add(factory.tuple("Process$1")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Val$0")); + x8_upper.add(factory.tuple("Val$1")); + x8_upper.add(factory.tuple("Val$2")); + x8_upper.add(factory.tuple("Val$3")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Tick$0")); + x9_upper.add(factory.tuple("Tick$1")); + x9_upper.add(factory.tuple("Tick$2")); + x9_upper.add(factory.tuple("Tick$3")); + x9_upper.add(factory.tuple("Tick$4")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("to/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("FirstProc$0").product(factory.tuple("FirstProc$0"))); + x11_upper.add(factory.tuple("FirstProc$0").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("FirstProc$0").product(factory.tuple("Process$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("FirstProc$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("FirstProc$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$0"))); + x12_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$1"))); + x12_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$2"))); + x12_upper.add(factory.tuple("Val$0").product(factory.tuple("Val$3"))); + x12_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$0"))); + x12_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$1"))); + x12_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$2"))); + x12_upper.add(factory.tuple("Val$1").product(factory.tuple("Val$3"))); + x12_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$0"))); + x12_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$1"))); + x12_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$2"))); + x12_upper.add(factory.tuple("Val$2").product(factory.tuple("Val$3"))); + x12_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$0"))); + x12_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$1"))); + x12_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$2"))); + x12_upper.add(factory.tuple("Val$3").product(factory.tuple("Val$3"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(3); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0")).product(factory.tuple("Val$3"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$0"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$1"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$2"))); + x13_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1")).product(factory.tuple("Val$3"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1"))); + x14_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1"))); + x14_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1"))); + x14_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0"))); + x14_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("Tick$2").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$2").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("Tick$3").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$3").product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("Tick$4").product(factory.tuple("FirstProc$0"))); + x15_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("Tick$4").product(factory.tuple("Process$1"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("Tick$0")); + x16_upper.add(factory.tuple("Tick$1")); + x16_upper.add(factory.tuple("Tick$2")); + x16_upper.add(factory.tuple("Tick$3")); + x16_upper.add(factory.tuple("Tick$4")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$4"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$0"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$1"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$2"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$3"))); + x17_upper.add(factory.tuple("Tick$4").product(factory.tuple("Tick$4"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Tick$0")); + x18_upper.add(factory.tuple("Tick$1")); + x18_upper.add(factory.tuple("Tick$2")); + x18_upper.add(factory.tuple("Tick$3")); + x18_upper.add(factory.tuple("Tick$4")); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("TwoPrivileged_this"); + Expression x23=x6.union(x7); + Decls x21=x22.oneOf(x23); + Expression x26=x22.join(x11); + Formula x25=x26.one(); + Formula x27=x26.in(x23); + Formula x24=x25.and(x27); + Formula x20=x24.forAll(x21); + Expression x29=x11.join(Expression.UNIV); + Formula x28=x29.in(x23); + Variable x33=Variable.unary("TwoPrivileged_this"); + Decls x32=x33.oneOf(x8); + Expression x36=x33.join(x12); + Formula x35=x36.one(); + Formula x37=x36.in(x8); + Formula x34=x35.and(x37); + Formula x31=x34.forAll(x32); + Expression x39=x12.join(Expression.UNIV); + Formula x38=x39.in(x8); + Variable x42=Variable.unary("TwoPrivileged_this"); + Decls x41=x42.oneOf(x9); + Expression x46=x42.join(x13); + Expression x47=x23.product(x8); + Formula x45=x46.in(x47); + Variable x50=Variable.unary(""); + Decls x49=x50.oneOf(x23); + Expression x53=x50.join(x46); + Formula x52=x53.one(); + Formula x54=x53.in(x8); + Formula x51=x52.and(x54); + Formula x48=x51.forAll(x49); + Formula x44=x45.and(x48); + Variable x57=Variable.unary(""); + Decls x56=x57.oneOf(x8); + Expression x59=x46.join(x57); + Formula x58=x59.in(x23); + Formula x55=x58.forAll(x56); + Formula x43=x44.and(x55); + Formula x40=x43.forAll(x41); + Expression x62=x13.join(Expression.UNIV); + Expression x61=x62.join(Expression.UNIV); + Formula x60=x61.in(x9); + Variable x65=Variable.unary("TwoPrivileged_this"); + Decls x64=x65.oneOf(x9); + Expression x67=x65.join(x14); + Formula x66=x67.in(x23); + Formula x63=x66.forAll(x64); + Expression x69=x14.join(Expression.UNIV); + Formula x68=x69.in(x9); + Variable x72=Variable.unary("TwoPrivileged_this"); + Decls x71=x72.oneOf(x9); + Expression x74=x72.join(x15); + Formula x73=x74.in(x23); + Formula x70=x73.forAll(x71); + Expression x76=x15.join(Expression.UNIV); + Formula x75=x76.in(x9); + Variable x79=Variable.unary("TwoPrivileged_this"); + Decls x78=x79.oneOf(x9); + Expression x81=x79.join(x15); + Variable x84=Variable.unary("TwoPrivileged_p"); + Decls x83=x84.oneOf(x23); + Formula x87=x84.eq(x6); + Expression x90=x79.join(x13); + Expression x89=x84.join(x90); + Expression x92=x84.join(x11); + Expression x93=x79.join(x13); + Expression x91=x92.join(x93); + Formula x88=x89.eq(x91); + Formula x86=x87.implies(x88); + Formula x95=x87.not(); + Expression x99=x79.join(x13); + Expression x98=x84.join(x99); + Expression x101=x84.join(x11); + Expression x102=x79.join(x13); + Expression x100=x101.join(x102); + Formula x97=x98.eq(x100); + Formula x96=x97.not(); + Formula x94=x95.implies(x96); + Formula x85=x86.and(x94); + Expression x82=x85.comprehension(x83); + Formula x80=x81.eq(x82); + Formula x77=x80.forAll(x78); + Expression x105=x10.product(x16); + Expression x104=x10.join(x105); + Formula x103=x104.in(x9); + Expression x108=x10.product(x17); + Expression x107=x10.join(x108); + Expression x109=x9.product(x9); + Formula x106=x107.in(x109); + Formula x110=x17.totalOrder(x9,x16,x18); + IntExpression x112=x8.count(); + IntExpression x113=x23.count(); + Formula x111=x112.gt(x113); + Variable x116=Variable.unary("ring_n"); + Decls x115=x116.oneOf(x23); + Expression x119=x116.join(x11); + Formula x118=x119.one(); + Expression x123=x11.closure(); + Expression x131=Expression.INTS.union(x5); + Expression x130=x131.union(x23); + Expression x129=x130.union(x8); + Expression x128=x129.union(x9); + Expression x127=x128.union(x10); + Expression x126=x127.product(Expression.UNIV); + Expression x124=Expression.IDEN.intersection(x126); + Expression x122=x123.union(x124); + Expression x121=x116.join(x122); + Formula x120=x23.in(x121); + Formula x117=x118.and(x120); + Formula x114=x117.forAll(x115); + Variable x135=Variable.unary("ring_n"); + Decls x134=x135.oneOf(x8); + Expression x138=x135.join(x12); + Formula x137=x138.one(); + Expression x142=x12.closure(); + Expression x144=x127.product(Expression.UNIV); + Expression x143=Expression.IDEN.intersection(x144); + Expression x141=x142.union(x143); + Expression x140=x135.join(x141); + Formula x139=x8.in(x140); + Formula x136=x137.and(x139); + Formula x133=x136.forAll(x134); + Variable x147=Variable.unary("TwoPrivileged_tp"); + Expression x150=x17.join(x9); + Expression x149=x9.difference(x150); + Expression x148=x9.difference(x149); + Decls x146=x147.oneOf(x148); + Variable x153=Variable.unary("TwoPrivileged_p"); + Decls x152=x153.oneOf(x23); + Expression x158=x147.join(x14); + Formula x157=x153.in(x158); + Formula x156=x157.not(); + Expression x162=x147.join(x17); + Expression x161=x162.join(x13); + Expression x160=x153.join(x161); + Expression x164=x147.join(x13); + Expression x163=x153.join(x164); + Formula x159=x160.eq(x163); + Formula x155=x156.implies(x159); + Formula x166=x156.not(); + Formula x169=x153.eq(x6); + Expression x174=x153.join(x11); + Expression x175=x147.join(x13); + Expression x173=x174.join(x175); + Formula x172=x163.eq(x173); + Expression x176=x163.join(x12); + Expression x171=x172.thenElse(x176,x163); + Formula x170=x160.eq(x171); + Formula x168=x169.implies(x170); + Formula x178=x169.not(); + Formula x182=x163.eq(x173); + Formula x181=x182.not(); + Expression x180=x181.thenElse(x173,x163); + Formula x179=x160.eq(x180); + Formula x177=x178.implies(x179); + Formula x167=x168.and(x177); + Formula x165=x166.implies(x167); + Formula x154=x155.and(x165); + Formula x151=x154.forAll(x152); + Formula x145=x151.forAll(x146); + Variable x186=Variable.unary("BadTick_p1"); + Decls x185=x186.oneOf(x23); + Variable x188=Variable.unary("BadTick_p2"); + Decls x187=x188.oneOf(x23); + Decls x184=x185.and(x187); + Formula x192=x186.eq(x188); + Formula x191=x192.not(); + Formula x195=x186.eq(x6); + Expression x198=x16.join(x13); + Expression x197=x186.join(x198); + Expression x200=x186.join(x11); + Expression x201=x16.join(x13); + Expression x199=x200.join(x201); + Formula x196=x197.eq(x199); + Formula x194=x195.implies(x196); + Formula x203=x195.not(); + Expression x207=x16.join(x13); + Expression x206=x186.join(x207); + Expression x209=x186.join(x11); + Expression x210=x16.join(x13); + Expression x208=x209.join(x210); + Formula x205=x206.eq(x208); + Formula x204=x205.not(); + Formula x202=x203.implies(x204); + Formula x193=x194.and(x202); + Formula x190=x191.and(x193); + Formula x213=x188.eq(x6); + Expression x216=x16.join(x13); + Expression x215=x188.join(x216); + Expression x218=x188.join(x11); + Expression x219=x16.join(x13); + Expression x217=x218.join(x219); + Formula x214=x215.eq(x217); + Formula x212=x213.implies(x214); + Formula x221=x213.not(); + Expression x225=x16.join(x13); + Expression x224=x188.join(x225); + Expression x227=x188.join(x11); + Expression x228=x16.join(x13); + Expression x226=x227.join(x228); + Formula x223=x224.eq(x226); + Formula x222=x223.not(); + Formula x220=x221.implies(x222); + Formula x211=x212.and(x220); + Formula x189=x190.and(x211); + Formula x183=x189.forSome(x184); + Variable x232=Variable.unary("TwoPrivileged_p1"); + Decls x231=x232.oneOf(x23); + Variable x234=Variable.unary("TwoPrivileged_p2"); + Decls x233=x234.oneOf(x23); + Variable x236=Variable.unary("TwoPrivileged_t1"); + Expression x237=x9.difference(x16); + Decls x235=x236.oneOf(x237); + Variable x239=Variable.unary("TwoPrivileged_t2"); + Decls x238=x239.oneOf(x237); + Decls x230=x231.and(x233).and(x235).and(x238); + Formula x243=x232.eq(x234); + Formula x242=x243.not(); + Formula x246=x232.eq(x6); + Expression x249=x236.join(x13); + Expression x248=x232.join(x249); + Expression x251=x232.join(x11); + Expression x252=x236.join(x13); + Expression x250=x251.join(x252); + Formula x247=x248.eq(x250); + Formula x245=x246.implies(x247); + Formula x254=x246.not(); + Expression x258=x236.join(x13); + Expression x257=x232.join(x258); + Expression x260=x232.join(x11); + Expression x261=x236.join(x13); + Expression x259=x260.join(x261); + Formula x256=x257.eq(x259); + Formula x255=x256.not(); + Formula x253=x254.implies(x255); + Formula x244=x245.and(x253); + Formula x241=x242.and(x244); + Formula x264=x234.eq(x6); + Expression x267=x239.join(x13); + Expression x266=x234.join(x267); + Expression x269=x234.join(x11); + Expression x270=x239.join(x13); + Expression x268=x269.join(x270); + Formula x265=x266.eq(x268); + Formula x263=x264.implies(x265); + Formula x272=x264.not(); + Expression x276=x239.join(x13); + Expression x275=x234.join(x276); + Expression x278=x234.join(x11); + Expression x279=x239.join(x13); + Expression x277=x278.join(x279); + Formula x274=x275.eq(x277); + Formula x273=x274.not(); + Formula x271=x272.implies(x273); + Formula x262=x263.and(x271); + Formula x240=x241.and(x262); + Formula x229=x240.forSome(x230); + Formula x280=x0.eq(x0); + Formula x281=x1.eq(x1); + Formula x282=x2.eq(x2); + Formula x283=x3.eq(x3); + Formula x284=x4.eq(x4); + Formula x285=x5.eq(x5); + Formula x286=x6.eq(x6); + Formula x287=x7.eq(x7); + Formula x288=x8.eq(x8); + Formula x289=x9.eq(x9); + Formula x290=x10.eq(x10); + Formula x291=x11.eq(x11); + Formula x292=x12.eq(x12); + Formula x293=x13.eq(x13); + Formula x294=x14.eq(x14); + Formula x295=x15.eq(x15); + Formula x296=x16.eq(x16); + Formula x297=x17.eq(x17); + Formula x298=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x28, x31, x38, x40, x60, x63, x68, x70, x75, x77, x103, x106, x110, x111, x114, x133, x145, x183, x229, x280, x281, x282, x283, x284, x285, x286, x287, x288, x289, x290, x291, x292, x293, x294, x295, x296, x297, x298); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/petersonNotStuckCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/petersonNotStuckCheck.java new file mode 100644 index 0000000..1054a45 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/petersonNotStuckCheck.java @@ -0,0 +1,1217 @@ +package kodkod.examples.models.algorithm.mutex; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "peterson", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 4, + NaryRelations = 0, + HierarchicalTypes = 5, + NestedRelationalJoins = 41, + TransitiveClosure = 3, + NestedQuantifiers = 1, + SetCardinality = 2, + Additions = 0, + Subtractions = 0, + Comparison = 46, + OrderedRelations = 2, + Constraints = 50 +) + + + +public final class petersonNotStuckCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/pid"); + Relation x7 = Relation.unary("this/priority"); + Relation x8 = Relation.unary("this/L0"); + Relation x9 = Relation.unary("this/L1"); + Relation x10 = Relation.unary("this/L2"); + Relation x11 = Relation.unary("this/L3"); + Relation x12 = Relation.unary("this/L4"); + Relation x13 = Relation.unary("this/State"); + Relation x14 = Relation.unary("po/Ord"); + Relation x15 = Relation.unary("so/Ord"); + Relation x16 = Relation.nary("this/State.P", 3); + Relation x17 = Relation.nary("this/State.Q", 3); + Relation x18 = Relation.nary("this/State.turn", 3); + Relation x19 = Relation.nary("this/State.localj", 3); + Relation x20 = Relation.unary("po/Ord.First"); + Relation x21 = Relation.nary("po/Ord.Next", 2); + Relation x22 = Relation.unary("so/Ord.First"); + Relation x23 = Relation.nary("so/Ord.Next", 2); + Relation x24 = Relation.unary(""); + Relation x25 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "L0$0", + "L1$0", "L2$0", "L3$0", "L4$0", "State$0", "State$1", + "State$2", "State$3", "State$4", "State$5", "State$6", "State$7", + "State$8", "State$9", "pid$0", "pid$1", "po/Ord$0", "priority$0", + "priority$1", "priority$2", "so/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + x4_upper.add(factory.tuple("5")); + x4_upper.add(factory.tuple("6")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("pid$0")); + x6_upper.add(factory.tuple("pid$1")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("priority$0")); + x7_upper.add(factory.tuple("priority$1")); + x7_upper.add(factory.tuple("priority$2")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("L0$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("L1$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("L2$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("L3$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("L4$0")); + bounds.boundExactly(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("State$0")); + x13_upper.add(factory.tuple("State$1")); + x13_upper.add(factory.tuple("State$2")); + x13_upper.add(factory.tuple("State$3")); + x13_upper.add(factory.tuple("State$4")); + x13_upper.add(factory.tuple("State$5")); + x13_upper.add(factory.tuple("State$6")); + x13_upper.add(factory.tuple("State$7")); + x13_upper.add(factory.tuple("State$8")); + x13_upper.add(factory.tuple("State$9")); + bounds.boundExactly(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("po/Ord$0")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(3); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(3); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(3); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(1); + x20_upper.add(factory.tuple("priority$0")); + x20_upper.add(factory.tuple("priority$1")); + x20_upper.add(factory.tuple("priority$2")); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("priority$0").product(factory.tuple("priority$0"))); + x21_upper.add(factory.tuple("priority$0").product(factory.tuple("priority$1"))); + x21_upper.add(factory.tuple("priority$0").product(factory.tuple("priority$2"))); + x21_upper.add(factory.tuple("priority$1").product(factory.tuple("priority$0"))); + x21_upper.add(factory.tuple("priority$1").product(factory.tuple("priority$1"))); + x21_upper.add(factory.tuple("priority$1").product(factory.tuple("priority$2"))); + x21_upper.add(factory.tuple("priority$2").product(factory.tuple("priority$0"))); + x21_upper.add(factory.tuple("priority$2").product(factory.tuple("priority$1"))); + x21_upper.add(factory.tuple("priority$2").product(factory.tuple("priority$2"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("State$0")); + x22_upper.add(factory.tuple("State$1")); + x22_upper.add(factory.tuple("State$2")); + x22_upper.add(factory.tuple("State$3")); + x22_upper.add(factory.tuple("State$4")); + x22_upper.add(factory.tuple("State$5")); + x22_upper.add(factory.tuple("State$6")); + x22_upper.add(factory.tuple("State$7")); + x22_upper.add(factory.tuple("State$8")); + x22_upper.add(factory.tuple("State$9")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$9"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("priority$0")); + x24_upper.add(factory.tuple("priority$1")); + x24_upper.add(factory.tuple("priority$2")); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(1); + x25_upper.add(factory.tuple("State$0")); + x25_upper.add(factory.tuple("State$1")); + x25_upper.add(factory.tuple("State$2")); + x25_upper.add(factory.tuple("State$3")); + x25_upper.add(factory.tuple("State$4")); + x25_upper.add(factory.tuple("State$5")); + x25_upper.add(factory.tuple("State$6")); + x25_upper.add(factory.tuple("State$7")); + x25_upper.add(factory.tuple("State$8")); + x25_upper.add(factory.tuple("State$9")); + bounds.bound(x25, x25_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x28=x8.intersection(x9); + Formula x27=x28.no(); + Expression x31=x8.union(x9); + Expression x30=x31.intersection(x10); + Formula x29=x30.no(); + Expression x34=x31.union(x10); + Expression x33=x34.intersection(x11); + Formula x32=x33.no(); + Expression x37=x34.union(x11); + Expression x36=x37.intersection(x12); + Formula x35=x36.no(); + Variable x40=Variable.unary("NotStuck_this"); + Decls x39=x40.oneOf(x13); + Expression x42=x40.join(x16); + Expression x44=x37.union(x12); + Expression x43=x6.product(x44); + Formula x41=x42.in(x43); + Formula x38=x41.forAll(x39); + Expression x47=x16.join(Expression.UNIV); + Expression x46=x47.join(Expression.UNIV); + Formula x45=x46.in(x13); + Variable x51=Variable.unary("NotStuck_this"); + Decls x50=x51.oneOf(x13); + Expression x53=x51.join(x17); + Expression x54=x6.product(x7); + Formula x52=x53.in(x54); + Formula x49=x52.forAll(x50); + Expression x57=x17.join(Expression.UNIV); + Expression x56=x57.join(Expression.UNIV); + Formula x55=x56.in(x13); + Variable x60=Variable.unary("NotStuck_this"); + Decls x59=x60.oneOf(x13); + Expression x62=x60.join(x18); + Expression x63=x7.product(x6); + Formula x61=x62.in(x63); + Formula x58=x61.forAll(x59); + Expression x66=x18.join(Expression.UNIV); + Expression x65=x66.join(Expression.UNIV); + Formula x64=x65.in(x13); + Variable x69=Variable.unary("NotStuck_this"); + Decls x68=x69.oneOf(x13); + Expression x71=x69.join(x19); + Expression x72=x6.product(x7); + Formula x70=x71.in(x72); + Formula x67=x70.forAll(x68); + Expression x75=x19.join(Expression.UNIV); + Expression x74=x75.join(Expression.UNIV); + Formula x73=x74.in(x13); + Expression x78=x14.product(x20); + Expression x77=x14.join(x78); + Formula x76=x77.in(x7); + Expression x81=x14.product(x21); + Expression x80=x14.join(x81); + Expression x82=x7.product(x7); + Formula x79=x80.in(x82); + Formula x83=x21.totalOrder(x7,x20,x24); + Expression x86=x15.product(x22); + Expression x85=x15.join(x86); + Formula x84=x85.in(x13); + Expression x89=x15.product(x23); + Expression x88=x15.join(x89); + Expression x90=x13.product(x13); + Formula x87=x88.in(x90); + Formula x91=x23.totalOrder(x13,x22,x25); + IntExpression x93=x7.count(); + IntExpression x95=x6.count(); + IntExpression x96=IntConstant.constant(1); + IntExpression x94=x95.plus(x96); + Formula x92=x93.eq(x94); + Variable x101=Variable.unary("NotStuck_i"); + Decls x100=x101.oneOf(x6); + Expression x105=x22.join(x16); + Expression x104=x101.join(x105); + Formula x103=x104.eq(x8); + Expression x108=x22.join(x17); + Expression x107=x101.join(x108); + Formula x106=x107.eq(x20); + Formula x102=x103.and(x106); + Formula x99=x102.forAll(x100); + Expression x110=x22.join(x18); + Formula x109=x110.no(); + Formula x98=x99.and(x109); + Expression x112=x22.join(x19); + Formula x111=x112.no(); + Formula x97=x98.and(x111); + Variable x115=Variable.unary("NotStuck_pre"); + Expression x118=x23.join(x13); + Expression x117=x13.difference(x118); + Expression x116=x13.difference(x117); + Decls x114=x115.oneOf(x116); + Variable x122=Variable.unary("NotStuck_i"); + Decls x121=x122.oneOf(x6); + Expression x130=x115.join(x16); + Expression x129=x122.join(x130); + Formula x128=x129.eq(x8); + Expression x136=x115.join(x23); + Expression x135=x136.join(x19); + Expression x134=x122.join(x135); + Expression x137=x20.join(x21); + Formula x133=x134.eq(x137); + Expression x140=x136.join(x17); + Expression x139=x122.join(x140); + Expression x142=x115.join(x17); + Expression x141=x122.join(x142); + Formula x138=x139.eq(x141); + Formula x132=x133.and(x138); + Expression x144=x136.join(x18); + Expression x145=x115.join(x18); + Formula x143=x144.eq(x145); + Formula x131=x132.and(x143); + Formula x127=x128.and(x131); + Expression x148=x136.join(x16); + Expression x147=x122.join(x148); + Formula x146=x147.eq(x9); + Formula x126=x127.and(x146); + Expression x155=x115.join(x16); + Expression x154=x122.join(x155); + Formula x153=x154.eq(x9); + Expression x160=x136.join(x19); + Expression x159=x122.join(x160); + Expression x162=x115.join(x19); + Expression x161=x122.join(x162); + Formula x158=x159.eq(x161); + Expression x165=x136.join(x16); + Expression x164=x122.join(x165); + Formula x163=x164.eq(x10); + Formula x157=x158.and(x163); + Expression x167=x136.join(x18); + Expression x168=x115.join(x18); + Formula x166=x167.eq(x168); + Formula x156=x157.and(x166); + Formula x152=x153.and(x156); + Expression x171=x136.join(x17); + Expression x170=x122.join(x171); + Expression x173=x115.join(x19); + Expression x172=x122.join(x173); + Formula x169=x170.eq(x172); + Formula x151=x152.and(x169); + Expression x179=x115.join(x16); + Expression x178=x122.join(x179); + Formula x177=x178.eq(x11); + Variable x182=Variable.unary("L3TransPre_k"); + Expression x183=x6.difference(x122); + Decls x181=x182.oneOf(x183); + Expression x187=x115.join(x17); + Expression x186=x182.join(x187); + Expression x190=x115.join(x19); + Expression x189=x122.join(x190); + Expression x192=x21.transpose(); + Expression x191=x192.closure(); + Expression x188=x189.join(x191); + Formula x185=x186.in(x188); + Expression x197=x115.join(x19); + Expression x196=x122.join(x197); + Expression x198=x115.join(x18); + Expression x195=x196.join(x198); + Formula x194=x195.eq(x122); + Formula x193=x194.not(); + Formula x184=x185.or(x193); + Formula x180=x184.forAll(x181); + Formula x176=x177.and(x180); + Expression x203=x136.join(x19); + Expression x202=x122.join(x203); + Expression x206=x115.join(x19); + Expression x205=x122.join(x206); + Expression x204=x205.join(x21); + Formula x201=x202.eq(x204); + Expression x209=x136.join(x17); + Expression x208=x122.join(x209); + Expression x211=x115.join(x17); + Expression x210=x122.join(x211); + Formula x207=x208.eq(x210); + Formula x200=x201.and(x207); + Expression x213=x136.join(x18); + Expression x214=x115.join(x18); + Formula x212=x213.eq(x214); + Formula x199=x200.and(x212); + Formula x175=x176.and(x199); + Expression x219=x136.join(x19); + Expression x218=x122.join(x219); + Expression x222=x21.join(x7); + Expression x221=x7.difference(x222); + Expression x224=x21.transpose(); + Expression x223=x224.closure(); + Expression x220=x221.join(x223); + Formula x217=x218.in(x220); + Expression x227=x136.join(x16); + Expression x226=x122.join(x227); + Formula x225=x226.eq(x9); + Formula x216=x217.implies(x225); + Formula x229=x217.not(); + Expression x232=x136.join(x16); + Expression x231=x122.join(x232); + Formula x230=x231.eq(x12); + Formula x228=x229.implies(x230); + Formula x215=x216.and(x228); + Formula x174=x175.and(x215); + Formula x150=x151.or(x174); + Expression x237=x115.join(x16); + Expression x236=x122.join(x237); + Formula x235=x236.eq(x12); + Expression x242=x136.join(x16); + Expression x241=x122.join(x242); + Formula x240=x241.eq(x8); + Expression x245=x136.join(x19); + Expression x244=x122.join(x245); + Expression x247=x115.join(x19); + Expression x246=x122.join(x247); + Formula x243=x244.eq(x246); + Formula x239=x240.and(x243); + Expression x249=x136.join(x18); + Expression x250=x115.join(x18); + Formula x248=x249.eq(x250); + Formula x238=x239.and(x248); + Formula x234=x235.and(x238); + Expression x253=x136.join(x17); + Expression x252=x122.join(x253); + Formula x251=x252.eq(x20); + Formula x233=x234.and(x251); + Formula x149=x150.or(x233); + Formula x125=x126.or(x149); + Expression x258=x115.join(x16); + Expression x257=x122.join(x258); + Formula x256=x257.eq(x10); + Expression x263=x136.join(x19); + Expression x262=x122.join(x263); + Expression x265=x115.join(x19); + Expression x264=x122.join(x265); + Formula x261=x262.eq(x264); + Expression x268=x136.join(x16); + Expression x267=x122.join(x268); + Formula x266=x267.eq(x11); + Formula x260=x261.and(x266); + Expression x272=x136.join(x19); + Expression x271=x122.join(x272); + Expression x273=x136.join(x18); + Expression x270=x271.join(x273); + Formula x269=x270.eq(x122); + Formula x259=x260.and(x269); + Formula x255=x256.and(x259); + Expression x277=x136.join(x17); + Expression x276=x122.join(x277); + Expression x279=x115.join(x17); + Expression x278=x122.join(x279); + Formula x275=x276.eq(x278); + Variable x282=Variable.unary("L2Trans_j"); + Expression x285=x136.join(x19); + Expression x284=x122.join(x285); + Expression x283=x7.difference(x284); + Decls x281=x282.oneOf(x283); + Expression x288=x136.join(x18); + Expression x287=x282.join(x288); + Expression x290=x115.join(x18); + Expression x289=x282.join(x290); + Formula x286=x287.eq(x289); + Formula x280=x286.forAll(x281); + Formula x274=x275.and(x280); + Formula x254=x255.and(x274); + Formula x124=x125.or(x254); + Expression x295=x136.join(x16); + Expression x294=x122.join(x295); + Expression x297=x115.join(x16); + Expression x296=x122.join(x297); + Formula x293=x294.eq(x296); + Expression x300=x136.join(x17); + Expression x299=x122.join(x300); + Expression x302=x115.join(x17); + Expression x301=x122.join(x302); + Formula x298=x299.eq(x301); + Formula x292=x293.and(x298); + Expression x305=x136.join(x19); + Expression x304=x122.join(x305); + Expression x307=x115.join(x19); + Expression x306=x122.join(x307); + Formula x303=x304.eq(x306); + Formula x291=x292.and(x303); + Formula x123=x124.or(x291); + Formula x120=x123.forAll(x121); + Variable x312=Variable.unary("NotStuck_i"); + Decls x311=x312.oneOf(x6); + Expression x317=x136.join(x16); + Expression x316=x312.join(x317); + Expression x319=x115.join(x16); + Expression x318=x312.join(x319); + Formula x315=x316.eq(x318); + Expression x322=x136.join(x17); + Expression x321=x312.join(x322); + Expression x324=x115.join(x17); + Expression x323=x312.join(x324); + Formula x320=x321.eq(x323); + Formula x314=x315.and(x320); + Expression x327=x136.join(x19); + Expression x326=x312.join(x327); + Expression x329=x115.join(x19); + Expression x328=x312.join(x329); + Formula x325=x326.eq(x328); + Formula x313=x314.and(x325); + Formula x310=x313.forAll(x311); + Formula x309=x310.not(); + Variable x333=Variable.unary("NotStuck_i"); + Decls x332=x333.oneOf(x6); + Expression x339=x115.join(x16); + Expression x338=x333.join(x339); + Formula x337=x338.eq(x8); + Expression x344=x115.join(x16); + Expression x343=x333.join(x344); + Formula x342=x343.eq(x9); + Expression x348=x115.join(x16); + Expression x347=x333.join(x348); + Formula x346=x347.eq(x11); + Variable x351=Variable.unary("L3TransPre_k"); + Expression x352=x6.difference(x333); + Decls x350=x351.oneOf(x352); + Expression x356=x115.join(x17); + Expression x355=x351.join(x356); + Expression x359=x115.join(x19); + Expression x358=x333.join(x359); + Expression x361=x21.transpose(); + Expression x360=x361.closure(); + Expression x357=x358.join(x360); + Formula x354=x355.in(x357); + Expression x366=x115.join(x19); + Expression x365=x333.join(x366); + Expression x367=x115.join(x18); + Expression x364=x365.join(x367); + Formula x363=x364.eq(x333); + Formula x362=x363.not(); + Formula x353=x354.or(x362); + Formula x349=x353.forAll(x350); + Formula x345=x346.and(x349); + Formula x341=x342.or(x345); + Expression x370=x115.join(x16); + Expression x369=x333.join(x370); + Formula x368=x369.eq(x12); + Formula x340=x341.or(x368); + Formula x336=x337.or(x340); + Expression x373=x115.join(x16); + Expression x372=x333.join(x373); + Formula x371=x372.eq(x10); + Formula x335=x336.or(x371); + Formula x334=x335.not(); + Formula x331=x334.forAll(x332); + Expression x375=x136.join(x18); + Expression x376=x115.join(x18); + Formula x374=x375.eq(x376); + Formula x330=x331.and(x374); + Formula x308=x309.or(x330); + Formula x119=x120.and(x308); + Formula x113=x119.forAll(x114); + Variable x380=Variable.unary("NotStuck_pre"); + Expression x381=x13.difference(x117); + Decls x379=x380.oneOf(x381); + Variable x384=Variable.unary("NotStuck_i"); + Decls x383=x384.oneOf(x6); + Expression x392=x380.join(x16); + Expression x391=x384.join(x392); + Formula x390=x391.eq(x8); + Expression x398=x380.join(x23); + Expression x397=x398.join(x19); + Expression x396=x384.join(x397); + Expression x399=x20.join(x21); + Formula x395=x396.eq(x399); + Expression x402=x398.join(x17); + Expression x401=x384.join(x402); + Expression x404=x380.join(x17); + Expression x403=x384.join(x404); + Formula x400=x401.eq(x403); + Formula x394=x395.and(x400); + Expression x406=x398.join(x18); + Expression x407=x380.join(x18); + Formula x405=x406.eq(x407); + Formula x393=x394.and(x405); + Formula x389=x390.and(x393); + Expression x410=x398.join(x16); + Expression x409=x384.join(x410); + Formula x408=x409.eq(x9); + Formula x388=x389.and(x408); + Expression x417=x380.join(x16); + Expression x416=x384.join(x417); + Formula x415=x416.eq(x9); + Expression x422=x398.join(x19); + Expression x421=x384.join(x422); + Expression x424=x380.join(x19); + Expression x423=x384.join(x424); + Formula x420=x421.eq(x423); + Expression x427=x398.join(x16); + Expression x426=x384.join(x427); + Formula x425=x426.eq(x10); + Formula x419=x420.and(x425); + Expression x429=x398.join(x18); + Expression x430=x380.join(x18); + Formula x428=x429.eq(x430); + Formula x418=x419.and(x428); + Formula x414=x415.and(x418); + Expression x433=x398.join(x17); + Expression x432=x384.join(x433); + Expression x435=x380.join(x19); + Expression x434=x384.join(x435); + Formula x431=x432.eq(x434); + Formula x413=x414.and(x431); + Expression x441=x380.join(x16); + Expression x440=x384.join(x441); + Formula x439=x440.eq(x11); + Variable x444=Variable.unary("L3TransPre_k"); + Expression x445=x6.difference(x384); + Decls x443=x444.oneOf(x445); + Expression x449=x380.join(x17); + Expression x448=x444.join(x449); + Expression x452=x380.join(x19); + Expression x451=x384.join(x452); + Expression x454=x21.transpose(); + Expression x453=x454.closure(); + Expression x450=x451.join(x453); + Formula x447=x448.in(x450); + Expression x459=x380.join(x19); + Expression x458=x384.join(x459); + Expression x460=x380.join(x18); + Expression x457=x458.join(x460); + Formula x456=x457.eq(x384); + Formula x455=x456.not(); + Formula x446=x447.or(x455); + Formula x442=x446.forAll(x443); + Formula x438=x439.and(x442); + Expression x465=x398.join(x19); + Expression x464=x384.join(x465); + Expression x468=x380.join(x19); + Expression x467=x384.join(x468); + Expression x466=x467.join(x21); + Formula x463=x464.eq(x466); + Expression x471=x398.join(x17); + Expression x470=x384.join(x471); + Expression x473=x380.join(x17); + Expression x472=x384.join(x473); + Formula x469=x470.eq(x472); + Formula x462=x463.and(x469); + Expression x475=x398.join(x18); + Expression x476=x380.join(x18); + Formula x474=x475.eq(x476); + Formula x461=x462.and(x474); + Formula x437=x438.and(x461); + Expression x481=x398.join(x19); + Expression x480=x384.join(x481); + Expression x484=x21.transpose(); + Expression x483=x484.closure(); + Expression x482=x221.join(x483); + Formula x479=x480.in(x482); + Expression x487=x398.join(x16); + Expression x486=x384.join(x487); + Formula x485=x486.eq(x9); + Formula x478=x479.implies(x485); + Formula x489=x479.not(); + Expression x492=x398.join(x16); + Expression x491=x384.join(x492); + Formula x490=x491.eq(x12); + Formula x488=x489.implies(x490); + Formula x477=x478.and(x488); + Formula x436=x437.and(x477); + Formula x412=x413.or(x436); + Expression x497=x380.join(x16); + Expression x496=x384.join(x497); + Formula x495=x496.eq(x12); + Expression x502=x398.join(x16); + Expression x501=x384.join(x502); + Formula x500=x501.eq(x8); + Expression x505=x398.join(x19); + Expression x504=x384.join(x505); + Expression x507=x380.join(x19); + Expression x506=x384.join(x507); + Formula x503=x504.eq(x506); + Formula x499=x500.and(x503); + Expression x509=x398.join(x18); + Expression x510=x380.join(x18); + Formula x508=x509.eq(x510); + Formula x498=x499.and(x508); + Formula x494=x495.and(x498); + Expression x513=x398.join(x17); + Expression x512=x384.join(x513); + Formula x511=x512.eq(x20); + Formula x493=x494.and(x511); + Formula x411=x412.or(x493); + Formula x387=x388.or(x411); + Expression x518=x380.join(x16); + Expression x517=x384.join(x518); + Formula x516=x517.eq(x10); + Expression x523=x398.join(x19); + Expression x522=x384.join(x523); + Expression x525=x380.join(x19); + Expression x524=x384.join(x525); + Formula x521=x522.eq(x524); + Expression x528=x398.join(x16); + Expression x527=x384.join(x528); + Formula x526=x527.eq(x11); + Formula x520=x521.and(x526); + Expression x532=x398.join(x19); + Expression x531=x384.join(x532); + Expression x533=x398.join(x18); + Expression x530=x531.join(x533); + Formula x529=x530.eq(x384); + Formula x519=x520.and(x529); + Formula x515=x516.and(x519); + Expression x537=x398.join(x17); + Expression x536=x384.join(x537); + Expression x539=x380.join(x17); + Expression x538=x384.join(x539); + Formula x535=x536.eq(x538); + Variable x542=Variable.unary("L2Trans_j"); + Expression x545=x398.join(x19); + Expression x544=x384.join(x545); + Expression x543=x7.difference(x544); + Decls x541=x542.oneOf(x543); + Expression x548=x398.join(x18); + Expression x547=x542.join(x548); + Expression x550=x380.join(x18); + Expression x549=x542.join(x550); + Formula x546=x547.eq(x549); + Formula x540=x546.forAll(x541); + Formula x534=x535.and(x540); + Formula x514=x515.and(x534); + Formula x386=x387.or(x514); + Expression x556=x398.join(x16); + Expression x555=x384.join(x556); + Expression x558=x380.join(x16); + Expression x557=x384.join(x558); + Formula x554=x555.eq(x557); + Expression x561=x398.join(x17); + Expression x560=x384.join(x561); + Expression x563=x380.join(x17); + Expression x562=x384.join(x563); + Formula x559=x560.eq(x562); + Formula x553=x554.and(x559); + Expression x566=x398.join(x19); + Expression x565=x384.join(x566); + Expression x568=x380.join(x19); + Expression x567=x384.join(x568); + Formula x564=x565.eq(x567); + Formula x552=x553.and(x564); + Formula x551=x552.not(); + Formula x385=x386.and(x551); + Formula x382=x385.forSome(x383); + Formula x378=x382.forAll(x379); + Formula x377=x378.not(); + Formula x569=x0.eq(x0); + Formula x570=x1.eq(x1); + Formula x571=x2.eq(x2); + Formula x572=x3.eq(x3); + Formula x573=x4.eq(x4); + Formula x574=x5.eq(x5); + Formula x575=x6.eq(x6); + Formula x576=x7.eq(x7); + Formula x577=x8.eq(x8); + Formula x578=x9.eq(x9); + Formula x579=x10.eq(x10); + Formula x580=x11.eq(x11); + Formula x581=x12.eq(x12); + Formula x582=x13.eq(x13); + Formula x583=x14.eq(x14); + Formula x584=x15.eq(x15); + Formula x585=x16.eq(x16); + Formula x586=x17.eq(x17); + Formula x587=x18.eq(x18); + Formula x588=x19.eq(x19); + Formula x589=x20.eq(x20); + Formula x590=x21.eq(x21); + Formula x591=x22.eq(x22); + Formula x592=x23.eq(x23); + Formula x593=x24.eq(x24); + Formula x594=x25.eq(x25); + Formula x26=Formula.compose(FormulaOperator.AND, x27, x29, x32, x35, x38, x45, x49, x55, x58, x64, x67, x73, x76, x79, x83, x84, x87, x91, x92, x97, x113, x377, x569, x570, x571, x572, x573, x574, x575, x576, x577, x578, x579, x580, x581, x582, x583, x584, x585, x586, x587, x588, x589, x590, x591, x592, x593, x594); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x26,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/petersonSafetyCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/petersonSafetyCheck.java new file mode 100644 index 0000000..d067756 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/petersonSafetyCheck.java @@ -0,0 +1,1046 @@ +package kodkod.examples.models.algorithm.mutex; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + + +@ExampleMetadata( + Name = "peterson", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 4, + NaryRelations = 0, + HierarchicalTypes = 5, + NestedRelationalJoins = 41, + TransitiveClosure = 3, + NestedQuantifiers = 1, + SetCardinality = 2, + Additions = 0, + Subtractions = 0, + Comparison = 46, + OrderedRelations = 2, + Constraints = 50 +) + + +public final class petersonSafetyCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/pid"); + Relation x7 = Relation.unary("this/priority"); + Relation x8 = Relation.unary("this/L0"); + Relation x9 = Relation.unary("this/L1"); + Relation x10 = Relation.unary("this/L2"); + Relation x11 = Relation.unary("this/L3"); + Relation x12 = Relation.unary("this/L4"); + Relation x13 = Relation.unary("this/State"); + Relation x14 = Relation.unary("po/Ord"); + Relation x15 = Relation.unary("so/Ord"); + Relation x16 = Relation.nary("this/State.P", 3); + Relation x17 = Relation.nary("this/State.Q", 3); + Relation x18 = Relation.nary("this/State.turn", 3); + Relation x19 = Relation.nary("this/State.localj", 3); + Relation x20 = Relation.unary("po/Ord.First"); + Relation x21 = Relation.nary("po/Ord.Next", 2); + Relation x22 = Relation.unary("so/Ord.First"); + Relation x23 = Relation.nary("so/Ord.Next", 2); + Relation x24 = Relation.unary(""); + Relation x25 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "L0$0", + "L1$0", "L2$0", "L3$0", "L4$0", "State$0", "State$1", + "State$2", "State$3", "State$4", "State$5", "State$6", "State$7", + "State$8", "State$9", "pid$0", "pid$1", "po/Ord$0", "priority$0", + "priority$1", "priority$2", "so/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + x4_upper.add(factory.tuple("5")); + x4_upper.add(factory.tuple("6")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("pid$0")); + x6_upper.add(factory.tuple("pid$1")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("priority$0")); + x7_upper.add(factory.tuple("priority$1")); + x7_upper.add(factory.tuple("priority$2")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("L0$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("L1$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("L2$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("L3$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("L4$0")); + bounds.boundExactly(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("State$0")); + x13_upper.add(factory.tuple("State$1")); + x13_upper.add(factory.tuple("State$2")); + x13_upper.add(factory.tuple("State$3")); + x13_upper.add(factory.tuple("State$4")); + x13_upper.add(factory.tuple("State$5")); + x13_upper.add(factory.tuple("State$6")); + x13_upper.add(factory.tuple("State$7")); + x13_upper.add(factory.tuple("State$8")); + x13_upper.add(factory.tuple("State$9")); + bounds.boundExactly(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("po/Ord$0")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(3); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(3); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(3); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(1); + x20_upper.add(factory.tuple("priority$0")); + x20_upper.add(factory.tuple("priority$1")); + x20_upper.add(factory.tuple("priority$2")); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("priority$0").product(factory.tuple("priority$0"))); + x21_upper.add(factory.tuple("priority$0").product(factory.tuple("priority$1"))); + x21_upper.add(factory.tuple("priority$0").product(factory.tuple("priority$2"))); + x21_upper.add(factory.tuple("priority$1").product(factory.tuple("priority$0"))); + x21_upper.add(factory.tuple("priority$1").product(factory.tuple("priority$1"))); + x21_upper.add(factory.tuple("priority$1").product(factory.tuple("priority$2"))); + x21_upper.add(factory.tuple("priority$2").product(factory.tuple("priority$0"))); + x21_upper.add(factory.tuple("priority$2").product(factory.tuple("priority$1"))); + x21_upper.add(factory.tuple("priority$2").product(factory.tuple("priority$2"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("State$0")); + x22_upper.add(factory.tuple("State$1")); + x22_upper.add(factory.tuple("State$2")); + x22_upper.add(factory.tuple("State$3")); + x22_upper.add(factory.tuple("State$4")); + x22_upper.add(factory.tuple("State$5")); + x22_upper.add(factory.tuple("State$6")); + x22_upper.add(factory.tuple("State$7")); + x22_upper.add(factory.tuple("State$8")); + x22_upper.add(factory.tuple("State$9")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$9"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("priority$0")); + x24_upper.add(factory.tuple("priority$1")); + x24_upper.add(factory.tuple("priority$2")); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(1); + x25_upper.add(factory.tuple("State$0")); + x25_upper.add(factory.tuple("State$1")); + x25_upper.add(factory.tuple("State$2")); + x25_upper.add(factory.tuple("State$3")); + x25_upper.add(factory.tuple("State$4")); + x25_upper.add(factory.tuple("State$5")); + x25_upper.add(factory.tuple("State$6")); + x25_upper.add(factory.tuple("State$7")); + x25_upper.add(factory.tuple("State$8")); + x25_upper.add(factory.tuple("State$9")); + bounds.bound(x25, x25_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x28=x8.intersection(x9); + Formula x27=x28.no(); + Expression x31=x8.union(x9); + Expression x30=x31.intersection(x10); + Formula x29=x30.no(); + Expression x34=x31.union(x10); + Expression x33=x34.intersection(x11); + Formula x32=x33.no(); + Expression x37=x34.union(x11); + Expression x36=x37.intersection(x12); + Formula x35=x36.no(); + Variable x40=Variable.unary("Safety_this"); + Decls x39=x40.oneOf(x13); + Expression x42=x40.join(x16); + Expression x44=x37.union(x12); + Expression x43=x6.product(x44); + Formula x41=x42.in(x43); + Formula x38=x41.forAll(x39); + Expression x47=x16.join(Expression.UNIV); + Expression x46=x47.join(Expression.UNIV); + Formula x45=x46.in(x13); + Variable x51=Variable.unary("Safety_this"); + Decls x50=x51.oneOf(x13); + Expression x53=x51.join(x17); + Expression x54=x6.product(x7); + Formula x52=x53.in(x54); + Formula x49=x52.forAll(x50); + Expression x57=x17.join(Expression.UNIV); + Expression x56=x57.join(Expression.UNIV); + Formula x55=x56.in(x13); + Variable x60=Variable.unary("Safety_this"); + Decls x59=x60.oneOf(x13); + Expression x62=x60.join(x18); + Expression x63=x7.product(x6); + Formula x61=x62.in(x63); + Formula x58=x61.forAll(x59); + Expression x66=x18.join(Expression.UNIV); + Expression x65=x66.join(Expression.UNIV); + Formula x64=x65.in(x13); + Variable x69=Variable.unary("Safety_this"); + Decls x68=x69.oneOf(x13); + Expression x71=x69.join(x19); + Expression x72=x6.product(x7); + Formula x70=x71.in(x72); + Formula x67=x70.forAll(x68); + Expression x75=x19.join(Expression.UNIV); + Expression x74=x75.join(Expression.UNIV); + Formula x73=x74.in(x13); + Expression x78=x14.product(x20); + Expression x77=x14.join(x78); + Formula x76=x77.in(x7); + Expression x81=x14.product(x21); + Expression x80=x14.join(x81); + Expression x82=x7.product(x7); + Formula x79=x80.in(x82); + Formula x83=x21.totalOrder(x7,x20,x24); + Expression x86=x15.product(x22); + Expression x85=x15.join(x86); + Formula x84=x85.in(x13); + Expression x89=x15.product(x23); + Expression x88=x15.join(x89); + Expression x90=x13.product(x13); + Formula x87=x88.in(x90); + Formula x91=x23.totalOrder(x13,x22,x25); + IntExpression x93=x7.count(); + IntExpression x95=x6.count(); + IntExpression x96=IntConstant.constant(1); + IntExpression x94=x95.plus(x96); + Formula x92=x93.eq(x94); + Variable x101=Variable.unary("Safety_i"); + Decls x100=x101.oneOf(x6); + Expression x105=x22.join(x16); + Expression x104=x101.join(x105); + Formula x103=x104.eq(x8); + Expression x108=x22.join(x17); + Expression x107=x101.join(x108); + Formula x106=x107.eq(x20); + Formula x102=x103.and(x106); + Formula x99=x102.forAll(x100); + Expression x110=x22.join(x18); + Formula x109=x110.no(); + Formula x98=x99.and(x109); + Expression x112=x22.join(x19); + Formula x111=x112.no(); + Formula x97=x98.and(x111); + Variable x115=Variable.unary("Safety_pre"); + Expression x118=x23.join(x13); + Expression x117=x13.difference(x118); + Expression x116=x13.difference(x117); + Decls x114=x115.oneOf(x116); + Variable x122=Variable.unary("Safety_i"); + Decls x121=x122.oneOf(x6); + Expression x130=x115.join(x16); + Expression x129=x122.join(x130); + Formula x128=x129.eq(x8); + Expression x136=x115.join(x23); + Expression x135=x136.join(x19); + Expression x134=x122.join(x135); + Expression x137=x20.join(x21); + Formula x133=x134.eq(x137); + Expression x140=x136.join(x17); + Expression x139=x122.join(x140); + Expression x142=x115.join(x17); + Expression x141=x122.join(x142); + Formula x138=x139.eq(x141); + Formula x132=x133.and(x138); + Expression x144=x136.join(x18); + Expression x145=x115.join(x18); + Formula x143=x144.eq(x145); + Formula x131=x132.and(x143); + Formula x127=x128.and(x131); + Expression x148=x136.join(x16); + Expression x147=x122.join(x148); + Formula x146=x147.eq(x9); + Formula x126=x127.and(x146); + Expression x155=x115.join(x16); + Expression x154=x122.join(x155); + Formula x153=x154.eq(x9); + Expression x160=x136.join(x19); + Expression x159=x122.join(x160); + Expression x162=x115.join(x19); + Expression x161=x122.join(x162); + Formula x158=x159.eq(x161); + Expression x165=x136.join(x16); + Expression x164=x122.join(x165); + Formula x163=x164.eq(x10); + Formula x157=x158.and(x163); + Expression x167=x136.join(x18); + Expression x168=x115.join(x18); + Formula x166=x167.eq(x168); + Formula x156=x157.and(x166); + Formula x152=x153.and(x156); + Expression x171=x136.join(x17); + Expression x170=x122.join(x171); + Expression x173=x115.join(x19); + Expression x172=x122.join(x173); + Formula x169=x170.eq(x172); + Formula x151=x152.and(x169); + Expression x179=x115.join(x16); + Expression x178=x122.join(x179); + Formula x177=x178.eq(x11); + Variable x182=Variable.unary("L3TransPre_k"); + Expression x183=x6.difference(x122); + Decls x181=x182.oneOf(x183); + Expression x187=x115.join(x17); + Expression x186=x182.join(x187); + Expression x190=x115.join(x19); + Expression x189=x122.join(x190); + Expression x192=x21.transpose(); + Expression x191=x192.closure(); + Expression x188=x189.join(x191); + Formula x185=x186.in(x188); + Expression x197=x115.join(x19); + Expression x196=x122.join(x197); + Expression x198=x115.join(x18); + Expression x195=x196.join(x198); + Formula x194=x195.eq(x122); + Formula x193=x194.not(); + Formula x184=x185.or(x193); + Formula x180=x184.forAll(x181); + Formula x176=x177.and(x180); + Expression x203=x136.join(x19); + Expression x202=x122.join(x203); + Expression x206=x115.join(x19); + Expression x205=x122.join(x206); + Expression x204=x205.join(x21); + Formula x201=x202.eq(x204); + Expression x209=x136.join(x17); + Expression x208=x122.join(x209); + Expression x211=x115.join(x17); + Expression x210=x122.join(x211); + Formula x207=x208.eq(x210); + Formula x200=x201.and(x207); + Expression x213=x136.join(x18); + Expression x214=x115.join(x18); + Formula x212=x213.eq(x214); + Formula x199=x200.and(x212); + Formula x175=x176.and(x199); + Expression x219=x136.join(x19); + Expression x218=x122.join(x219); + Expression x222=x21.join(x7); + Expression x221=x7.difference(x222); + Expression x224=x21.transpose(); + Expression x223=x224.closure(); + Expression x220=x221.join(x223); + Formula x217=x218.in(x220); + Expression x227=x136.join(x16); + Expression x226=x122.join(x227); + Formula x225=x226.eq(x9); + Formula x216=x217.implies(x225); + Formula x229=x217.not(); + Expression x232=x136.join(x16); + Expression x231=x122.join(x232); + Formula x230=x231.eq(x12); + Formula x228=x229.implies(x230); + Formula x215=x216.and(x228); + Formula x174=x175.and(x215); + Formula x150=x151.or(x174); + Expression x237=x115.join(x16); + Expression x236=x122.join(x237); + Formula x235=x236.eq(x12); + Expression x242=x136.join(x16); + Expression x241=x122.join(x242); + Formula x240=x241.eq(x8); + Expression x245=x136.join(x19); + Expression x244=x122.join(x245); + Expression x247=x115.join(x19); + Expression x246=x122.join(x247); + Formula x243=x244.eq(x246); + Formula x239=x240.and(x243); + Expression x249=x136.join(x18); + Expression x250=x115.join(x18); + Formula x248=x249.eq(x250); + Formula x238=x239.and(x248); + Formula x234=x235.and(x238); + Expression x253=x136.join(x17); + Expression x252=x122.join(x253); + Formula x251=x252.eq(x20); + Formula x233=x234.and(x251); + Formula x149=x150.or(x233); + Formula x125=x126.or(x149); + Expression x258=x115.join(x16); + Expression x257=x122.join(x258); + Formula x256=x257.eq(x10); + Expression x263=x136.join(x19); + Expression x262=x122.join(x263); + Expression x265=x115.join(x19); + Expression x264=x122.join(x265); + Formula x261=x262.eq(x264); + Expression x268=x136.join(x16); + Expression x267=x122.join(x268); + Formula x266=x267.eq(x11); + Formula x260=x261.and(x266); + Expression x272=x136.join(x19); + Expression x271=x122.join(x272); + Expression x273=x136.join(x18); + Expression x270=x271.join(x273); + Formula x269=x270.eq(x122); + Formula x259=x260.and(x269); + Formula x255=x256.and(x259); + Expression x277=x136.join(x17); + Expression x276=x122.join(x277); + Expression x279=x115.join(x17); + Expression x278=x122.join(x279); + Formula x275=x276.eq(x278); + Variable x282=Variable.unary("L2Trans_j"); + Expression x285=x136.join(x19); + Expression x284=x122.join(x285); + Expression x283=x7.difference(x284); + Decls x281=x282.oneOf(x283); + Expression x288=x136.join(x18); + Expression x287=x282.join(x288); + Expression x290=x115.join(x18); + Expression x289=x282.join(x290); + Formula x286=x287.eq(x289); + Formula x280=x286.forAll(x281); + Formula x274=x275.and(x280); + Formula x254=x255.and(x274); + Formula x124=x125.or(x254); + Expression x295=x136.join(x16); + Expression x294=x122.join(x295); + Expression x297=x115.join(x16); + Expression x296=x122.join(x297); + Formula x293=x294.eq(x296); + Expression x300=x136.join(x17); + Expression x299=x122.join(x300); + Expression x302=x115.join(x17); + Expression x301=x122.join(x302); + Formula x298=x299.eq(x301); + Formula x292=x293.and(x298); + Expression x305=x136.join(x19); + Expression x304=x122.join(x305); + Expression x307=x115.join(x19); + Expression x306=x122.join(x307); + Formula x303=x304.eq(x306); + Formula x291=x292.and(x303); + Formula x123=x124.or(x291); + Formula x120=x123.forAll(x121); + Variable x312=Variable.unary("Safety_i"); + Decls x311=x312.oneOf(x6); + Expression x317=x136.join(x16); + Expression x316=x312.join(x317); + Expression x319=x115.join(x16); + Expression x318=x312.join(x319); + Formula x315=x316.eq(x318); + Expression x322=x136.join(x17); + Expression x321=x312.join(x322); + Expression x324=x115.join(x17); + Expression x323=x312.join(x324); + Formula x320=x321.eq(x323); + Formula x314=x315.and(x320); + Expression x327=x136.join(x19); + Expression x326=x312.join(x327); + Expression x329=x115.join(x19); + Expression x328=x312.join(x329); + Formula x325=x326.eq(x328); + Formula x313=x314.and(x325); + Formula x310=x313.forAll(x311); + Formula x309=x310.not(); + Variable x333=Variable.unary("Safety_i"); + Decls x332=x333.oneOf(x6); + Expression x339=x115.join(x16); + Expression x338=x333.join(x339); + Formula x337=x338.eq(x8); + Expression x344=x115.join(x16); + Expression x343=x333.join(x344); + Formula x342=x343.eq(x9); + Expression x348=x115.join(x16); + Expression x347=x333.join(x348); + Formula x346=x347.eq(x11); + Variable x351=Variable.unary("L3TransPre_k"); + Expression x352=x6.difference(x333); + Decls x350=x351.oneOf(x352); + Expression x356=x115.join(x17); + Expression x355=x351.join(x356); + Expression x359=x115.join(x19); + Expression x358=x333.join(x359); + Expression x361=x21.transpose(); + Expression x360=x361.closure(); + Expression x357=x358.join(x360); + Formula x354=x355.in(x357); + Expression x366=x115.join(x19); + Expression x365=x333.join(x366); + Expression x367=x115.join(x18); + Expression x364=x365.join(x367); + Formula x363=x364.eq(x333); + Formula x362=x363.not(); + Formula x353=x354.or(x362); + Formula x349=x353.forAll(x350); + Formula x345=x346.and(x349); + Formula x341=x342.or(x345); + Expression x370=x115.join(x16); + Expression x369=x333.join(x370); + Formula x368=x369.eq(x12); + Formula x340=x341.or(x368); + Formula x336=x337.or(x340); + Expression x373=x115.join(x16); + Expression x372=x333.join(x373); + Formula x371=x372.eq(x10); + Formula x335=x336.or(x371); + Formula x334=x335.not(); + Formula x331=x334.forAll(x332); + Expression x375=x136.join(x18); + Expression x376=x115.join(x18); + Formula x374=x375.eq(x376); + Formula x330=x331.and(x374); + Formula x308=x309.or(x330); + Formula x119=x120.and(x308); + Formula x113=x119.forAll(x114); + Variable x381=Variable.unary("Safety_i1"); + Decls x380=x381.oneOf(x6); + Variable x383=Variable.unary("Safety_i2"); + Decls x382=x383.oneOf(x6); + Variable x385=Variable.unary("Safety_s"); + Decls x384=x385.oneOf(x13); + Decls x379=x380.and(x382).and(x384); + Formula x389=x381.eq(x383); + Formula x388=x389.not(); + Formula x387=x388.not(); + Expression x394=x385.join(x16); + Expression x393=x381.join(x394); + Formula x392=x393.eq(x12); + Expression x397=x385.join(x16); + Expression x396=x383.join(x397); + Formula x395=x396.eq(x12); + Formula x391=x392.and(x395); + Formula x390=x391.not(); + Formula x386=x387.or(x390); + Formula x378=x386.forAll(x379); + Formula x377=x378.not(); + Formula x398=x0.eq(x0); + Formula x399=x1.eq(x1); + Formula x400=x2.eq(x2); + Formula x401=x3.eq(x3); + Formula x402=x4.eq(x4); + Formula x403=x5.eq(x5); + Formula x404=x6.eq(x6); + Formula x405=x7.eq(x7); + Formula x406=x8.eq(x8); + Formula x407=x9.eq(x9); + Formula x408=x10.eq(x10); + Formula x409=x11.eq(x11); + Formula x410=x12.eq(x12); + Formula x411=x13.eq(x13); + Formula x412=x14.eq(x14); + Formula x413=x15.eq(x15); + Formula x414=x16.eq(x16); + Formula x415=x17.eq(x17); + Formula x416=x18.eq(x18); + Formula x417=x19.eq(x19); + Formula x418=x20.eq(x20); + Formula x419=x21.eq(x21); + Formula x420=x22.eq(x22); + Formula x421=x23.eq(x23); + Formula x422=x24.eq(x24); + Formula x423=x25.eq(x25); + Formula x26=Formula.compose(FormulaOperator.AND, x27, x29, x32, x35, x38, x45, x49, x55, x58, x64, x67, x73, x76, x79, x83, x84, x87, x91, x92, x97, x113, x377, x398, x399, x400, x401, x402, x403, x404, x405, x406, x407, x408, x409, x410, x411, x412, x413, x414, x415, x416, x417, x418, x419, x420, x421, x422, x423); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x26,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/petersonTwoRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/petersonTwoRun.java new file mode 100644 index 0000000..a7099ac --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/mutex/petersonTwoRun.java @@ -0,0 +1,1521 @@ +package kodkod.examples.models.algorithm.mutex; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + + +@ExampleMetadata( + Name = "peterson", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 4, + NaryRelations = 0, + HierarchicalTypes = 5, + NestedRelationalJoins = 41, + TransitiveClosure = 3, + NestedQuantifiers = 1, + SetCardinality = 2, + Additions = 0, + Subtractions = 0, + Comparison = 46, + OrderedRelations = 2, + Constraints = 50 +) + + +public final class petersonTwoRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/pid"); + Relation x7 = Relation.unary("this/priority"); + Relation x8 = Relation.unary("this/L0"); + Relation x9 = Relation.unary("this/L1"); + Relation x10 = Relation.unary("this/L2"); + Relation x11 = Relation.unary("this/L3"); + Relation x12 = Relation.unary("this/L4"); + Relation x13 = Relation.unary("this/State"); + Relation x14 = Relation.unary("po/Ord"); + Relation x15 = Relation.unary("so/Ord"); + Relation x16 = Relation.nary("this/State.P", 3); + Relation x17 = Relation.nary("this/State.Q", 3); + Relation x18 = Relation.nary("this/State.turn", 3); + Relation x19 = Relation.nary("this/State.localj", 3); + Relation x20 = Relation.unary("po/Ord.First"); + Relation x21 = Relation.nary("po/Ord.Next", 2); + Relation x22 = Relation.unary("so/Ord.First"); + Relation x23 = Relation.nary("so/Ord.Next", 2); + Relation x24 = Relation.unary(""); + Relation x25 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "L0$0", + "L1$0", "L2$0", "L3$0", "L4$0", "State$0", "State$1", + "State$10", "State$11", "State$12", "State$2", "State$3", "State$4", + "State$5", "State$6", "State$7", "State$8", "State$9", "pid$0", + "pid$1", "pid$2", "po/Ord$0", "priority$0", "priority$1", "priority$2", + "priority$3", "so/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + x4_upper.add(factory.tuple("5")); + x4_upper.add(factory.tuple("6")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("pid$0")); + x6_upper.add(factory.tuple("pid$1")); + x6_upper.add(factory.tuple("pid$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("priority$0")); + x7_upper.add(factory.tuple("priority$1")); + x7_upper.add(factory.tuple("priority$2")); + x7_upper.add(factory.tuple("priority$3")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("L0$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("L1$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("L2$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("L3$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("L4$0")); + bounds.boundExactly(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("State$0")); + x13_upper.add(factory.tuple("State$1")); + x13_upper.add(factory.tuple("State$2")); + x13_upper.add(factory.tuple("State$3")); + x13_upper.add(factory.tuple("State$4")); + x13_upper.add(factory.tuple("State$5")); + x13_upper.add(factory.tuple("State$6")); + x13_upper.add(factory.tuple("State$7")); + x13_upper.add(factory.tuple("State$8")); + x13_upper.add(factory.tuple("State$9")); + x13_upper.add(factory.tuple("State$10")); + x13_upper.add(factory.tuple("State$11")); + x13_upper.add(factory.tuple("State$12")); + bounds.boundExactly(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("po/Ord$0")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(3); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$2")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$2")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$2")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$2")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("pid$2")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$2")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$2")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$2")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$2")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("pid$2")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$2")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$2")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$2")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$2")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("pid$2")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$2")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$2")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$2")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$2")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("pid$2")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$2")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$2")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$2")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$2")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("pid$2")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$2")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$2")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$2")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$2")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("pid$2")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$2")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$2")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$2")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$2")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("pid$2")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$2")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$2")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$2")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$2")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("pid$2")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$2")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$2")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$2")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$2")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$8").product(factory.tuple("pid$2")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$2")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$2")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$2")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$2")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$9").product(factory.tuple("pid$2")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$2")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$2")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$2")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$2")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$10").product(factory.tuple("pid$2")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$2")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$2")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$2")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$2")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$11").product(factory.tuple("pid$2")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$0")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$0")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$0")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$0")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$0")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$1")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$1")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$1")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$1")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$1")).product(factory.tuple("L4$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$2")).product(factory.tuple("L0$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$2")).product(factory.tuple("L1$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$2")).product(factory.tuple("L2$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$2")).product(factory.tuple("L3$0"))); + x16_upper.add(factory.tuple("State$12").product(factory.tuple("pid$2")).product(factory.tuple("L4$0"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(3); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$12").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$12").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$12").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$12").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$12").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$12").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$12").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$12").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x17_upper.add(factory.tuple("State$12").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x17_upper.add(factory.tuple("State$12").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x17_upper.add(factory.tuple("State$12").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x17_upper.add(factory.tuple("State$12").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$0")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$1")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$2")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$3")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$3")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("priority$3")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$0")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$1")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$2")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$3")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$3")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("priority$3")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$0")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$1")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$2")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$3")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$3")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("priority$3")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$0")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$1")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$2")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$3")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$3")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("priority$3")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$0")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$1")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$2")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$3")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$3")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("priority$3")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$0")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$1")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$2")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$3")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$3")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("priority$3")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$0")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$1")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$2")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$3")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$3")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("priority$3")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$0")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$1")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$2")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$3")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$3")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("priority$3")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$0")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$1")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$2")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$3")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$3")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("priority$3")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$0")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$1")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$2")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$3")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$3")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("priority$3")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("priority$0")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("priority$1")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("priority$2")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("priority$3")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("priority$3")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("priority$3")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("priority$0")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("priority$1")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("priority$2")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("priority$3")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("priority$3")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("priority$3")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$12").product(factory.tuple("priority$0")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$12").product(factory.tuple("priority$0")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$12").product(factory.tuple("priority$0")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$12").product(factory.tuple("priority$1")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$12").product(factory.tuple("priority$1")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$12").product(factory.tuple("priority$1")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$12").product(factory.tuple("priority$2")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$12").product(factory.tuple("priority$2")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$12").product(factory.tuple("priority$2")).product(factory.tuple("pid$2"))); + x18_upper.add(factory.tuple("State$12").product(factory.tuple("priority$3")).product(factory.tuple("pid$0"))); + x18_upper.add(factory.tuple("State$12").product(factory.tuple("priority$3")).product(factory.tuple("pid$1"))); + x18_upper.add(factory.tuple("State$12").product(factory.tuple("priority$3")).product(factory.tuple("pid$2"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(3); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$12").product(factory.tuple("pid$0")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$12").product(factory.tuple("pid$0")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$12").product(factory.tuple("pid$0")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$12").product(factory.tuple("pid$0")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$12").product(factory.tuple("pid$1")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$12").product(factory.tuple("pid$1")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$12").product(factory.tuple("pid$1")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$12").product(factory.tuple("pid$1")).product(factory.tuple("priority$3"))); + x19_upper.add(factory.tuple("State$12").product(factory.tuple("pid$2")).product(factory.tuple("priority$0"))); + x19_upper.add(factory.tuple("State$12").product(factory.tuple("pid$2")).product(factory.tuple("priority$1"))); + x19_upper.add(factory.tuple("State$12").product(factory.tuple("pid$2")).product(factory.tuple("priority$2"))); + x19_upper.add(factory.tuple("State$12").product(factory.tuple("pid$2")).product(factory.tuple("priority$3"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(1); + x20_upper.add(factory.tuple("priority$0")); + x20_upper.add(factory.tuple("priority$1")); + x20_upper.add(factory.tuple("priority$2")); + x20_upper.add(factory.tuple("priority$3")); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("priority$0").product(factory.tuple("priority$0"))); + x21_upper.add(factory.tuple("priority$0").product(factory.tuple("priority$1"))); + x21_upper.add(factory.tuple("priority$0").product(factory.tuple("priority$2"))); + x21_upper.add(factory.tuple("priority$0").product(factory.tuple("priority$3"))); + x21_upper.add(factory.tuple("priority$1").product(factory.tuple("priority$0"))); + x21_upper.add(factory.tuple("priority$1").product(factory.tuple("priority$1"))); + x21_upper.add(factory.tuple("priority$1").product(factory.tuple("priority$2"))); + x21_upper.add(factory.tuple("priority$1").product(factory.tuple("priority$3"))); + x21_upper.add(factory.tuple("priority$2").product(factory.tuple("priority$0"))); + x21_upper.add(factory.tuple("priority$2").product(factory.tuple("priority$1"))); + x21_upper.add(factory.tuple("priority$2").product(factory.tuple("priority$2"))); + x21_upper.add(factory.tuple("priority$2").product(factory.tuple("priority$3"))); + x21_upper.add(factory.tuple("priority$3").product(factory.tuple("priority$0"))); + x21_upper.add(factory.tuple("priority$3").product(factory.tuple("priority$1"))); + x21_upper.add(factory.tuple("priority$3").product(factory.tuple("priority$2"))); + x21_upper.add(factory.tuple("priority$3").product(factory.tuple("priority$3"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("State$0")); + x22_upper.add(factory.tuple("State$1")); + x22_upper.add(factory.tuple("State$2")); + x22_upper.add(factory.tuple("State$3")); + x22_upper.add(factory.tuple("State$4")); + x22_upper.add(factory.tuple("State$5")); + x22_upper.add(factory.tuple("State$6")); + x22_upper.add(factory.tuple("State$7")); + x22_upper.add(factory.tuple("State$8")); + x22_upper.add(factory.tuple("State$9")); + x22_upper.add(factory.tuple("State$10")); + x22_upper.add(factory.tuple("State$11")); + x22_upper.add(factory.tuple("State$12")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$12"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$12"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$12"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$12"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$12"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$12"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$12"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$12"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$12"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$12"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$12"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$12"))); + x23_upper.add(factory.tuple("State$12").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$12").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$12").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$12").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$12").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$12").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$12").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$12").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$12").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$12").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$12").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$12").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$12").product(factory.tuple("State$12"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("priority$0")); + x24_upper.add(factory.tuple("priority$1")); + x24_upper.add(factory.tuple("priority$2")); + x24_upper.add(factory.tuple("priority$3")); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(1); + x25_upper.add(factory.tuple("State$0")); + x25_upper.add(factory.tuple("State$1")); + x25_upper.add(factory.tuple("State$2")); + x25_upper.add(factory.tuple("State$3")); + x25_upper.add(factory.tuple("State$4")); + x25_upper.add(factory.tuple("State$5")); + x25_upper.add(factory.tuple("State$6")); + x25_upper.add(factory.tuple("State$7")); + x25_upper.add(factory.tuple("State$8")); + x25_upper.add(factory.tuple("State$9")); + x25_upper.add(factory.tuple("State$10")); + x25_upper.add(factory.tuple("State$11")); + x25_upper.add(factory.tuple("State$12")); + bounds.bound(x25, x25_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x28=x8.intersection(x9); + Formula x27=x28.no(); + Expression x31=x8.union(x9); + Expression x30=x31.intersection(x10); + Formula x29=x30.no(); + Expression x34=x31.union(x10); + Expression x33=x34.intersection(x11); + Formula x32=x33.no(); + Expression x37=x34.union(x11); + Expression x36=x37.intersection(x12); + Formula x35=x36.no(); + Variable x40=Variable.unary("TwoRun_this"); + Decls x39=x40.oneOf(x13); + Expression x42=x40.join(x16); + Expression x44=x37.union(x12); + Expression x43=x6.product(x44); + Formula x41=x42.in(x43); + Formula x38=x41.forAll(x39); + Expression x47=x16.join(Expression.UNIV); + Expression x46=x47.join(Expression.UNIV); + Formula x45=x46.in(x13); + Variable x51=Variable.unary("TwoRun_this"); + Decls x50=x51.oneOf(x13); + Expression x53=x51.join(x17); + Expression x54=x6.product(x7); + Formula x52=x53.in(x54); + Formula x49=x52.forAll(x50); + Expression x57=x17.join(Expression.UNIV); + Expression x56=x57.join(Expression.UNIV); + Formula x55=x56.in(x13); + Variable x60=Variable.unary("TwoRun_this"); + Decls x59=x60.oneOf(x13); + Expression x62=x60.join(x18); + Expression x63=x7.product(x6); + Formula x61=x62.in(x63); + Formula x58=x61.forAll(x59); + Expression x66=x18.join(Expression.UNIV); + Expression x65=x66.join(Expression.UNIV); + Formula x64=x65.in(x13); + Variable x69=Variable.unary("TwoRun_this"); + Decls x68=x69.oneOf(x13); + Expression x71=x69.join(x19); + Expression x72=x6.product(x7); + Formula x70=x71.in(x72); + Formula x67=x70.forAll(x68); + Expression x75=x19.join(Expression.UNIV); + Expression x74=x75.join(Expression.UNIV); + Formula x73=x74.in(x13); + Expression x78=x14.product(x20); + Expression x77=x14.join(x78); + Formula x76=x77.in(x7); + Expression x81=x14.product(x21); + Expression x80=x14.join(x81); + Expression x82=x7.product(x7); + Formula x79=x80.in(x82); + Formula x83=x21.totalOrder(x7,x20,x24); + Expression x86=x15.product(x22); + Expression x85=x15.join(x86); + Formula x84=x85.in(x13); + Expression x89=x15.product(x23); + Expression x88=x15.join(x89); + Expression x90=x13.product(x13); + Formula x87=x88.in(x90); + Formula x91=x23.totalOrder(x13,x22,x25); + IntExpression x93=x7.count(); + IntExpression x95=x6.count(); + IntExpression x96=IntConstant.constant(1); + IntExpression x94=x95.plus(x96); + Formula x92=x93.eq(x94); + Variable x101=Variable.unary("TwoRun_i"); + Decls x100=x101.oneOf(x6); + Expression x105=x22.join(x16); + Expression x104=x101.join(x105); + Formula x103=x104.eq(x8); + Expression x108=x22.join(x17); + Expression x107=x101.join(x108); + Formula x106=x107.eq(x20); + Formula x102=x103.and(x106); + Formula x99=x102.forAll(x100); + Expression x110=x22.join(x18); + Formula x109=x110.no(); + Formula x98=x99.and(x109); + Expression x112=x22.join(x19); + Formula x111=x112.no(); + Formula x97=x98.and(x111); + Variable x115=Variable.unary("TwoRun_pre"); + Expression x118=x23.join(x13); + Expression x117=x13.difference(x118); + Expression x116=x13.difference(x117); + Decls x114=x115.oneOf(x116); + Variable x122=Variable.unary("TwoRun_i"); + Decls x121=x122.oneOf(x6); + Expression x130=x115.join(x16); + Expression x129=x122.join(x130); + Formula x128=x129.eq(x8); + Expression x136=x115.join(x23); + Expression x135=x136.join(x19); + Expression x134=x122.join(x135); + Expression x137=x20.join(x21); + Formula x133=x134.eq(x137); + Expression x140=x136.join(x17); + Expression x139=x122.join(x140); + Expression x142=x115.join(x17); + Expression x141=x122.join(x142); + Formula x138=x139.eq(x141); + Formula x132=x133.and(x138); + Expression x144=x136.join(x18); + Expression x145=x115.join(x18); + Formula x143=x144.eq(x145); + Formula x131=x132.and(x143); + Formula x127=x128.and(x131); + Expression x148=x136.join(x16); + Expression x147=x122.join(x148); + Formula x146=x147.eq(x9); + Formula x126=x127.and(x146); + Expression x155=x115.join(x16); + Expression x154=x122.join(x155); + Formula x153=x154.eq(x9); + Expression x160=x136.join(x19); + Expression x159=x122.join(x160); + Expression x162=x115.join(x19); + Expression x161=x122.join(x162); + Formula x158=x159.eq(x161); + Expression x165=x136.join(x16); + Expression x164=x122.join(x165); + Formula x163=x164.eq(x10); + Formula x157=x158.and(x163); + Expression x167=x136.join(x18); + Expression x168=x115.join(x18); + Formula x166=x167.eq(x168); + Formula x156=x157.and(x166); + Formula x152=x153.and(x156); + Expression x171=x136.join(x17); + Expression x170=x122.join(x171); + Expression x173=x115.join(x19); + Expression x172=x122.join(x173); + Formula x169=x170.eq(x172); + Formula x151=x152.and(x169); + Expression x179=x115.join(x16); + Expression x178=x122.join(x179); + Formula x177=x178.eq(x11); + Variable x182=Variable.unary("L3TransPre_k"); + Expression x183=x6.difference(x122); + Decls x181=x182.oneOf(x183); + Expression x187=x115.join(x17); + Expression x186=x182.join(x187); + Expression x190=x115.join(x19); + Expression x189=x122.join(x190); + Expression x192=x21.transpose(); + Expression x191=x192.closure(); + Expression x188=x189.join(x191); + Formula x185=x186.in(x188); + Expression x197=x115.join(x19); + Expression x196=x122.join(x197); + Expression x198=x115.join(x18); + Expression x195=x196.join(x198); + Formula x194=x195.eq(x122); + Formula x193=x194.not(); + Formula x184=x185.or(x193); + Formula x180=x184.forAll(x181); + Formula x176=x177.and(x180); + Expression x203=x136.join(x19); + Expression x202=x122.join(x203); + Expression x206=x115.join(x19); + Expression x205=x122.join(x206); + Expression x204=x205.join(x21); + Formula x201=x202.eq(x204); + Expression x209=x136.join(x17); + Expression x208=x122.join(x209); + Expression x211=x115.join(x17); + Expression x210=x122.join(x211); + Formula x207=x208.eq(x210); + Formula x200=x201.and(x207); + Expression x213=x136.join(x18); + Expression x214=x115.join(x18); + Formula x212=x213.eq(x214); + Formula x199=x200.and(x212); + Formula x175=x176.and(x199); + Expression x219=x136.join(x19); + Expression x218=x122.join(x219); + Expression x222=x21.join(x7); + Expression x221=x7.difference(x222); + Expression x224=x21.transpose(); + Expression x223=x224.closure(); + Expression x220=x221.join(x223); + Formula x217=x218.in(x220); + Expression x227=x136.join(x16); + Expression x226=x122.join(x227); + Formula x225=x226.eq(x9); + Formula x216=x217.implies(x225); + Formula x229=x217.not(); + Expression x232=x136.join(x16); + Expression x231=x122.join(x232); + Formula x230=x231.eq(x12); + Formula x228=x229.implies(x230); + Formula x215=x216.and(x228); + Formula x174=x175.and(x215); + Formula x150=x151.or(x174); + Expression x237=x115.join(x16); + Expression x236=x122.join(x237); + Formula x235=x236.eq(x12); + Expression x242=x136.join(x16); + Expression x241=x122.join(x242); + Formula x240=x241.eq(x8); + Expression x245=x136.join(x19); + Expression x244=x122.join(x245); + Expression x247=x115.join(x19); + Expression x246=x122.join(x247); + Formula x243=x244.eq(x246); + Formula x239=x240.and(x243); + Expression x249=x136.join(x18); + Expression x250=x115.join(x18); + Formula x248=x249.eq(x250); + Formula x238=x239.and(x248); + Formula x234=x235.and(x238); + Expression x253=x136.join(x17); + Expression x252=x122.join(x253); + Formula x251=x252.eq(x20); + Formula x233=x234.and(x251); + Formula x149=x150.or(x233); + Formula x125=x126.or(x149); + Expression x258=x115.join(x16); + Expression x257=x122.join(x258); + Formula x256=x257.eq(x10); + Expression x263=x136.join(x19); + Expression x262=x122.join(x263); + Expression x265=x115.join(x19); + Expression x264=x122.join(x265); + Formula x261=x262.eq(x264); + Expression x268=x136.join(x16); + Expression x267=x122.join(x268); + Formula x266=x267.eq(x11); + Formula x260=x261.and(x266); + Expression x272=x136.join(x19); + Expression x271=x122.join(x272); + Expression x273=x136.join(x18); + Expression x270=x271.join(x273); + Formula x269=x270.eq(x122); + Formula x259=x260.and(x269); + Formula x255=x256.and(x259); + Expression x277=x136.join(x17); + Expression x276=x122.join(x277); + Expression x279=x115.join(x17); + Expression x278=x122.join(x279); + Formula x275=x276.eq(x278); + Variable x282=Variable.unary("L2Trans_j"); + Expression x285=x136.join(x19); + Expression x284=x122.join(x285); + Expression x283=x7.difference(x284); + Decls x281=x282.oneOf(x283); + Expression x288=x136.join(x18); + Expression x287=x282.join(x288); + Expression x290=x115.join(x18); + Expression x289=x282.join(x290); + Formula x286=x287.eq(x289); + Formula x280=x286.forAll(x281); + Formula x274=x275.and(x280); + Formula x254=x255.and(x274); + Formula x124=x125.or(x254); + Expression x295=x136.join(x16); + Expression x294=x122.join(x295); + Expression x297=x115.join(x16); + Expression x296=x122.join(x297); + Formula x293=x294.eq(x296); + Expression x300=x136.join(x17); + Expression x299=x122.join(x300); + Expression x302=x115.join(x17); + Expression x301=x122.join(x302); + Formula x298=x299.eq(x301); + Formula x292=x293.and(x298); + Expression x305=x136.join(x19); + Expression x304=x122.join(x305); + Expression x307=x115.join(x19); + Expression x306=x122.join(x307); + Formula x303=x304.eq(x306); + Formula x291=x292.and(x303); + Formula x123=x124.or(x291); + Formula x120=x123.forAll(x121); + Variable x312=Variable.unary("TwoRun_i"); + Decls x311=x312.oneOf(x6); + Expression x317=x136.join(x16); + Expression x316=x312.join(x317); + Expression x319=x115.join(x16); + Expression x318=x312.join(x319); + Formula x315=x316.eq(x318); + Expression x322=x136.join(x17); + Expression x321=x312.join(x322); + Expression x324=x115.join(x17); + Expression x323=x312.join(x324); + Formula x320=x321.eq(x323); + Formula x314=x315.and(x320); + Expression x327=x136.join(x19); + Expression x326=x312.join(x327); + Expression x329=x115.join(x19); + Expression x328=x312.join(x329); + Formula x325=x326.eq(x328); + Formula x313=x314.and(x325); + Formula x310=x313.forAll(x311); + Formula x309=x310.not(); + Variable x333=Variable.unary("TwoRun_i"); + Decls x332=x333.oneOf(x6); + Expression x339=x115.join(x16); + Expression x338=x333.join(x339); + Formula x337=x338.eq(x8); + Expression x344=x115.join(x16); + Expression x343=x333.join(x344); + Formula x342=x343.eq(x9); + Expression x348=x115.join(x16); + Expression x347=x333.join(x348); + Formula x346=x347.eq(x11); + Variable x351=Variable.unary("L3TransPre_k"); + Expression x352=x6.difference(x333); + Decls x350=x351.oneOf(x352); + Expression x356=x115.join(x17); + Expression x355=x351.join(x356); + Expression x359=x115.join(x19); + Expression x358=x333.join(x359); + Expression x361=x21.transpose(); + Expression x360=x361.closure(); + Expression x357=x358.join(x360); + Formula x354=x355.in(x357); + Expression x366=x115.join(x19); + Expression x365=x333.join(x366); + Expression x367=x115.join(x18); + Expression x364=x365.join(x367); + Formula x363=x364.eq(x333); + Formula x362=x363.not(); + Formula x353=x354.or(x362); + Formula x349=x353.forAll(x350); + Formula x345=x346.and(x349); + Formula x341=x342.or(x345); + Expression x370=x115.join(x16); + Expression x369=x333.join(x370); + Formula x368=x369.eq(x12); + Formula x340=x341.or(x368); + Formula x336=x337.or(x340); + Expression x373=x115.join(x16); + Expression x372=x333.join(x373); + Formula x371=x372.eq(x10); + Formula x335=x336.or(x371); + Formula x334=x335.not(); + Formula x331=x334.forAll(x332); + Expression x375=x136.join(x18); + Expression x376=x115.join(x18); + Formula x374=x375.eq(x376); + Formula x330=x331.and(x374); + Formula x308=x309.or(x330); + Formula x119=x120.and(x308); + Formula x113=x119.forAll(x114); + Variable x380=Variable.unary("TwoRun_s1"); + Decls x379=x380.oneOf(x13); + Variable x382=Variable.unary("TwoRun_s2"); + Decls x381=x382.oneOf(x13); + Variable x384=Variable.unary("TwoRun_i1"); + Decls x383=x384.oneOf(x6); + Variable x386=Variable.unary("TwoRun_i2"); + Decls x385=x386.oneOf(x6); + Decls x378=x379.and(x381).and(x383).and(x385); + Formula x390=x380.eq(x382); + Formula x389=x390.not(); + Formula x393=x384.eq(x386); + Formula x392=x393.not(); + Expression x396=x382.join(x16); + Expression x395=x386.join(x396); + Formula x394=x395.eq(x12); + Formula x391=x392.and(x394); + Formula x388=x389.and(x391); + Expression x399=x380.join(x16); + Expression x398=x384.join(x399); + Formula x397=x398.eq(x12); + Formula x387=x388.and(x397); + Formula x377=x387.forSome(x378); + Formula x400=x0.eq(x0); + Formula x401=x1.eq(x1); + Formula x402=x2.eq(x2); + Formula x403=x3.eq(x3); + Formula x404=x4.eq(x4); + Formula x405=x5.eq(x5); + Formula x406=x6.eq(x6); + Formula x407=x7.eq(x7); + Formula x408=x8.eq(x8); + Formula x409=x9.eq(x9); + Formula x410=x10.eq(x10); + Formula x411=x11.eq(x11); + Formula x412=x12.eq(x12); + Formula x413=x13.eq(x13); + Formula x414=x14.eq(x14); + Formula x415=x15.eq(x15); + Formula x416=x16.eq(x16); + Formula x417=x17.eq(x17); + Formula x418=x18.eq(x18); + Formula x419=x19.eq(x19); + Formula x420=x20.eq(x20); + Formula x421=x21.eq(x21); + Formula x422=x22.eq(x22); + Formula x423=x23.eq(x23); + Formula x424=x24.eq(x24); + Formula x425=x25.eq(x25); + Formula x26=Formula.compose(FormulaOperator.AND, x27, x29, x32, x35, x38, x45, x49, x55, x58, x64, x67, x73, x76, x79, x83, x84, x87, x91, x92, x97, x113, x377, x400, x401, x402, x403, x404, x405, x406, x407, x408, x409, x410, x411, x412, x413, x414, x415, x416, x417, x418, x419, x420, x421, x422, x423, x424, x425); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x26,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/ringOrientation/stableOrientRingClosureCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/ringOrientation/stableOrientRingClosureCheck.java new file mode 100644 index 0000000..584c9d2 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/ringOrientation/stableOrientRingClosureCheck.java @@ -0,0 +1,671 @@ +package kodkod.examples.models.algorithm.ringOrientation; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "stable-orient-ring", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 6, + TernaryRelations = 4, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 2, + TransitiveClosure = 3, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 35, + OrderedRelations = 1, + Constraints = 40 +) + + +public final class stableOrientRingClosureCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Process"); + Relation x7 = Relation.unary("this/Tick"); + Relation x8 = Relation.unary("bool/True"); + Relation x9 = Relation.unary("bool/False"); + Relation x10 = Relation.unary("ord/Ord"); + Relation x11 = Relation.nary("this/Process.rightNeighbor", 2); + Relation x12 = Relation.nary("this/Process.AP1", 2); + Relation x13 = Relation.nary("this/Process.AP2", 2); + Relation x14 = Relation.nary("this/Tick.runs", 2); + Relation x15 = Relation.nary("this/Tick.dir", 3); + Relation x16 = Relation.nary("this/Tick.S", 3); + Relation x17 = Relation.nary("this/Tick.T", 3); + Relation x18 = Relation.nary("this/Tick.ring_", 3); + Relation x19 = Relation.unary("ord/Ord.First"); + Relation x20 = Relation.nary("ord/Ord.Next", 2); + Relation x21 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Process$0", + "Process$1", "Process$2", "Tick$0", "Tick$1", "bool/False$0", "bool/True$0", + "ord/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Process$0")); + x6_upper.add(factory.tuple("Process$1")); + x6_upper.add(factory.tuple("Process$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Tick$0")); + x7_upper.add(factory.tuple("Tick$1")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("bool/True$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("bool/False$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("ord/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1"))); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(3); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("bool/True$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("bool/False$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("bool/True$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("bool/False$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("bool/True$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("bool/False$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("bool/True$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("bool/False$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("bool/True$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("bool/False$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("bool/True$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("bool/False$0"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(3); + x16_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("bool/True$0"))); + x16_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("bool/False$0"))); + x16_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("bool/True$0"))); + x16_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("bool/False$0"))); + x16_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("bool/True$0"))); + x16_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("bool/False$0"))); + x16_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("bool/True$0"))); + x16_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("bool/False$0"))); + x16_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("bool/True$0"))); + x16_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("bool/False$0"))); + x16_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("bool/True$0"))); + x16_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("bool/False$0"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(3); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("bool/True$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("bool/False$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("bool/True$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("bool/False$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("bool/True$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("bool/False$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("bool/True$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("bool/False$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("bool/True$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("bool/False$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("bool/True$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("bool/False$0"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(1); + x19_upper.add(factory.tuple("Tick$0")); + x19_upper.add(factory.tuple("Tick$1")); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$0"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$1"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$0"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$1"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(1); + x21_upper.add(factory.tuple("Tick$0")); + x21_upper.add(factory.tuple("Tick$1")); + bounds.bound(x21, x21_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x24=x8.intersection(x9); + Formula x23=x24.no(); + Variable x27=Variable.unary("Closure_this"); + Decls x26=x27.oneOf(x6); + Expression x30=x27.join(x11); + Formula x29=x30.one(); + Formula x31=x30.in(x6); + Formula x28=x29.and(x31); + Formula x25=x28.forAll(x26); + Expression x33=x11.join(Expression.UNIV); + Formula x32=x33.in(x6); + Variable x37=Variable.unary("Closure_this"); + Decls x36=x37.oneOf(x6); + Expression x40=x37.join(x12); + Formula x39=x40.one(); + Formula x41=x40.in(x6); + Formula x38=x39.and(x41); + Formula x35=x38.forAll(x36); + Expression x43=x12.join(Expression.UNIV); + Formula x42=x43.in(x6); + Variable x46=Variable.unary("Closure_this"); + Decls x45=x46.oneOf(x6); + Expression x49=x46.join(x13); + Formula x48=x49.one(); + Formula x50=x49.in(x6); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x52=x13.join(Expression.UNIV); + Formula x51=x52.in(x6); + Variable x55=Variable.unary("Closure_this"); + Decls x54=x55.oneOf(x7); + Expression x57=x55.join(x14); + Formula x56=x57.in(x6); + Formula x53=x56.forAll(x54); + Expression x59=x14.join(Expression.UNIV); + Formula x58=x59.in(x7); + Variable x62=Variable.unary("Closure_this"); + Decls x61=x62.oneOf(x7); + Expression x66=x62.join(x15); + Expression x68=x8.union(x9); + Expression x67=x6.product(x68); + Formula x65=x66.in(x67); + Variable x71=Variable.unary(""); + Decls x70=x71.oneOf(x6); + Expression x74=x71.join(x66); + Formula x73=x74.one(); + Formula x75=x74.in(x68); + Formula x72=x73.and(x75); + Formula x69=x72.forAll(x70); + Formula x64=x65.and(x69); + Variable x78=Variable.unary(""); + Decls x77=x78.oneOf(x68); + Expression x80=x66.join(x78); + Formula x79=x80.in(x6); + Formula x76=x79.forAll(x77); + Formula x63=x64.and(x76); + Formula x60=x63.forAll(x61); + Expression x83=x15.join(Expression.UNIV); + Expression x82=x83.join(Expression.UNIV); + Formula x81=x82.in(x7); + Variable x86=Variable.unary("Closure_this"); + Decls x85=x86.oneOf(x7); + Expression x90=x86.join(x16); + Expression x91=x6.product(x68); + Formula x89=x90.in(x91); + Variable x94=Variable.unary(""); + Decls x93=x94.oneOf(x6); + Expression x97=x94.join(x90); + Formula x96=x97.one(); + Formula x98=x97.in(x68); + Formula x95=x96.and(x98); + Formula x92=x95.forAll(x93); + Formula x88=x89.and(x92); + Variable x101=Variable.unary(""); + Decls x100=x101.oneOf(x68); + Expression x103=x90.join(x101); + Formula x102=x103.in(x6); + Formula x99=x102.forAll(x100); + Formula x87=x88.and(x99); + Formula x84=x87.forAll(x85); + Expression x106=x16.join(Expression.UNIV); + Expression x105=x106.join(Expression.UNIV); + Formula x104=x105.in(x7); + Variable x109=Variable.unary("Closure_this"); + Decls x108=x109.oneOf(x7); + Expression x113=x109.join(x17); + Expression x114=x6.product(x68); + Formula x112=x113.in(x114); + Variable x117=Variable.unary(""); + Decls x116=x117.oneOf(x6); + Expression x120=x117.join(x113); + Formula x119=x120.one(); + Formula x121=x120.in(x68); + Formula x118=x119.and(x121); + Formula x115=x118.forAll(x116); + Formula x111=x112.and(x115); + Variable x124=Variable.unary(""); + Decls x123=x124.oneOf(x68); + Expression x126=x113.join(x124); + Formula x125=x126.in(x6); + Formula x122=x125.forAll(x123); + Formula x110=x111.and(x122); + Formula x107=x110.forAll(x108); + Expression x129=x17.join(Expression.UNIV); + Expression x128=x129.join(Expression.UNIV); + Formula x127=x128.in(x7); + Variable x132=Variable.unary("Closure_this"); + Decls x131=x132.oneOf(x7); + Expression x134=x132.join(x18); + Expression x135=x6.product(x6); + Formula x133=x134.in(x135); + Formula x130=x133.forAll(x131); + Expression x138=x18.join(Expression.UNIV); + Expression x137=x138.join(Expression.UNIV); + Formula x136=x137.in(x7); + Variable x141=Variable.unary("Closure_this"); + Decls x140=x141.oneOf(x7); + Variable x144=Variable.unary("Closure_p"); + Decls x143=x144.oneOf(x6); + Expression x147=x141.join(x18); + Expression x146=x144.join(x147); + Expression x151=x141.join(x15); + Expression x150=x144.join(x151); + Formula x149=x150.eq(x8); + Expression x152=x144.join(x12); + Expression x153=x144.join(x13); + Expression x148=x149.thenElse(x152,x153); + Formula x145=x146.eq(x148); + Formula x142=x145.forAll(x143); + Formula x139=x142.forAll(x140); + Expression x156=x10.product(x19); + Expression x155=x10.join(x156); + Formula x154=x155.in(x7); + Expression x159=x10.product(x20); + Expression x158=x10.join(x159); + Expression x160=x7.product(x7); + Formula x157=x158.in(x160); + Formula x161=x20.totalOrder(x7,x19,x21); + Variable x164=Variable.unary("Closure_p"); + Decls x163=x164.oneOf(x6); + Expression x168=x164.join(x12); + Expression x169=x164.join(x11); + Formula x167=x168.eq(x169); + Expression x171=x164.join(x13); + Expression x173=x11.transpose(); + Expression x172=x164.join(x173); + Formula x170=x171.eq(x172); + Formula x166=x167.and(x170); + Expression x176=x164.join(x13); + Expression x177=x164.join(x11); + Formula x175=x176.eq(x177); + Expression x179=x164.join(x12); + Expression x181=x11.transpose(); + Expression x180=x164.join(x181); + Formula x178=x179.eq(x180); + Formula x174=x175.and(x178); + Formula x165=x166.or(x174); + Formula x162=x165.forAll(x163); + Variable x184=Variable.unary("ring_n"); + Decls x183=x184.oneOf(x6); + Expression x187=x184.join(x11); + Formula x186=x187.one(); + Expression x191=x11.closure(); + Expression x199=Expression.INTS.union(x5); + Expression x198=x199.union(x6); + Expression x197=x198.union(x7); + Expression x196=x197.union(x68); + Expression x195=x196.union(x10); + Expression x194=x195.product(Expression.UNIV); + Expression x192=Expression.IDEN.intersection(x194); + Expression x190=x191.union(x192); + Expression x189=x184.join(x190); + Formula x188=x6.in(x189); + Formula x185=x186.and(x188); + Formula x182=x185.forAll(x183); + Variable x203=Variable.unary("Closure_tp"); + Expression x206=x20.join(x7); + Expression x205=x7.difference(x206); + Expression x204=x7.difference(x205); + Decls x202=x203.oneOf(x204); + Variable x209=Variable.unary("Closure_p"); + Decls x208=x209.oneOf(x6); + Expression x214=x203.join(x14); + Formula x213=x209.in(x214); + Formula x212=x213.not(); + Expression x220=x203.join(x20); + Expression x219=x220.join(x16); + Expression x218=x209.join(x219); + Expression x222=x203.join(x16); + Expression x221=x209.join(x222); + Formula x217=x218.eq(x221); + Expression x225=x220.join(x17); + Expression x224=x209.join(x225); + Expression x227=x203.join(x17); + Expression x226=x209.join(x227); + Formula x223=x224.eq(x226); + Formula x216=x217.and(x223); + Expression x230=x220.join(x15); + Expression x229=x209.join(x230); + Expression x232=x203.join(x15); + Expression x231=x209.join(x232); + Formula x228=x229.eq(x231); + Formula x215=x216.and(x228); + Formula x211=x212.implies(x215); + Formula x234=x212.not(); + Expression x239=x209.join(x12); + Expression x238=x239.join(x222); + Expression x241=x209.join(x13); + Expression x240=x241.join(x222); + Formula x237=x238.eq(x240); + Expression x245=x68.difference(x238); + Formula x244=x218.eq(x245); + Formula x246=x224.eq(x8); + Formula x243=x244.and(x246); + Formula x247=x229.eq(x231); + Formula x242=x243.and(x247); + Formula x236=x237.implies(x242); + Formula x249=x237.not(); + Formula x254=x238.eq(x221); + Expression x256=x68.difference(x240); + Formula x255=x221.eq(x256); + Formula x253=x254.and(x255); + Expression x261=x239.join(x227); + Expression x260=x68.difference(x261); + Formula x259=x260.eq(x226); + Expression x263=x241.join(x227); + Formula x262=x226.eq(x263); + Formula x258=x259.and(x262); + Formula x264=x263.eq(x8); + Formula x257=x258.and(x264); + Formula x252=x253.and(x257); + Expression x268=x68.difference(x221); + Formula x267=x218.eq(x268); + Formula x269=x224.eq(x9); + Formula x266=x267.and(x269); + Formula x270=x229.eq(x8); + Formula x265=x266.and(x270); + Formula x251=x252.implies(x265); + Formula x272=x252.not(); + Expression x278=x68.difference(x238); + Formula x277=x278.eq(x221); + Formula x279=x221.eq(x240); + Formula x276=x277.and(x279); + Formula x282=x261.eq(x226); + Expression x284=x68.difference(x263); + Formula x283=x226.eq(x284); + Formula x281=x282.and(x283); + Formula x285=x284.eq(x8); + Formula x280=x281.and(x285); + Formula x275=x276.and(x280); + Expression x289=x68.difference(x221); + Formula x288=x218.eq(x289); + Formula x290=x224.eq(x9); + Formula x287=x288.and(x290); + Formula x291=x229.eq(x9); + Formula x286=x287.and(x291); + Formula x274=x275.implies(x286); + Formula x293=x275.not(); + Formula x299=x238.eq(x221); + Expression x301=x68.difference(x240); + Formula x300=x221.eq(x301); + Formula x298=x299.and(x300); + Formula x302=x261.eq(x226); + Formula x297=x298.and(x302); + Expression x306=x68.difference(x238); + Formula x305=x306.eq(x221); + Formula x307=x221.eq(x240); + Formula x304=x305.and(x307); + Formula x308=x226.eq(x263); + Formula x303=x304.and(x308); + Formula x296=x297.or(x303); + Expression x312=x68.difference(x226); + Formula x311=x224.eq(x312); + Formula x313=x218.eq(x221); + Formula x310=x311.and(x313); + Formula x314=x229.eq(x231); + Formula x309=x310.and(x314); + Formula x295=x296.implies(x309); + Formula x316=x296.not(); + Formula x319=x218.eq(x221); + Formula x320=x224.eq(x226); + Formula x318=x319.and(x320); + Formula x321=x229.eq(x231); + Formula x317=x318.and(x321); + Formula x315=x316.implies(x317); + Formula x294=x295.and(x315); + Formula x292=x293.implies(x294); + Formula x273=x274.and(x292); + Formula x271=x272.implies(x273); + Formula x250=x251.and(x271); + Formula x248=x249.implies(x250); + Formula x235=x236.and(x248); + Formula x233=x234.implies(x235); + Formula x210=x211.and(x233); + Formula x207=x210.forAll(x208); + Formula x201=x207.forAll(x202); + Variable x325=Variable.unary("Closure_t"); + Expression x326=x7.difference(x205); + Decls x324=x325.oneOf(x326); + Variable x332=Variable.unary("ring_n"); + Decls x331=x332.oneOf(x6); + Expression x336=x325.join(x18); + Expression x335=x332.join(x336); + Formula x334=x335.one(); + Expression x340=x336.closure(); + Expression x342=x195.product(Expression.UNIV); + Expression x341=Expression.IDEN.intersection(x342); + Expression x339=x340.union(x341); + Expression x338=x332.join(x339); + Formula x337=x6.in(x338); + Formula x333=x334.and(x337); + Formula x330=x333.forAll(x331); + Variable x345=Variable.unary("ring_n"); + Decls x344=x345.oneOf(x6); + Expression x349=x336.transpose(); + Expression x348=x345.join(x349); + Formula x347=x348.one(); + Expression x353=x349.closure(); + Expression x355=x195.product(Expression.UNIV); + Expression x354=Expression.IDEN.intersection(x355); + Expression x352=x353.union(x354); + Expression x351=x345.join(x352); + Formula x350=x6.in(x351); + Formula x346=x347.and(x350); + Formula x343=x346.forAll(x344); + Formula x329=x330.or(x343); + Formula x328=x329.not(); + Variable x359=Variable.unary("ring_n"); + Decls x358=x359.oneOf(x6); + Expression x364=x325.join(x20); + Expression x363=x364.join(x18); + Expression x362=x359.join(x363); + Formula x361=x362.one(); + Expression x368=x363.closure(); + Expression x370=x195.product(Expression.UNIV); + Expression x369=Expression.IDEN.intersection(x370); + Expression x367=x368.union(x369); + Expression x366=x359.join(x367); + Formula x365=x6.in(x366); + Formula x360=x361.and(x365); + Formula x357=x360.forAll(x358); + Variable x373=Variable.unary("ring_n"); + Decls x372=x373.oneOf(x6); + Expression x377=x363.transpose(); + Expression x376=x373.join(x377); + Formula x375=x376.one(); + Expression x381=x377.closure(); + Expression x383=x195.product(Expression.UNIV); + Expression x382=Expression.IDEN.intersection(x383); + Expression x380=x381.union(x382); + Expression x379=x373.join(x380); + Formula x378=x6.in(x379); + Formula x374=x375.and(x378); + Formula x371=x374.forAll(x372); + Formula x356=x357.or(x371); + Formula x327=x328.or(x356); + Formula x323=x327.forAll(x324); + Formula x322=x323.not(); + Formula x384=x0.eq(x0); + Formula x385=x1.eq(x1); + Formula x386=x2.eq(x2); + Formula x387=x3.eq(x3); + Formula x388=x4.eq(x4); + Formula x389=x5.eq(x5); + Formula x390=x6.eq(x6); + Formula x391=x7.eq(x7); + Formula x392=x8.eq(x8); + Formula x393=x9.eq(x9); + Formula x394=x10.eq(x10); + Formula x395=x11.eq(x11); + Formula x396=x12.eq(x12); + Formula x397=x13.eq(x13); + Formula x398=x14.eq(x14); + Formula x399=x15.eq(x15); + Formula x400=x16.eq(x16); + Formula x401=x17.eq(x17); + Formula x402=x18.eq(x18); + Formula x403=x19.eq(x19); + Formula x404=x20.eq(x20); + Formula x405=x21.eq(x21); + Formula x22=Formula.compose(FormulaOperator.AND, x23, x25, x32, x35, x42, x44, x51, x53, x58, x60, x81, x84, x104, x107, x127, x130, x136, x139, x154, x157, x161, x162, x182, x201, x322, x384, x385, x386, x387, x388, x389, x390, x391, x392, x393, x394, x395, x396, x397, x398, x399, x400, x401, x402, x403, x404, x405); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x22,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/ringOrientation/stableOrientRingSomeStateRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/ringOrientation/stableOrientRingSomeStateRun.java new file mode 100644 index 0000000..35229da --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/ringOrientation/stableOrientRingSomeStateRun.java @@ -0,0 +1,640 @@ +package kodkod.examples.models.algorithm.ringOrientation; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "peterson", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 4, + NaryRelations = 0, + HierarchicalTypes = 5, + NestedRelationalJoins = 41, + TransitiveClosure = 3, + NestedQuantifiers = 1, + SetCardinality = 2, + Additions = 0, + Subtractions = 0, + Comparison = 46, + OrderedRelations = 2, + Constraints = 50 +) + + + +public final class stableOrientRingSomeStateRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Process"); + Relation x7 = Relation.unary("this/Tick"); + Relation x8 = Relation.unary("bool/True"); + Relation x9 = Relation.unary("bool/False"); + Relation x10 = Relation.unary("ord/Ord"); + Relation x11 = Relation.nary("this/Process.rightNeighbor", 2); + Relation x12 = Relation.nary("this/Process.AP1", 2); + Relation x13 = Relation.nary("this/Process.AP2", 2); + Relation x14 = Relation.nary("this/Tick.runs", 2); + Relation x15 = Relation.nary("this/Tick.dir", 3); + Relation x16 = Relation.nary("this/Tick.S", 3); + Relation x17 = Relation.nary("this/Tick.T", 3); + Relation x18 = Relation.nary("this/Tick.ring_", 3); + Relation x19 = Relation.unary("ord/Ord.First"); + Relation x20 = Relation.nary("ord/Ord.Next", 2); + Relation x21 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Process$0", + "Process$1", "Process$2", "Tick$0", "Tick$1", "bool/False$0", "bool/True$0", + "ord/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Process$0")); + x6_upper.add(factory.tuple("Process$1")); + x6_upper.add(factory.tuple("Process$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Tick$0")); + x7_upper.add(factory.tuple("Tick$1")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("bool/True$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("bool/False$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("ord/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1"))); + x14_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1"))); + x14_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(3); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("bool/True$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("bool/False$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("bool/True$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("bool/False$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("bool/True$0"))); + x15_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("bool/False$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("bool/True$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("bool/False$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("bool/True$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("bool/False$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("bool/True$0"))); + x15_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("bool/False$0"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(3); + x16_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("bool/True$0"))); + x16_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("bool/False$0"))); + x16_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("bool/True$0"))); + x16_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("bool/False$0"))); + x16_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("bool/True$0"))); + x16_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("bool/False$0"))); + x16_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("bool/True$0"))); + x16_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("bool/False$0"))); + x16_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("bool/True$0"))); + x16_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("bool/False$0"))); + x16_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("bool/True$0"))); + x16_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("bool/False$0"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(3); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("bool/True$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("bool/False$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("bool/True$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("bool/False$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("bool/True$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("bool/False$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("bool/True$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("bool/False$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("bool/True$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("bool/False$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("bool/True$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("bool/False$0"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(1); + x19_upper.add(factory.tuple("Tick$0")); + x19_upper.add(factory.tuple("Tick$1")); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$0"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$1"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$0"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$1"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(1); + x21_upper.add(factory.tuple("Tick$0")); + x21_upper.add(factory.tuple("Tick$1")); + bounds.bound(x21, x21_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x24=x8.intersection(x9); + Formula x23=x24.no(); + Variable x27=Variable.unary("SomeState_this"); + Decls x26=x27.oneOf(x6); + Expression x30=x27.join(x11); + Formula x29=x30.one(); + Formula x31=x30.in(x6); + Formula x28=x29.and(x31); + Formula x25=x28.forAll(x26); + Expression x33=x11.join(Expression.UNIV); + Formula x32=x33.in(x6); + Variable x37=Variable.unary("SomeState_this"); + Decls x36=x37.oneOf(x6); + Expression x40=x37.join(x12); + Formula x39=x40.one(); + Formula x41=x40.in(x6); + Formula x38=x39.and(x41); + Formula x35=x38.forAll(x36); + Expression x43=x12.join(Expression.UNIV); + Formula x42=x43.in(x6); + Variable x46=Variable.unary("SomeState_this"); + Decls x45=x46.oneOf(x6); + Expression x49=x46.join(x13); + Formula x48=x49.one(); + Formula x50=x49.in(x6); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x52=x13.join(Expression.UNIV); + Formula x51=x52.in(x6); + Variable x55=Variable.unary("SomeState_this"); + Decls x54=x55.oneOf(x7); + Expression x57=x55.join(x14); + Formula x56=x57.in(x6); + Formula x53=x56.forAll(x54); + Expression x59=x14.join(Expression.UNIV); + Formula x58=x59.in(x7); + Variable x62=Variable.unary("SomeState_this"); + Decls x61=x62.oneOf(x7); + Expression x66=x62.join(x15); + Expression x68=x8.union(x9); + Expression x67=x6.product(x68); + Formula x65=x66.in(x67); + Variable x71=Variable.unary(""); + Decls x70=x71.oneOf(x6); + Expression x74=x71.join(x66); + Formula x73=x74.one(); + Formula x75=x74.in(x68); + Formula x72=x73.and(x75); + Formula x69=x72.forAll(x70); + Formula x64=x65.and(x69); + Variable x78=Variable.unary(""); + Decls x77=x78.oneOf(x68); + Expression x80=x66.join(x78); + Formula x79=x80.in(x6); + Formula x76=x79.forAll(x77); + Formula x63=x64.and(x76); + Formula x60=x63.forAll(x61); + Expression x83=x15.join(Expression.UNIV); + Expression x82=x83.join(Expression.UNIV); + Formula x81=x82.in(x7); + Variable x86=Variable.unary("SomeState_this"); + Decls x85=x86.oneOf(x7); + Expression x90=x86.join(x16); + Expression x91=x6.product(x68); + Formula x89=x90.in(x91); + Variable x94=Variable.unary(""); + Decls x93=x94.oneOf(x6); + Expression x97=x94.join(x90); + Formula x96=x97.one(); + Formula x98=x97.in(x68); + Formula x95=x96.and(x98); + Formula x92=x95.forAll(x93); + Formula x88=x89.and(x92); + Variable x101=Variable.unary(""); + Decls x100=x101.oneOf(x68); + Expression x103=x90.join(x101); + Formula x102=x103.in(x6); + Formula x99=x102.forAll(x100); + Formula x87=x88.and(x99); + Formula x84=x87.forAll(x85); + Expression x106=x16.join(Expression.UNIV); + Expression x105=x106.join(Expression.UNIV); + Formula x104=x105.in(x7); + Variable x109=Variable.unary("SomeState_this"); + Decls x108=x109.oneOf(x7); + Expression x113=x109.join(x17); + Expression x114=x6.product(x68); + Formula x112=x113.in(x114); + Variable x117=Variable.unary(""); + Decls x116=x117.oneOf(x6); + Expression x120=x117.join(x113); + Formula x119=x120.one(); + Formula x121=x120.in(x68); + Formula x118=x119.and(x121); + Formula x115=x118.forAll(x116); + Formula x111=x112.and(x115); + Variable x124=Variable.unary(""); + Decls x123=x124.oneOf(x68); + Expression x126=x113.join(x124); + Formula x125=x126.in(x6); + Formula x122=x125.forAll(x123); + Formula x110=x111.and(x122); + Formula x107=x110.forAll(x108); + Expression x129=x17.join(Expression.UNIV); + Expression x128=x129.join(Expression.UNIV); + Formula x127=x128.in(x7); + Variable x132=Variable.unary("SomeState_this"); + Decls x131=x132.oneOf(x7); + Expression x134=x132.join(x18); + Expression x135=x6.product(x6); + Formula x133=x134.in(x135); + Formula x130=x133.forAll(x131); + Expression x138=x18.join(Expression.UNIV); + Expression x137=x138.join(Expression.UNIV); + Formula x136=x137.in(x7); + Variable x141=Variable.unary("SomeState_this"); + Decls x140=x141.oneOf(x7); + Variable x144=Variable.unary("SomeState_p"); + Decls x143=x144.oneOf(x6); + Expression x147=x141.join(x18); + Expression x146=x144.join(x147); + Expression x151=x141.join(x15); + Expression x150=x144.join(x151); + Formula x149=x150.eq(x8); + Expression x152=x144.join(x12); + Expression x153=x144.join(x13); + Expression x148=x149.thenElse(x152,x153); + Formula x145=x146.eq(x148); + Formula x142=x145.forAll(x143); + Formula x139=x142.forAll(x140); + Expression x156=x10.product(x19); + Expression x155=x10.join(x156); + Formula x154=x155.in(x7); + Expression x159=x10.product(x20); + Expression x158=x10.join(x159); + Expression x160=x7.product(x7); + Formula x157=x158.in(x160); + Formula x161=x20.totalOrder(x7,x19,x21); + Variable x164=Variable.unary("SomeState_p"); + Decls x163=x164.oneOf(x6); + Expression x168=x164.join(x12); + Expression x169=x164.join(x11); + Formula x167=x168.eq(x169); + Expression x171=x164.join(x13); + Expression x173=x11.transpose(); + Expression x172=x164.join(x173); + Formula x170=x171.eq(x172); + Formula x166=x167.and(x170); + Expression x176=x164.join(x13); + Expression x177=x164.join(x11); + Formula x175=x176.eq(x177); + Expression x179=x164.join(x12); + Expression x181=x11.transpose(); + Expression x180=x164.join(x181); + Formula x178=x179.eq(x180); + Formula x174=x175.and(x178); + Formula x165=x166.or(x174); + Formula x162=x165.forAll(x163); + Variable x184=Variable.unary("ring_n"); + Decls x183=x184.oneOf(x6); + Expression x187=x184.join(x11); + Formula x186=x187.one(); + Expression x191=x11.closure(); + Expression x199=Expression.INTS.union(x5); + Expression x198=x199.union(x6); + Expression x197=x198.union(x7); + Expression x196=x197.union(x68); + Expression x195=x196.union(x10); + Expression x194=x195.product(Expression.UNIV); + Expression x192=Expression.IDEN.intersection(x194); + Expression x190=x191.union(x192); + Expression x189=x184.join(x190); + Formula x188=x6.in(x189); + Formula x185=x186.and(x188); + Formula x182=x185.forAll(x183); + Variable x203=Variable.unary("SomeState_tp"); + Expression x206=x20.join(x7); + Expression x205=x7.difference(x206); + Expression x204=x7.difference(x205); + Decls x202=x203.oneOf(x204); + Variable x209=Variable.unary("SomeState_p"); + Decls x208=x209.oneOf(x6); + Expression x214=x203.join(x14); + Formula x213=x209.in(x214); + Formula x212=x213.not(); + Expression x220=x203.join(x20); + Expression x219=x220.join(x16); + Expression x218=x209.join(x219); + Expression x222=x203.join(x16); + Expression x221=x209.join(x222); + Formula x217=x218.eq(x221); + Expression x225=x220.join(x17); + Expression x224=x209.join(x225); + Expression x227=x203.join(x17); + Expression x226=x209.join(x227); + Formula x223=x224.eq(x226); + Formula x216=x217.and(x223); + Expression x230=x220.join(x15); + Expression x229=x209.join(x230); + Expression x232=x203.join(x15); + Expression x231=x209.join(x232); + Formula x228=x229.eq(x231); + Formula x215=x216.and(x228); + Formula x211=x212.implies(x215); + Formula x234=x212.not(); + Expression x239=x209.join(x12); + Expression x238=x239.join(x222); + Expression x241=x209.join(x13); + Expression x240=x241.join(x222); + Formula x237=x238.eq(x240); + Expression x245=x68.difference(x238); + Formula x244=x218.eq(x245); + Formula x246=x224.eq(x8); + Formula x243=x244.and(x246); + Formula x247=x229.eq(x231); + Formula x242=x243.and(x247); + Formula x236=x237.implies(x242); + Formula x249=x237.not(); + Formula x254=x238.eq(x221); + Expression x256=x68.difference(x240); + Formula x255=x221.eq(x256); + Formula x253=x254.and(x255); + Expression x261=x239.join(x227); + Expression x260=x68.difference(x261); + Formula x259=x260.eq(x226); + Expression x263=x241.join(x227); + Formula x262=x226.eq(x263); + Formula x258=x259.and(x262); + Formula x264=x263.eq(x8); + Formula x257=x258.and(x264); + Formula x252=x253.and(x257); + Expression x268=x68.difference(x221); + Formula x267=x218.eq(x268); + Formula x269=x224.eq(x9); + Formula x266=x267.and(x269); + Formula x270=x229.eq(x8); + Formula x265=x266.and(x270); + Formula x251=x252.implies(x265); + Formula x272=x252.not(); + Expression x278=x68.difference(x238); + Formula x277=x278.eq(x221); + Formula x279=x221.eq(x240); + Formula x276=x277.and(x279); + Formula x282=x261.eq(x226); + Expression x284=x68.difference(x263); + Formula x283=x226.eq(x284); + Formula x281=x282.and(x283); + Formula x285=x284.eq(x8); + Formula x280=x281.and(x285); + Formula x275=x276.and(x280); + Expression x289=x68.difference(x221); + Formula x288=x218.eq(x289); + Formula x290=x224.eq(x9); + Formula x287=x288.and(x290); + Formula x291=x229.eq(x9); + Formula x286=x287.and(x291); + Formula x274=x275.implies(x286); + Formula x293=x275.not(); + Formula x299=x238.eq(x221); + Expression x301=x68.difference(x240); + Formula x300=x221.eq(x301); + Formula x298=x299.and(x300); + Formula x302=x261.eq(x226); + Formula x297=x298.and(x302); + Expression x306=x68.difference(x238); + Formula x305=x306.eq(x221); + Formula x307=x221.eq(x240); + Formula x304=x305.and(x307); + Formula x308=x226.eq(x263); + Formula x303=x304.and(x308); + Formula x296=x297.or(x303); + Expression x312=x68.difference(x226); + Formula x311=x224.eq(x312); + Formula x313=x218.eq(x221); + Formula x310=x311.and(x313); + Formula x314=x229.eq(x231); + Formula x309=x310.and(x314); + Formula x295=x296.implies(x309); + Formula x316=x296.not(); + Formula x319=x218.eq(x221); + Formula x320=x224.eq(x226); + Formula x318=x319.and(x320); + Formula x321=x229.eq(x231); + Formula x317=x318.and(x321); + Formula x315=x316.implies(x317); + Formula x294=x295.and(x315); + Formula x292=x293.implies(x294); + Formula x273=x274.and(x292); + Formula x271=x272.implies(x273); + Formula x250=x251.and(x271); + Formula x248=x249.implies(x250); + Formula x235=x236.and(x248); + Formula x233=x234.implies(x235); + Formula x210=x211.and(x233); + Formula x207=x210.forAll(x208); + Formula x201=x207.forAll(x202); + Variable x325=Variable.unary("ring_n"); + Decls x324=x325.oneOf(x6); + Expression x329=x19.join(x18); + Expression x328=x325.join(x329); + Formula x327=x328.one(); + Expression x333=x329.closure(); + Expression x335=x195.product(Expression.UNIV); + Expression x334=Expression.IDEN.intersection(x335); + Expression x332=x333.union(x334); + Expression x331=x325.join(x332); + Formula x330=x6.in(x331); + Formula x326=x327.and(x330); + Formula x323=x326.forAll(x324); + Formula x322=x323.not(); + Variable x338=Variable.unary("SomeState_t"); + Decls x337=x338.oneOf(x7); + Variable x341=Variable.unary("ring_n"); + Decls x340=x341.oneOf(x6); + Expression x345=x338.join(x18); + Expression x344=x341.join(x345); + Formula x343=x344.one(); + Expression x349=x345.closure(); + Expression x351=x195.product(Expression.UNIV); + Expression x350=Expression.IDEN.intersection(x351); + Expression x348=x349.union(x350); + Expression x347=x341.join(x348); + Formula x346=x6.in(x347); + Formula x342=x343.and(x346); + Formula x339=x342.forAll(x340); + Formula x336=x339.forSome(x337); + Formula x352=x0.eq(x0); + Formula x353=x1.eq(x1); + Formula x354=x2.eq(x2); + Formula x355=x3.eq(x3); + Formula x356=x4.eq(x4); + Formula x357=x5.eq(x5); + Formula x358=x6.eq(x6); + Formula x359=x7.eq(x7); + Formula x360=x8.eq(x8); + Formula x361=x9.eq(x9); + Formula x362=x10.eq(x10); + Formula x363=x11.eq(x11); + Formula x364=x12.eq(x12); + Formula x365=x13.eq(x13); + Formula x366=x14.eq(x14); + Formula x367=x15.eq(x15); + Formula x368=x16.eq(x16); + Formula x369=x17.eq(x17); + Formula x370=x18.eq(x18); + Formula x371=x19.eq(x19); + Formula x372=x20.eq(x20); + Formula x373=x21.eq(x21); + Formula x22=Formula.compose(FormulaOperator.AND, x23, x25, x32, x35, x42, x44, x51, x53, x58, x60, x81, x84, x104, x107, x127, x130, x136, x139, x154, x157, x161, x162, x182, x201, x322, x336, x352, x353, x354, x355, x356, x357, x358, x359, x360, x361, x362, x363, x364, x365, x366, x367, x368, x369, x370, x371, x372, x373); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x22,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/spanningTree/opt_spanTreeBadLivenessTraceRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/spanningTree/opt_spanTreeBadLivenessTraceRun.java new file mode 100644 index 0000000..3fccdeb --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/spanningTree/opt_spanTreeBadLivenessTraceRun.java @@ -0,0 +1,986 @@ +package kodkod.examples.models.algorithm.spanningTree; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "opt_spantree", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 1, + NestedRelationalJoins = 14, + TransitiveClosure = 5, + NestedQuantifiers = 3, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 16, + OrderedRelations = 2, + Constraints = 30 +) + + +public final class opt_spanTreeBadLivenessTraceRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Root"); + Relation x7 = Relation.unary("this/Process remainder"); + Relation x8 = Relation.unary("this/Lvl"); + Relation x9 = Relation.unary("this/State"); + Relation x10 = Relation.unary("lo/Ord"); + Relation x11 = Relation.unary("so/Ord"); + Relation x12 = Relation.nary("this/Process.adj", 2); + Relation x13 = Relation.nary("this/State.runs", 2); + Relation x14 = Relation.nary("this/State.lvl", 3); + Relation x15 = Relation.nary("this/State.parent", 3); + Relation x16 = Relation.unary("lo/Ord.First"); + Relation x17 = Relation.nary("lo/Ord.Next", 2); + Relation x18 = Relation.unary("so/Ord.First"); + Relation x19 = Relation.nary("so/Ord.Next", 2); + Relation x20 = Relation.unary(""); + Relation x21 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Lvl$0", + "Lvl$1", "Lvl$2", "Lvl$3", "Lvl$4", "Process$0", "Process$1", + "Process$2", "Process$3", "Root$0", "State$0", "State$1", "State$2", + "State$3", "State$4", "State$5", "State$6", "lo/Ord$0", "so/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Root$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Process$0")); + x7_upper.add(factory.tuple("Process$1")); + x7_upper.add(factory.tuple("Process$2")); + x7_upper.add(factory.tuple("Process$3")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Lvl$0")); + x8_upper.add(factory.tuple("Lvl$1")); + x8_upper.add(factory.tuple("Lvl$2")); + x8_upper.add(factory.tuple("Lvl$3")); + x8_upper.add(factory.tuple("Lvl$4")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("State$0")); + x9_upper.add(factory.tuple("State$1")); + x9_upper.add(factory.tuple("State$2")); + x9_upper.add(factory.tuple("State$3")); + x9_upper.add(factory.tuple("State$4")); + x9_upper.add(factory.tuple("State$5")); + x9_upper.add(factory.tuple("State$6")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("lo/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$3"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(3); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(3); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("Lvl$0")); + x16_upper.add(factory.tuple("Lvl$1")); + x16_upper.add(factory.tuple("Lvl$2")); + x16_upper.add(factory.tuple("Lvl$3")); + x16_upper.add(factory.tuple("Lvl$4")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Lvl$0").product(factory.tuple("Lvl$0"))); + x17_upper.add(factory.tuple("Lvl$0").product(factory.tuple("Lvl$1"))); + x17_upper.add(factory.tuple("Lvl$0").product(factory.tuple("Lvl$2"))); + x17_upper.add(factory.tuple("Lvl$0").product(factory.tuple("Lvl$3"))); + x17_upper.add(factory.tuple("Lvl$0").product(factory.tuple("Lvl$4"))); + x17_upper.add(factory.tuple("Lvl$1").product(factory.tuple("Lvl$0"))); + x17_upper.add(factory.tuple("Lvl$1").product(factory.tuple("Lvl$1"))); + x17_upper.add(factory.tuple("Lvl$1").product(factory.tuple("Lvl$2"))); + x17_upper.add(factory.tuple("Lvl$1").product(factory.tuple("Lvl$3"))); + x17_upper.add(factory.tuple("Lvl$1").product(factory.tuple("Lvl$4"))); + x17_upper.add(factory.tuple("Lvl$2").product(factory.tuple("Lvl$0"))); + x17_upper.add(factory.tuple("Lvl$2").product(factory.tuple("Lvl$1"))); + x17_upper.add(factory.tuple("Lvl$2").product(factory.tuple("Lvl$2"))); + x17_upper.add(factory.tuple("Lvl$2").product(factory.tuple("Lvl$3"))); + x17_upper.add(factory.tuple("Lvl$2").product(factory.tuple("Lvl$4"))); + x17_upper.add(factory.tuple("Lvl$3").product(factory.tuple("Lvl$0"))); + x17_upper.add(factory.tuple("Lvl$3").product(factory.tuple("Lvl$1"))); + x17_upper.add(factory.tuple("Lvl$3").product(factory.tuple("Lvl$2"))); + x17_upper.add(factory.tuple("Lvl$3").product(factory.tuple("Lvl$3"))); + x17_upper.add(factory.tuple("Lvl$3").product(factory.tuple("Lvl$4"))); + x17_upper.add(factory.tuple("Lvl$4").product(factory.tuple("Lvl$0"))); + x17_upper.add(factory.tuple("Lvl$4").product(factory.tuple("Lvl$1"))); + x17_upper.add(factory.tuple("Lvl$4").product(factory.tuple("Lvl$2"))); + x17_upper.add(factory.tuple("Lvl$4").product(factory.tuple("Lvl$3"))); + x17_upper.add(factory.tuple("Lvl$4").product(factory.tuple("Lvl$4"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("State$0")); + x18_upper.add(factory.tuple("State$1")); + x18_upper.add(factory.tuple("State$2")); + x18_upper.add(factory.tuple("State$3")); + x18_upper.add(factory.tuple("State$4")); + x18_upper.add(factory.tuple("State$5")); + x18_upper.add(factory.tuple("State$6")); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$6"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$6"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$6"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$6"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$6"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$6"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$6"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(1); + x20_upper.add(factory.tuple("Lvl$0")); + x20_upper.add(factory.tuple("Lvl$1")); + x20_upper.add(factory.tuple("Lvl$2")); + x20_upper.add(factory.tuple("Lvl$3")); + x20_upper.add(factory.tuple("Lvl$4")); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(1); + x21_upper.add(factory.tuple("State$0")); + x21_upper.add(factory.tuple("State$1")); + x21_upper.add(factory.tuple("State$2")); + x21_upper.add(factory.tuple("State$3")); + x21_upper.add(factory.tuple("State$4")); + x21_upper.add(factory.tuple("State$5")); + x21_upper.add(factory.tuple("State$6")); + bounds.bound(x21, x21_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x25=Variable.unary("BadLivenessTrace_this"); + Expression x26=x6.union(x7); + Decls x24=x25.oneOf(x26); + Expression x28=x25.join(x12); + Formula x27=x28.in(x26); + Formula x23=x27.forAll(x24); + Expression x30=x12.join(Expression.UNIV); + Formula x29=x30.in(x26); + Variable x34=Variable.unary("BadLivenessTrace_this"); + Decls x33=x34.oneOf(x9); + Expression x36=x34.join(x13); + Formula x35=x36.in(x26); + Formula x32=x35.forAll(x33); + Expression x38=x13.join(Expression.UNIV); + Formula x37=x38.in(x9); + Variable x41=Variable.unary("BadLivenessTrace_this"); + Decls x40=x41.oneOf(x9); + Expression x45=x41.join(x14); + Expression x46=x26.product(x8); + Formula x44=x45.in(x46); + Variable x49=Variable.unary(""); + Decls x48=x49.oneOf(x26); + Expression x52=x49.join(x45); + Formula x51=x52.lone(); + Formula x53=x52.in(x8); + Formula x50=x51.and(x53); + Formula x47=x50.forAll(x48); + Formula x43=x44.and(x47); + Variable x56=Variable.unary(""); + Decls x55=x56.oneOf(x8); + Expression x58=x45.join(x56); + Formula x57=x58.in(x26); + Formula x54=x57.forAll(x55); + Formula x42=x43.and(x54); + Formula x39=x42.forAll(x40); + Expression x61=x14.join(Expression.UNIV); + Expression x60=x61.join(Expression.UNIV); + Formula x59=x60.in(x9); + Variable x64=Variable.unary("BadLivenessTrace_this"); + Decls x63=x64.oneOf(x9); + Expression x68=x64.join(x15); + Expression x69=x26.product(x26); + Formula x67=x68.in(x69); + Variable x72=Variable.unary(""); + Decls x71=x72.oneOf(x26); + Expression x75=x72.join(x68); + Formula x74=x75.lone(); + Formula x76=x75.in(x26); + Formula x73=x74.and(x76); + Formula x70=x73.forAll(x71); + Formula x66=x67.and(x70); + Variable x79=Variable.unary(""); + Decls x78=x79.oneOf(x26); + Expression x81=x68.join(x79); + Formula x80=x81.in(x26); + Formula x77=x80.forAll(x78); + Formula x65=x66.and(x77); + Formula x62=x65.forAll(x63); + Expression x84=x15.join(Expression.UNIV); + Expression x83=x84.join(Expression.UNIV); + Formula x82=x83.in(x9); + Expression x87=x10.product(x16); + Expression x86=x10.join(x87); + Formula x85=x86.in(x8); + Expression x90=x10.product(x17); + Expression x89=x10.join(x90); + Expression x91=x8.product(x8); + Formula x88=x89.in(x91); + Formula x92=x17.totalOrder(x8,x16,x20); + Expression x95=x11.product(x18); + Expression x94=x11.join(x95); + Formula x93=x94.in(x9); + Expression x98=x11.product(x19); + Expression x97=x11.join(x98); + Expression x99=x9.product(x9); + Formula x96=x97.in(x99); + Formula x100=x19.totalOrder(x9,x18,x21); + Expression x111=Expression.INTS.union(x5); + Expression x110=x111.union(x26); + Expression x109=x110.union(x8); + Expression x108=x109.union(x9); + Expression x107=x108.union(x10); + Expression x106=x107.union(x11); + Expression x105=x106.product(Expression.UNIV); + Expression x103=Expression.IDEN.intersection(x105); + Expression x102=x103.intersection(x12); + Formula x101=x102.no(); + Expression x114=x12.transpose(); + Formula x113=x114.in(x12); + Expression x118=x12.closure(); + Expression x120=x106.product(Expression.UNIV); + Expression x119=Expression.IDEN.intersection(x120); + Expression x117=x118.union(x119); + Expression x116=x6.join(x117); + Formula x115=x26.in(x116); + Variable x123=Variable.unary("BadLivenessTrace_s"); + Expression x126=x19.join(x9); + Expression x125=x9.difference(x126); + Expression x124=x9.difference(x125); + Decls x122=x123.oneOf(x124); + Variable x131=Variable.unary("BadLivenessTrace_p"); + Decls x130=x131.oneOf(x26); + Expression x135=x123.join(x14); + Expression x134=x131.join(x135); + Expression x138=x123.join(x19); + Expression x137=x138.join(x14); + Expression x136=x131.join(x137); + Formula x133=x134.eq(x136); + Expression x141=x123.join(x15); + Expression x140=x131.join(x141); + Expression x143=x138.join(x15); + Expression x142=x131.join(x143); + Formula x139=x140.eq(x142); + Formula x132=x133.and(x139); + Formula x129=x132.forAll(x130); + Formula x128=x129.not(); + Variable x146=Variable.unary("BadLivenessTrace_p"); + Decls x145=x146.oneOf(x26); + Expression x151=x123.join(x14); + Expression x150=x146.join(x151); + Formula x149=x150.no(); + Formula x153=x146.eq(x6); + Expression x156=x146.join(x12); + Expression x157=x123.join(x14); + Expression x155=x156.join(x157); + Formula x154=x155.some(); + Formula x152=x153.or(x154); + Formula x148=x149.and(x152); + Formula x147=x148.not(); + Formula x144=x147.forAll(x145); + Formula x127=x128.or(x144); + Formula x121=x127.forAll(x122); + Expression x160=x18.join(x14); + Formula x159=x160.no(); + Expression x162=x18.join(x15); + Formula x161=x162.no(); + Formula x158=x159.and(x161); + Variable x165=Variable.unary("BadLivenessTrace_s"); + Expression x166=x9.difference(x125); + Decls x164=x165.oneOf(x166); + Variable x169=Variable.unary("BadLivenessTrace_p"); + Decls x168=x169.oneOf(x26); + Expression x173=x165.join(x13); + Formula x172=x169.in(x173); + Expression x178=x165.join(x14); + Expression x177=x169.join(x178); + Formula x176=x177.no(); + Formula x181=x169.eq(x6); + Expression x186=x165.join(x19); + Expression x185=x186.join(x14); + Expression x184=x169.join(x185); + Formula x183=x184.eq(x16); + Expression x189=x186.join(x15); + Expression x188=x169.join(x189); + Formula x187=x188.no(); + Formula x182=x183.and(x187); + Formula x180=x181.implies(x182); + Formula x191=x181.not(); + Variable x194=Variable.unary("TRAct_adjProc"); + Expression x195=x169.join(x12); + Decls x193=x194.oneOf(x195); + Expression x200=x165.join(x14); + Expression x199=x194.join(x200); + Formula x198=x199.some(); + Expression x203=x186.join(x14); + Expression x202=x169.join(x203); + Expression x204=x199.join(x17); + Formula x201=x202.eq(x204); + Formula x197=x198.and(x201); + Expression x207=x186.join(x15); + Expression x206=x169.join(x207); + Formula x205=x206.eq(x194); + Formula x196=x197.and(x205); + Formula x192=x196.forSome(x193); + Formula x190=x191.implies(x192); + Formula x179=x180.and(x190); + Formula x175=x176.and(x179); + Expression x211=x165.join(x14); + Expression x210=x169.join(x211); + Expression x213=x186.join(x14); + Expression x212=x169.join(x213); + Formula x209=x210.eq(x212); + Expression x216=x165.join(x15); + Expression x215=x169.join(x216); + Expression x218=x186.join(x15); + Expression x217=x169.join(x218); + Formula x214=x215.eq(x217); + Formula x208=x209.and(x214); + Formula x174=x175.or(x208); + Formula x171=x172.implies(x174); + Formula x220=x172.not(); + Expression x224=x165.join(x14); + Expression x223=x169.join(x224); + Expression x226=x186.join(x14); + Expression x225=x169.join(x226); + Formula x222=x223.eq(x225); + Expression x229=x165.join(x15); + Expression x228=x169.join(x229); + Expression x231=x186.join(x15); + Expression x230=x169.join(x231); + Formula x227=x228.eq(x230); + Formula x221=x222.and(x227); + Formula x219=x220.implies(x221); + Formula x170=x171.and(x219); + Formula x167=x170.forAll(x168); + Formula x163=x167.forAll(x164); + Variable x235=Variable.unary("BadLivenessTrace_s"); + Decls x234=x235.oneOf(x9); + Variable x237=Variable.unary("BadLivenessTrace_s'"); + Decls x236=x237.oneOf(x9); + Decls x233=x234.and(x236); + Formula x240=x235.eq(x237); + Formula x239=x240.not(); + Expression x243=x235.join(x14); + Expression x244=x237.join(x14); + Formula x242=x243.eq(x244); + Expression x246=x235.join(x15); + Expression x247=x237.join(x15); + Formula x245=x246.eq(x247); + Formula x241=x242.and(x245); + Formula x238=x239.and(x241); + Formula x232=x238.forSome(x233); + Variable x250=Variable.unary("BadLivenessTrace_s"); + Decls x249=x250.oneOf(x9); + Expression x258=x250.join(x15); + Expression x257=x258.transpose(); + Expression x256=x257.closure(); + Expression x260=x106.product(Expression.UNIV); + Expression x259=Expression.IDEN.intersection(x260); + Expression x255=x256.union(x259); + Expression x254=x6.join(x255); + Formula x253=x26.in(x254); + Variable x263=Variable.unary("acyclic_x"); + Decls x262=x263.oneOf(x26); + Expression x269=x250.join(x15); + Expression x268=x269.transpose(); + Expression x267=x268.closure(); + Expression x266=x263.join(x267); + Formula x265=x263.in(x266); + Formula x264=x265.not(); + Formula x261=x264.forAll(x262); + Formula x252=x253.and(x261); + Formula x251=x252.not(); + Formula x248=x251.forAll(x249); + Formula x270=x0.eq(x0); + Formula x271=x1.eq(x1); + Formula x272=x2.eq(x2); + Formula x273=x3.eq(x3); + Formula x274=x4.eq(x4); + Formula x275=x5.eq(x5); + Formula x276=x6.eq(x6); + Formula x277=x7.eq(x7); + Formula x278=x8.eq(x8); + Formula x279=x9.eq(x9); + Formula x280=x10.eq(x10); + Formula x281=x11.eq(x11); + Formula x282=x12.eq(x12); + Formula x283=x13.eq(x13); + Formula x284=x14.eq(x14); + Formula x285=x15.eq(x15); + Formula x286=x16.eq(x16); + Formula x287=x17.eq(x17); + Formula x288=x18.eq(x18); + Formula x289=x19.eq(x19); + Formula x290=x20.eq(x20); + Formula x291=x21.eq(x21); + Formula x22=Formula.compose(FormulaOperator.AND, x23, x29, x32, x37, x39, x59, x62, x82, x85, x88, x92, x93, x96, x100, x101, x113, x115, x121, x158, x163, x232, x248, x270, x271, x272, x273, x274, x275, x276, x277, x278, x279, x280, x281, x282, x283, x284, x285, x286, x287, x288, x289, x290, x291); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x22,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/spanningTree/opt_spanTreeClosureCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/spanningTree/opt_spanTreeClosureCheck.java new file mode 100644 index 0000000..d689f94 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/spanningTree/opt_spanTreeClosureCheck.java @@ -0,0 +1,977 @@ +package kodkod.examples.models.algorithm.spanningTree; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "opt_spantree", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 1, + NestedRelationalJoins = 14, + TransitiveClosure = 5, + NestedQuantifiers = 3, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 16, + OrderedRelations = 2, + Constraints = 30 +) + + +public final class opt_spanTreeClosureCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Root"); + Relation x7 = Relation.unary("this/Process remainder"); + Relation x8 = Relation.unary("this/Lvl"); + Relation x9 = Relation.unary("this/State"); + Relation x10 = Relation.unary("lo/Ord"); + Relation x11 = Relation.unary("so/Ord"); + Relation x12 = Relation.nary("this/Process.adj", 2); + Relation x13 = Relation.nary("this/State.runs", 2); + Relation x14 = Relation.nary("this/State.lvl", 3); + Relation x15 = Relation.nary("this/State.parent", 3); + Relation x16 = Relation.unary("lo/Ord.First"); + Relation x17 = Relation.nary("lo/Ord.Next", 2); + Relation x18 = Relation.unary("so/Ord.First"); + Relation x19 = Relation.nary("so/Ord.Next", 2); + Relation x20 = Relation.unary(""); + Relation x21 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Lvl$0", + "Lvl$1", "Lvl$2", "Lvl$3", "Lvl$4", "Process$0", "Process$1", + "Process$2", "Process$3", "Root$0", "State$0", "State$1", "State$2", + "State$3", "State$4", "State$5", "State$6", "lo/Ord$0", "so/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Root$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Process$0")); + x7_upper.add(factory.tuple("Process$1")); + x7_upper.add(factory.tuple("Process$2")); + x7_upper.add(factory.tuple("Process$3")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Lvl$0")); + x8_upper.add(factory.tuple("Lvl$1")); + x8_upper.add(factory.tuple("Lvl$2")); + x8_upper.add(factory.tuple("Lvl$3")); + x8_upper.add(factory.tuple("Lvl$4")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("State$0")); + x9_upper.add(factory.tuple("State$1")); + x9_upper.add(factory.tuple("State$2")); + x9_upper.add(factory.tuple("State$3")); + x9_upper.add(factory.tuple("State$4")); + x9_upper.add(factory.tuple("State$5")); + x9_upper.add(factory.tuple("State$6")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("lo/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$3"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(3); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$4"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$3"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$4"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(3); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$4").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$5").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$6").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("Lvl$0")); + x16_upper.add(factory.tuple("Lvl$1")); + x16_upper.add(factory.tuple("Lvl$2")); + x16_upper.add(factory.tuple("Lvl$3")); + x16_upper.add(factory.tuple("Lvl$4")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Lvl$0").product(factory.tuple("Lvl$0"))); + x17_upper.add(factory.tuple("Lvl$0").product(factory.tuple("Lvl$1"))); + x17_upper.add(factory.tuple("Lvl$0").product(factory.tuple("Lvl$2"))); + x17_upper.add(factory.tuple("Lvl$0").product(factory.tuple("Lvl$3"))); + x17_upper.add(factory.tuple("Lvl$0").product(factory.tuple("Lvl$4"))); + x17_upper.add(factory.tuple("Lvl$1").product(factory.tuple("Lvl$0"))); + x17_upper.add(factory.tuple("Lvl$1").product(factory.tuple("Lvl$1"))); + x17_upper.add(factory.tuple("Lvl$1").product(factory.tuple("Lvl$2"))); + x17_upper.add(factory.tuple("Lvl$1").product(factory.tuple("Lvl$3"))); + x17_upper.add(factory.tuple("Lvl$1").product(factory.tuple("Lvl$4"))); + x17_upper.add(factory.tuple("Lvl$2").product(factory.tuple("Lvl$0"))); + x17_upper.add(factory.tuple("Lvl$2").product(factory.tuple("Lvl$1"))); + x17_upper.add(factory.tuple("Lvl$2").product(factory.tuple("Lvl$2"))); + x17_upper.add(factory.tuple("Lvl$2").product(factory.tuple("Lvl$3"))); + x17_upper.add(factory.tuple("Lvl$2").product(factory.tuple("Lvl$4"))); + x17_upper.add(factory.tuple("Lvl$3").product(factory.tuple("Lvl$0"))); + x17_upper.add(factory.tuple("Lvl$3").product(factory.tuple("Lvl$1"))); + x17_upper.add(factory.tuple("Lvl$3").product(factory.tuple("Lvl$2"))); + x17_upper.add(factory.tuple("Lvl$3").product(factory.tuple("Lvl$3"))); + x17_upper.add(factory.tuple("Lvl$3").product(factory.tuple("Lvl$4"))); + x17_upper.add(factory.tuple("Lvl$4").product(factory.tuple("Lvl$0"))); + x17_upper.add(factory.tuple("Lvl$4").product(factory.tuple("Lvl$1"))); + x17_upper.add(factory.tuple("Lvl$4").product(factory.tuple("Lvl$2"))); + x17_upper.add(factory.tuple("Lvl$4").product(factory.tuple("Lvl$3"))); + x17_upper.add(factory.tuple("Lvl$4").product(factory.tuple("Lvl$4"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("State$0")); + x18_upper.add(factory.tuple("State$1")); + x18_upper.add(factory.tuple("State$2")); + x18_upper.add(factory.tuple("State$3")); + x18_upper.add(factory.tuple("State$4")); + x18_upper.add(factory.tuple("State$5")); + x18_upper.add(factory.tuple("State$6")); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$6"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$6"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$6"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$6"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("State$6"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("State$6"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$4"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$5"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("State$6"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(1); + x20_upper.add(factory.tuple("Lvl$0")); + x20_upper.add(factory.tuple("Lvl$1")); + x20_upper.add(factory.tuple("Lvl$2")); + x20_upper.add(factory.tuple("Lvl$3")); + x20_upper.add(factory.tuple("Lvl$4")); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(1); + x21_upper.add(factory.tuple("State$0")); + x21_upper.add(factory.tuple("State$1")); + x21_upper.add(factory.tuple("State$2")); + x21_upper.add(factory.tuple("State$3")); + x21_upper.add(factory.tuple("State$4")); + x21_upper.add(factory.tuple("State$5")); + x21_upper.add(factory.tuple("State$6")); + bounds.bound(x21, x21_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x25=Variable.unary("Closure_this"); + Expression x26=x6.union(x7); + Decls x24=x25.oneOf(x26); + Expression x28=x25.join(x12); + Formula x27=x28.in(x26); + Formula x23=x27.forAll(x24); + Expression x30=x12.join(Expression.UNIV); + Formula x29=x30.in(x26); + Variable x34=Variable.unary("Closure_this"); + Decls x33=x34.oneOf(x9); + Expression x36=x34.join(x13); + Formula x35=x36.in(x26); + Formula x32=x35.forAll(x33); + Expression x38=x13.join(Expression.UNIV); + Formula x37=x38.in(x9); + Variable x41=Variable.unary("Closure_this"); + Decls x40=x41.oneOf(x9); + Expression x45=x41.join(x14); + Expression x46=x26.product(x8); + Formula x44=x45.in(x46); + Variable x49=Variable.unary(""); + Decls x48=x49.oneOf(x26); + Expression x52=x49.join(x45); + Formula x51=x52.lone(); + Formula x53=x52.in(x8); + Formula x50=x51.and(x53); + Formula x47=x50.forAll(x48); + Formula x43=x44.and(x47); + Variable x56=Variable.unary(""); + Decls x55=x56.oneOf(x8); + Expression x58=x45.join(x56); + Formula x57=x58.in(x26); + Formula x54=x57.forAll(x55); + Formula x42=x43.and(x54); + Formula x39=x42.forAll(x40); + Expression x61=x14.join(Expression.UNIV); + Expression x60=x61.join(Expression.UNIV); + Formula x59=x60.in(x9); + Variable x64=Variable.unary("Closure_this"); + Decls x63=x64.oneOf(x9); + Expression x68=x64.join(x15); + Expression x69=x26.product(x26); + Formula x67=x68.in(x69); + Variable x72=Variable.unary(""); + Decls x71=x72.oneOf(x26); + Expression x75=x72.join(x68); + Formula x74=x75.lone(); + Formula x76=x75.in(x26); + Formula x73=x74.and(x76); + Formula x70=x73.forAll(x71); + Formula x66=x67.and(x70); + Variable x79=Variable.unary(""); + Decls x78=x79.oneOf(x26); + Expression x81=x68.join(x79); + Formula x80=x81.in(x26); + Formula x77=x80.forAll(x78); + Formula x65=x66.and(x77); + Formula x62=x65.forAll(x63); + Expression x84=x15.join(Expression.UNIV); + Expression x83=x84.join(Expression.UNIV); + Formula x82=x83.in(x9); + Expression x87=x10.product(x16); + Expression x86=x10.join(x87); + Formula x85=x86.in(x8); + Expression x90=x10.product(x17); + Expression x89=x10.join(x90); + Expression x91=x8.product(x8); + Formula x88=x89.in(x91); + Formula x92=x17.totalOrder(x8,x16,x20); + Expression x95=x11.product(x18); + Expression x94=x11.join(x95); + Formula x93=x94.in(x9); + Expression x98=x11.product(x19); + Expression x97=x11.join(x98); + Expression x99=x9.product(x9); + Formula x96=x97.in(x99); + Formula x100=x19.totalOrder(x9,x18,x21); + Expression x111=Expression.INTS.union(x5); + Expression x110=x111.union(x26); + Expression x109=x110.union(x8); + Expression x108=x109.union(x9); + Expression x107=x108.union(x10); + Expression x106=x107.union(x11); + Expression x105=x106.product(Expression.UNIV); + Expression x103=Expression.IDEN.intersection(x105); + Expression x102=x103.intersection(x12); + Formula x101=x102.no(); + Expression x114=x12.transpose(); + Formula x113=x114.in(x12); + Expression x118=x12.closure(); + Expression x120=x106.product(Expression.UNIV); + Expression x119=Expression.IDEN.intersection(x120); + Expression x117=x118.union(x119); + Expression x116=x6.join(x117); + Formula x115=x26.in(x116); + Variable x123=Variable.unary("Closure_s"); + Expression x126=x19.join(x9); + Expression x125=x9.difference(x126); + Expression x124=x9.difference(x125); + Decls x122=x123.oneOf(x124); + Variable x131=Variable.unary("Closure_p"); + Decls x130=x131.oneOf(x26); + Expression x135=x123.join(x14); + Expression x134=x131.join(x135); + Expression x138=x123.join(x19); + Expression x137=x138.join(x14); + Expression x136=x131.join(x137); + Formula x133=x134.eq(x136); + Expression x141=x123.join(x15); + Expression x140=x131.join(x141); + Expression x143=x138.join(x15); + Expression x142=x131.join(x143); + Formula x139=x140.eq(x142); + Formula x132=x133.and(x139); + Formula x129=x132.forAll(x130); + Formula x128=x129.not(); + Variable x146=Variable.unary("Closure_p"); + Decls x145=x146.oneOf(x26); + Expression x151=x123.join(x14); + Expression x150=x146.join(x151); + Formula x149=x150.no(); + Formula x153=x146.eq(x6); + Expression x156=x146.join(x12); + Expression x157=x123.join(x14); + Expression x155=x156.join(x157); + Formula x154=x155.some(); + Formula x152=x153.or(x154); + Formula x148=x149.and(x152); + Formula x147=x148.not(); + Formula x144=x147.forAll(x145); + Formula x127=x128.or(x144); + Formula x121=x127.forAll(x122); + Expression x160=x18.join(x14); + Formula x159=x160.no(); + Expression x162=x18.join(x15); + Formula x161=x162.no(); + Formula x158=x159.and(x161); + Variable x165=Variable.unary("Closure_s"); + Expression x166=x9.difference(x125); + Decls x164=x165.oneOf(x166); + Variable x169=Variable.unary("Closure_p"); + Decls x168=x169.oneOf(x26); + Expression x173=x165.join(x13); + Formula x172=x169.in(x173); + Expression x178=x165.join(x14); + Expression x177=x169.join(x178); + Formula x176=x177.no(); + Formula x181=x169.eq(x6); + Expression x186=x165.join(x19); + Expression x185=x186.join(x14); + Expression x184=x169.join(x185); + Formula x183=x184.eq(x16); + Expression x189=x186.join(x15); + Expression x188=x169.join(x189); + Formula x187=x188.no(); + Formula x182=x183.and(x187); + Formula x180=x181.implies(x182); + Formula x191=x181.not(); + Variable x194=Variable.unary("TRAct_adjProc"); + Expression x195=x169.join(x12); + Decls x193=x194.oneOf(x195); + Expression x200=x165.join(x14); + Expression x199=x194.join(x200); + Formula x198=x199.some(); + Expression x203=x186.join(x14); + Expression x202=x169.join(x203); + Expression x204=x199.join(x17); + Formula x201=x202.eq(x204); + Formula x197=x198.and(x201); + Expression x207=x186.join(x15); + Expression x206=x169.join(x207); + Formula x205=x206.eq(x194); + Formula x196=x197.and(x205); + Formula x192=x196.forSome(x193); + Formula x190=x191.implies(x192); + Formula x179=x180.and(x190); + Formula x175=x176.and(x179); + Expression x211=x165.join(x14); + Expression x210=x169.join(x211); + Expression x213=x186.join(x14); + Expression x212=x169.join(x213); + Formula x209=x210.eq(x212); + Expression x216=x165.join(x15); + Expression x215=x169.join(x216); + Expression x218=x186.join(x15); + Expression x217=x169.join(x218); + Formula x214=x215.eq(x217); + Formula x208=x209.and(x214); + Formula x174=x175.or(x208); + Formula x171=x172.implies(x174); + Formula x220=x172.not(); + Expression x224=x165.join(x14); + Expression x223=x169.join(x224); + Expression x226=x186.join(x14); + Expression x225=x169.join(x226); + Formula x222=x223.eq(x225); + Expression x229=x165.join(x15); + Expression x228=x169.join(x229); + Expression x231=x186.join(x15); + Expression x230=x169.join(x231); + Formula x227=x228.eq(x230); + Formula x221=x222.and(x227); + Formula x219=x220.implies(x221); + Formula x170=x171.and(x219); + Formula x167=x170.forAll(x168); + Formula x163=x167.forAll(x164); + Variable x235=Variable.unary("Closure_s"); + Expression x236=x9.difference(x125); + Decls x234=x235.oneOf(x236); + Expression x245=x235.join(x15); + Expression x244=x245.transpose(); + Expression x243=x244.closure(); + Expression x247=x106.product(Expression.UNIV); + Expression x246=Expression.IDEN.intersection(x247); + Expression x242=x243.union(x246); + Expression x241=x6.join(x242); + Formula x240=x26.in(x241); + Variable x250=Variable.unary("acyclic_x"); + Decls x249=x250.oneOf(x26); + Expression x256=x235.join(x15); + Expression x255=x256.transpose(); + Expression x254=x255.closure(); + Expression x253=x250.join(x254); + Formula x252=x250.in(x253); + Formula x251=x252.not(); + Formula x248=x251.forAll(x249); + Formula x239=x240.and(x248); + Formula x238=x239.not(); + Expression x258=x235.join(x15); + Expression x260=x235.join(x19); + Expression x259=x260.join(x15); + Formula x257=x258.eq(x259); + Formula x237=x238.or(x257); + Formula x233=x237.forAll(x234); + Formula x232=x233.not(); + Formula x261=x0.eq(x0); + Formula x262=x1.eq(x1); + Formula x263=x2.eq(x2); + Formula x264=x3.eq(x3); + Formula x265=x4.eq(x4); + Formula x266=x5.eq(x5); + Formula x267=x6.eq(x6); + Formula x268=x7.eq(x7); + Formula x269=x8.eq(x8); + Formula x270=x9.eq(x9); + Formula x271=x10.eq(x10); + Formula x272=x11.eq(x11); + Formula x273=x12.eq(x12); + Formula x274=x13.eq(x13); + Formula x275=x14.eq(x14); + Formula x276=x15.eq(x15); + Formula x277=x16.eq(x16); + Formula x278=x17.eq(x17); + Formula x279=x18.eq(x18); + Formula x280=x19.eq(x19); + Formula x281=x20.eq(x20); + Formula x282=x21.eq(x21); + Formula x22=Formula.compose(FormulaOperator.AND, x23, x29, x32, x37, x39, x59, x62, x82, x85, x88, x92, x93, x96, x100, x101, x113, x115, x121, x158, x163, x232, x261, x262, x263, x264, x265, x266, x267, x268, x269, x270, x271, x272, x273, x274, x275, x276, x277, x278, x279, x280, x281, x282); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x22,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/spanningTree/opt_spanTreeSuccessfulRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/spanningTree/opt_spanTreeSuccessfulRun.java new file mode 100644 index 0000000..06ab2b5 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/spanningTree/opt_spanTreeSuccessfulRun.java @@ -0,0 +1,719 @@ +package kodkod.examples.models.algorithm.spanningTree; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "opt_spantree", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 1, + NestedRelationalJoins = 14, + TransitiveClosure = 5, + NestedQuantifiers = 3, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 16, + OrderedRelations = 2, + Constraints = 30 +) + + +public final class opt_spanTreeSuccessfulRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Root"); + Relation x7 = Relation.unary("this/Process remainder"); + Relation x8 = Relation.unary("this/Lvl"); + Relation x9 = Relation.unary("this/State"); + Relation x10 = Relation.unary("lo/Ord"); + Relation x11 = Relation.unary("so/Ord"); + Relation x12 = Relation.nary("this/Process.adj", 2); + Relation x13 = Relation.nary("this/State.runs", 2); + Relation x14 = Relation.nary("this/State.lvl", 3); + Relation x15 = Relation.nary("this/State.parent", 3); + Relation x16 = Relation.unary("lo/Ord.First"); + Relation x17 = Relation.nary("lo/Ord.Next", 2); + Relation x18 = Relation.unary("so/Ord.First"); + Relation x19 = Relation.nary("so/Ord.Next", 2); + Relation x20 = Relation.unary(""); + Relation x21 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Lvl$0", + "Lvl$1", "Lvl$2", "Process$0", "Process$1", "Process$2", "Process$3", + "Root$0", "State$0", "State$1", "State$2", "State$3", "lo/Ord$0", + "so/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Root$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Process$0")); + x7_upper.add(factory.tuple("Process$1")); + x7_upper.add(factory.tuple("Process$2")); + x7_upper.add(factory.tuple("Process$3")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Lvl$0")); + x8_upper.add(factory.tuple("Lvl$1")); + x8_upper.add(factory.tuple("Lvl$2")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("State$0")); + x9_upper.add(factory.tuple("State$1")); + x9_upper.add(factory.tuple("State$2")); + x9_upper.add(factory.tuple("State$3")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("lo/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("so/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$3"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$0"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$1"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$2"))); + x12_upper.add(factory.tuple("Process$3").product(factory.tuple("Process$3"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(3); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Lvl$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Lvl$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(3); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$0").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$1").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$2").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Root$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$0")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$1")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$2")).product(factory.tuple("Process$3"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Process$0"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Process$1"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Process$2"))); + x15_upper.add(factory.tuple("State$3").product(factory.tuple("Process$3")).product(factory.tuple("Process$3"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("Lvl$0")); + x16_upper.add(factory.tuple("Lvl$1")); + x16_upper.add(factory.tuple("Lvl$2")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Lvl$0").product(factory.tuple("Lvl$0"))); + x17_upper.add(factory.tuple("Lvl$0").product(factory.tuple("Lvl$1"))); + x17_upper.add(factory.tuple("Lvl$0").product(factory.tuple("Lvl$2"))); + x17_upper.add(factory.tuple("Lvl$1").product(factory.tuple("Lvl$0"))); + x17_upper.add(factory.tuple("Lvl$1").product(factory.tuple("Lvl$1"))); + x17_upper.add(factory.tuple("Lvl$1").product(factory.tuple("Lvl$2"))); + x17_upper.add(factory.tuple("Lvl$2").product(factory.tuple("Lvl$0"))); + x17_upper.add(factory.tuple("Lvl$2").product(factory.tuple("Lvl$1"))); + x17_upper.add(factory.tuple("Lvl$2").product(factory.tuple("Lvl$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("State$0")); + x18_upper.add(factory.tuple("State$1")); + x18_upper.add(factory.tuple("State$2")); + x18_upper.add(factory.tuple("State$3")); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(1); + x20_upper.add(factory.tuple("Lvl$0")); + x20_upper.add(factory.tuple("Lvl$1")); + x20_upper.add(factory.tuple("Lvl$2")); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(1); + x21_upper.add(factory.tuple("State$0")); + x21_upper.add(factory.tuple("State$1")); + x21_upper.add(factory.tuple("State$2")); + x21_upper.add(factory.tuple("State$3")); + bounds.bound(x21, x21_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x25=Variable.unary("SuccessfulRun_this"); + Expression x26=x6.union(x7); + Decls x24=x25.oneOf(x26); + Expression x28=x25.join(x12); + Formula x27=x28.in(x26); + Formula x23=x27.forAll(x24); + Expression x30=x12.join(Expression.UNIV); + Formula x29=x30.in(x26); + Variable x34=Variable.unary("SuccessfulRun_this"); + Decls x33=x34.oneOf(x9); + Expression x36=x34.join(x13); + Formula x35=x36.in(x26); + Formula x32=x35.forAll(x33); + Expression x38=x13.join(Expression.UNIV); + Formula x37=x38.in(x9); + Variable x41=Variable.unary("SuccessfulRun_this"); + Decls x40=x41.oneOf(x9); + Expression x45=x41.join(x14); + Expression x46=x26.product(x8); + Formula x44=x45.in(x46); + Variable x49=Variable.unary(""); + Decls x48=x49.oneOf(x26); + Expression x52=x49.join(x45); + Formula x51=x52.lone(); + Formula x53=x52.in(x8); + Formula x50=x51.and(x53); + Formula x47=x50.forAll(x48); + Formula x43=x44.and(x47); + Variable x56=Variable.unary(""); + Decls x55=x56.oneOf(x8); + Expression x58=x45.join(x56); + Formula x57=x58.in(x26); + Formula x54=x57.forAll(x55); + Formula x42=x43.and(x54); + Formula x39=x42.forAll(x40); + Expression x61=x14.join(Expression.UNIV); + Expression x60=x61.join(Expression.UNIV); + Formula x59=x60.in(x9); + Variable x64=Variable.unary("SuccessfulRun_this"); + Decls x63=x64.oneOf(x9); + Expression x68=x64.join(x15); + Expression x69=x26.product(x26); + Formula x67=x68.in(x69); + Variable x72=Variable.unary(""); + Decls x71=x72.oneOf(x26); + Expression x75=x72.join(x68); + Formula x74=x75.lone(); + Formula x76=x75.in(x26); + Formula x73=x74.and(x76); + Formula x70=x73.forAll(x71); + Formula x66=x67.and(x70); + Variable x79=Variable.unary(""); + Decls x78=x79.oneOf(x26); + Expression x81=x68.join(x79); + Formula x80=x81.in(x26); + Formula x77=x80.forAll(x78); + Formula x65=x66.and(x77); + Formula x62=x65.forAll(x63); + Expression x84=x15.join(Expression.UNIV); + Expression x83=x84.join(Expression.UNIV); + Formula x82=x83.in(x9); + Expression x87=x10.product(x16); + Expression x86=x10.join(x87); + Formula x85=x86.in(x8); + Expression x90=x10.product(x17); + Expression x89=x10.join(x90); + Expression x91=x8.product(x8); + Formula x88=x89.in(x91); + Formula x92=x17.totalOrder(x8,x16,x20); + Expression x95=x11.product(x18); + Expression x94=x11.join(x95); + Formula x93=x94.in(x9); + Expression x98=x11.product(x19); + Expression x97=x11.join(x98); + Expression x99=x9.product(x9); + Formula x96=x97.in(x99); + Formula x100=x19.totalOrder(x9,x18,x21); + Expression x111=Expression.INTS.union(x5); + Expression x110=x111.union(x26); + Expression x109=x110.union(x8); + Expression x108=x109.union(x9); + Expression x107=x108.union(x10); + Expression x106=x107.union(x11); + Expression x105=x106.product(Expression.UNIV); + Expression x103=Expression.IDEN.intersection(x105); + Expression x102=x103.intersection(x12); + Formula x101=x102.no(); + Expression x114=x12.transpose(); + Formula x113=x114.in(x12); + Expression x118=x12.closure(); + Expression x120=x106.product(Expression.UNIV); + Expression x119=Expression.IDEN.intersection(x120); + Expression x117=x118.union(x119); + Expression x116=x6.join(x117); + Formula x115=x26.in(x116); + Variable x123=Variable.unary("SuccessfulRun_s"); + Expression x126=x19.join(x9); + Expression x125=x9.difference(x126); + Expression x124=x9.difference(x125); + Decls x122=x123.oneOf(x124); + Variable x131=Variable.unary("SuccessfulRun_p"); + Decls x130=x131.oneOf(x26); + Expression x135=x123.join(x14); + Expression x134=x131.join(x135); + Expression x138=x123.join(x19); + Expression x137=x138.join(x14); + Expression x136=x131.join(x137); + Formula x133=x134.eq(x136); + Expression x141=x123.join(x15); + Expression x140=x131.join(x141); + Expression x143=x138.join(x15); + Expression x142=x131.join(x143); + Formula x139=x140.eq(x142); + Formula x132=x133.and(x139); + Formula x129=x132.forAll(x130); + Formula x128=x129.not(); + Variable x146=Variable.unary("SuccessfulRun_p"); + Decls x145=x146.oneOf(x26); + Expression x151=x123.join(x14); + Expression x150=x146.join(x151); + Formula x149=x150.no(); + Formula x153=x146.eq(x6); + Expression x156=x146.join(x12); + Expression x157=x123.join(x14); + Expression x155=x156.join(x157); + Formula x154=x155.some(); + Formula x152=x153.or(x154); + Formula x148=x149.and(x152); + Formula x147=x148.not(); + Formula x144=x147.forAll(x145); + Formula x127=x128.or(x144); + Formula x121=x127.forAll(x122); + Expression x160=x18.join(x14); + Formula x159=x160.no(); + Expression x162=x18.join(x15); + Formula x161=x162.no(); + Formula x158=x159.and(x161); + Variable x165=Variable.unary("SuccessfulRun_s"); + Expression x166=x9.difference(x125); + Decls x164=x165.oneOf(x166); + Variable x169=Variable.unary("SuccessfulRun_p"); + Decls x168=x169.oneOf(x26); + Expression x173=x165.join(x13); + Formula x172=x169.in(x173); + Expression x178=x165.join(x14); + Expression x177=x169.join(x178); + Formula x176=x177.no(); + Formula x181=x169.eq(x6); + Expression x186=x165.join(x19); + Expression x185=x186.join(x14); + Expression x184=x169.join(x185); + Formula x183=x184.eq(x16); + Expression x189=x186.join(x15); + Expression x188=x169.join(x189); + Formula x187=x188.no(); + Formula x182=x183.and(x187); + Formula x180=x181.implies(x182); + Formula x191=x181.not(); + Variable x194=Variable.unary("TRAct_adjProc"); + Expression x195=x169.join(x12); + Decls x193=x194.oneOf(x195); + Expression x200=x165.join(x14); + Expression x199=x194.join(x200); + Formula x198=x199.some(); + Expression x203=x186.join(x14); + Expression x202=x169.join(x203); + Expression x204=x199.join(x17); + Formula x201=x202.eq(x204); + Formula x197=x198.and(x201); + Expression x207=x186.join(x15); + Expression x206=x169.join(x207); + Formula x205=x206.eq(x194); + Formula x196=x197.and(x205); + Formula x192=x196.forSome(x193); + Formula x190=x191.implies(x192); + Formula x179=x180.and(x190); + Formula x175=x176.and(x179); + Expression x211=x165.join(x14); + Expression x210=x169.join(x211); + Expression x213=x186.join(x14); + Expression x212=x169.join(x213); + Formula x209=x210.eq(x212); + Expression x216=x165.join(x15); + Expression x215=x169.join(x216); + Expression x218=x186.join(x15); + Expression x217=x169.join(x218); + Formula x214=x215.eq(x217); + Formula x208=x209.and(x214); + Formula x174=x175.or(x208); + Formula x171=x172.implies(x174); + Formula x220=x172.not(); + Expression x224=x165.join(x14); + Expression x223=x169.join(x224); + Expression x226=x186.join(x14); + Expression x225=x169.join(x226); + Formula x222=x223.eq(x225); + Expression x229=x165.join(x15); + Expression x228=x169.join(x229); + Expression x231=x186.join(x15); + Expression x230=x169.join(x231); + Formula x227=x228.eq(x230); + Formula x221=x222.and(x227); + Formula x219=x220.implies(x221); + Formula x170=x171.and(x219); + Formula x167=x170.forAll(x168); + Formula x163=x167.forAll(x164); + Expression x238=x125.join(x15); + Expression x237=x238.transpose(); + Expression x236=x237.closure(); + Expression x240=x106.product(Expression.UNIV); + Expression x239=Expression.IDEN.intersection(x240); + Expression x235=x236.union(x239); + Expression x234=x6.join(x235); + Formula x233=x26.in(x234); + Variable x243=Variable.unary("acyclic_x"); + Decls x242=x243.oneOf(x26); + Expression x249=x125.join(x15); + Expression x248=x249.transpose(); + Expression x247=x248.closure(); + Expression x246=x243.join(x247); + Formula x245=x243.in(x246); + Formula x244=x245.not(); + Formula x241=x244.forAll(x242); + Formula x232=x233.and(x241); + Variable x252=Variable.unary("SuccessfulRun_s"); + Expression x253=x9.difference(x125); + Decls x251=x252.oneOf(x253); + Expression x261=x252.join(x15); + Expression x260=x261.transpose(); + Expression x259=x260.closure(); + Expression x263=x106.product(Expression.UNIV); + Expression x262=Expression.IDEN.intersection(x263); + Expression x258=x259.union(x262); + Expression x257=x6.join(x258); + Formula x256=x26.in(x257); + Variable x266=Variable.unary("acyclic_x"); + Decls x265=x266.oneOf(x26); + Expression x272=x252.join(x15); + Expression x271=x272.transpose(); + Expression x270=x271.closure(); + Expression x269=x266.join(x270); + Formula x268=x266.in(x269); + Formula x267=x268.not(); + Formula x264=x267.forAll(x265); + Formula x255=x256.and(x264); + Formula x254=x255.not(); + Formula x250=x254.forAll(x251); + Formula x273=x0.eq(x0); + Formula x274=x1.eq(x1); + Formula x275=x2.eq(x2); + Formula x276=x3.eq(x3); + Formula x277=x4.eq(x4); + Formula x278=x5.eq(x5); + Formula x279=x6.eq(x6); + Formula x280=x7.eq(x7); + Formula x281=x8.eq(x8); + Formula x282=x9.eq(x9); + Formula x283=x10.eq(x10); + Formula x284=x11.eq(x11); + Formula x285=x12.eq(x12); + Formula x286=x13.eq(x13); + Formula x287=x14.eq(x14); + Formula x288=x15.eq(x15); + Formula x289=x16.eq(x16); + Formula x290=x17.eq(x17); + Formula x291=x18.eq(x18); + Formula x292=x19.eq(x19); + Formula x293=x20.eq(x20); + Formula x294=x21.eq(x21); + Formula x22=Formula.compose(FormulaOperator.AND, x23, x29, x32, x37, x39, x59, x62, x82, x85, x88, x92, x93, x96, x100, x101, x113, x115, x121, x158, x163, x232, x250, x273, x274, x275, x276, x277, x278, x279, x280, x281, x282, x283, x284, x285, x286, x287, x288, x289, x290, x291, x292, x293, x294); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x22,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/synchronsation/syncSpecNotUniqueRun.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/synchronsation/syncSpecNotUniqueRun.java new file mode 100644 index 0000000..feb6747 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/synchronsation/syncSpecNotUniqueRun.java @@ -0,0 +1,979 @@ +package kodkod.examples.models.algorithm.synchronsation; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "sync", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 2, + NestedRelationalJoins = 4, + TransitiveClosure = 36, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 18, + OrderedRelations = 0, + Constraints = 22 +) + + +public final class syncSpecNotUniqueRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/RootName"); + Relation x7 = Relation.unary("this/Name remainder"); + Relation x8 = Relation.unary("this/Dir"); + Relation x9 = Relation.unary("this/FileContents remainder"); + Relation x10 = Relation.nary("this/Name.children", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Dir$0", + "FileContents$0", "FileContents$1", "FileContents$2", "FileContents$3", "Name$0", "Name$1", + "Name$2", "Name$3", "RootName$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("RootName$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Name$0")); + x7_upper.add(factory.tuple("Name$1")); + x7_upper.add(factory.tuple("Name$2")); + x7_upper.add(factory.tuple("Name$3")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Dir$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("FileContents$0")); + x9_upper.add(factory.tuple("FileContents$1")); + x9_upper.add(factory.tuple("FileContents$2")); + x9_upper.add(factory.tuple("FileContents$3")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("RootName$0").product(factory.tuple("RootName$0"))); + x10_upper.add(factory.tuple("RootName$0").product(factory.tuple("Name$0"))); + x10_upper.add(factory.tuple("RootName$0").product(factory.tuple("Name$1"))); + x10_upper.add(factory.tuple("RootName$0").product(factory.tuple("Name$2"))); + x10_upper.add(factory.tuple("RootName$0").product(factory.tuple("Name$3"))); + x10_upper.add(factory.tuple("Name$0").product(factory.tuple("RootName$0"))); + x10_upper.add(factory.tuple("Name$0").product(factory.tuple("Name$0"))); + x10_upper.add(factory.tuple("Name$0").product(factory.tuple("Name$1"))); + x10_upper.add(factory.tuple("Name$0").product(factory.tuple("Name$2"))); + x10_upper.add(factory.tuple("Name$0").product(factory.tuple("Name$3"))); + x10_upper.add(factory.tuple("Name$1").product(factory.tuple("RootName$0"))); + x10_upper.add(factory.tuple("Name$1").product(factory.tuple("Name$0"))); + x10_upper.add(factory.tuple("Name$1").product(factory.tuple("Name$1"))); + x10_upper.add(factory.tuple("Name$1").product(factory.tuple("Name$2"))); + x10_upper.add(factory.tuple("Name$1").product(factory.tuple("Name$3"))); + x10_upper.add(factory.tuple("Name$2").product(factory.tuple("RootName$0"))); + x10_upper.add(factory.tuple("Name$2").product(factory.tuple("Name$0"))); + x10_upper.add(factory.tuple("Name$2").product(factory.tuple("Name$1"))); + x10_upper.add(factory.tuple("Name$2").product(factory.tuple("Name$2"))); + x10_upper.add(factory.tuple("Name$2").product(factory.tuple("Name$3"))); + x10_upper.add(factory.tuple("Name$3").product(factory.tuple("RootName$0"))); + x10_upper.add(factory.tuple("Name$3").product(factory.tuple("Name$0"))); + x10_upper.add(factory.tuple("Name$3").product(factory.tuple("Name$1"))); + x10_upper.add(factory.tuple("Name$3").product(factory.tuple("Name$2"))); + x10_upper.add(factory.tuple("Name$3").product(factory.tuple("Name$3"))); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x14=Variable.unary("SyncSpecNotUnique_this"); + Expression x15=x6.union(x7); + Decls x13=x14.oneOf(x15); + Expression x17=x14.join(x10); + Formula x16=x17.in(x15); + Formula x12=x16.forAll(x13); + Expression x19=x10.join(Expression.UNIV); + Formula x18=x19.in(x15); + Variable x25=Variable.unary("acyclic_x"); + Decls x24=x25.oneOf(x15); + Expression x29=x10.closure(); + Expression x28=x25.join(x29); + Formula x27=x25.in(x28); + Formula x26=x27.not(); + Formula x23=x26.forAll(x24); + Variable x32=Variable.unary("forest_n"); + Decls x31=x32.oneOf(x15); + Expression x34=x10.join(x32); + Formula x33=x34.lone(); + Formula x30=x33.forAll(x31); + Formula x22=x23.and(x30); + Variable x38=Variable.unary("tree_root"); + Decls x37=x38.oneOf(x15); + Expression x40=x10.join(x38); + Formula x39=x40.no(); + Expression x36=x39.comprehension(x37); + Formula x35=x36.lone(); + Formula x21=x22.and(x35); + Expression x44=x10.closure(); + Expression x50=Expression.INTS.union(x5); + Expression x49=x50.union(x15); + Expression x52=x8.union(x9); + Expression x48=x49.union(x52); + Expression x47=x48.product(Expression.UNIV); + Expression x45=Expression.IDEN.intersection(x47); + Expression x43=x44.union(x45); + Expression x42=x6.join(x43); + Formula x41=x15.in(x42); + Variable x56=Variable.nary("SyncSpecNotUnique_A",2); + Expression x57=x15.product(x52); + Decls x55=x56.setOf(x57); + Variable x59=Variable.nary("SyncSpecNotUnique_B",2); + Decls x58=x59.setOf(x57); + Variable x61=Variable.nary("SyncSpecNotUnique_A1'",2); + Decls x60=x61.setOf(x57); + Variable x63=Variable.nary("SyncSpecNotUnique_B1'",2); + Decls x62=x63.setOf(x57); + Variable x65=Variable.nary("SyncSpecNotUnique_A2'",2); + Decls x64=x65.setOf(x57); + Variable x67=Variable.nary("SyncSpecNotUnique_B2'",2); + Decls x66=x67.setOf(x57); + Variable x69=Variable.unary("SyncSpecNotUnique_Adirty"); + Decls x68=x69.setOf(x15); + Variable x71=Variable.unary("SyncSpecNotUnique_Bdirty"); + Decls x70=x71.setOf(x15); + Decls x54=x55.and(x58).and(x60).and(x62).and(x64).and(x66).and(x68).and(x70); + Expression x76=x15.product(x52); + Formula x75=x56.in(x76); + Variable x79=Variable.unary(""); + Decls x78=x79.oneOf(x15); + Expression x82=x79.join(x56); + Formula x81=x82.lone(); + Formula x83=x82.in(x52); + Formula x80=x81.and(x83); + Formula x77=x80.forAll(x78); + Formula x74=x75.and(x77); + Variable x86=Variable.unary(""); + Decls x85=x86.oneOf(x52); + Expression x88=x56.join(x86); + Formula x87=x88.in(x15); + Formula x84=x87.forAll(x85); + Formula x73=x74.and(x84); + Expression x92=x15.product(x52); + Formula x91=x59.in(x92); + Variable x95=Variable.unary(""); + Decls x94=x95.oneOf(x15); + Expression x98=x95.join(x59); + Formula x97=x98.lone(); + Formula x99=x98.in(x52); + Formula x96=x97.and(x99); + Formula x93=x96.forAll(x94); + Formula x90=x91.and(x93); + Variable x102=Variable.unary(""); + Decls x101=x102.oneOf(x52); + Expression x104=x59.join(x102); + Formula x103=x104.in(x15); + Formula x100=x103.forAll(x101); + Formula x89=x90.and(x100); + Expression x108=x15.product(x52); + Formula x107=x61.in(x108); + Variable x111=Variable.unary(""); + Decls x110=x111.oneOf(x15); + Expression x114=x111.join(x61); + Formula x113=x114.lone(); + Formula x115=x114.in(x52); + Formula x112=x113.and(x115); + Formula x109=x112.forAll(x110); + Formula x106=x107.and(x109); + Variable x118=Variable.unary(""); + Decls x117=x118.oneOf(x52); + Expression x120=x61.join(x118); + Formula x119=x120.in(x15); + Formula x116=x119.forAll(x117); + Formula x105=x106.and(x116); + Expression x124=x15.product(x52); + Formula x123=x63.in(x124); + Variable x127=Variable.unary(""); + Decls x126=x127.oneOf(x15); + Expression x130=x127.join(x63); + Formula x129=x130.lone(); + Formula x131=x130.in(x52); + Formula x128=x129.and(x131); + Formula x125=x128.forAll(x126); + Formula x122=x123.and(x125); + Variable x134=Variable.unary(""); + Decls x133=x134.oneOf(x52); + Expression x136=x63.join(x134); + Formula x135=x136.in(x15); + Formula x132=x135.forAll(x133); + Formula x121=x122.and(x132); + Expression x140=x15.product(x52); + Formula x139=x65.in(x140); + Variable x143=Variable.unary(""); + Decls x142=x143.oneOf(x15); + Expression x146=x143.join(x65); + Formula x145=x146.lone(); + Formula x147=x146.in(x52); + Formula x144=x145.and(x147); + Formula x141=x144.forAll(x142); + Formula x138=x139.and(x141); + Variable x150=Variable.unary(""); + Decls x149=x150.oneOf(x52); + Expression x152=x65.join(x150); + Formula x151=x152.in(x15); + Formula x148=x151.forAll(x149); + Formula x137=x138.and(x148); + Expression x156=x15.product(x52); + Formula x155=x67.in(x156); + Variable x159=Variable.unary(""); + Decls x158=x159.oneOf(x15); + Expression x162=x159.join(x67); + Formula x161=x162.lone(); + Formula x163=x162.in(x52); + Formula x160=x161.and(x163); + Formula x157=x160.forAll(x158); + Formula x154=x155.and(x157); + Variable x166=Variable.unary(""); + Decls x165=x166.oneOf(x52); + Expression x168=x67.join(x166); + Formula x167=x168.in(x15); + Formula x164=x167.forAll(x165); + Formula x153=x154.and(x164); + Variable x174=Variable.unary("IsValidFS_n"); + Expression x175=x15.difference(x6); + Decls x173=x174.oneOf(x175); + Expression x181=x174.join(x56); + Formula x180=x181.eq(x8); + Formula x179=x180.not(); + Formula x178=x179.not(); + Expression x185=x10.closure(); + Expression x184=x174.join(x185); + Expression x183=x184.join(x56); + Formula x182=x183.no(); + Formula x177=x178.or(x182); + Expression x189=x174.join(x56); + Formula x188=x189.some(); + Formula x187=x188.not(); + Expression x193=x10.transpose(); + Expression x192=x174.join(x193); + Expression x191=x192.join(x56); + Formula x190=x191.some(); + Formula x186=x187.or(x190); + Formula x176=x177.and(x186); + Formula x172=x176.forAll(x173); + Expression x195=x6.join(x56); + Formula x194=x195.eq(x8); + Formula x171=x172.and(x194); + Variable x201=Variable.unary("IsValidFS_n"); + Expression x202=x15.difference(x6); + Decls x200=x201.oneOf(x202); + Expression x208=x201.join(x59); + Formula x207=x208.eq(x8); + Formula x206=x207.not(); + Formula x205=x206.not(); + Expression x212=x10.closure(); + Expression x211=x201.join(x212); + Expression x210=x211.join(x59); + Formula x209=x210.no(); + Formula x204=x205.or(x209); + Expression x216=x201.join(x59); + Formula x215=x216.some(); + Formula x214=x215.not(); + Expression x220=x10.transpose(); + Expression x219=x201.join(x220); + Expression x218=x219.join(x59); + Formula x217=x218.some(); + Formula x213=x214.or(x217); + Formula x203=x204.and(x213); + Formula x199=x203.forAll(x200); + Expression x222=x6.join(x59); + Formula x221=x222.eq(x8); + Formula x198=x199.and(x221); + Variable x226=Variable.unary("IsValidDirty_n"); + Decls x225=x226.oneOf(x71); + Expression x229=x10.transpose(); + Expression x228=x226.join(x229); + Formula x227=x228.in(x71); + Formula x224=x227.forAll(x225); + Formula x232=x6.in(x71); + Formula x231=x232.not(); + Expression x234=x71.difference(x6); + Formula x233=x234.some(); + Formula x230=x231.or(x233); + Formula x223=x224.and(x230); + Formula x197=x198.and(x223); + Formula x237=x61.eq(x65); + Formula x236=x237.not(); + Formula x239=x63.eq(x67); + Formula x238=x239.not(); + Formula x235=x236.or(x238); + Formula x196=x197.and(x235); + Formula x170=x171.and(x196); + Variable x245=Variable.unary("IsValidDirty_n"); + Decls x244=x245.oneOf(x69); + Expression x248=x10.transpose(); + Expression x247=x245.join(x248); + Formula x246=x247.in(x69); + Formula x243=x246.forAll(x244); + Formula x251=x6.in(x69); + Formula x250=x251.not(); + Expression x253=x69.difference(x6); + Formula x252=x253.some(); + Formula x249=x250.or(x252); + Formula x242=x243.and(x249); + Variable x261=Variable.unary("IsValidFS_n"); + Expression x262=x15.difference(x6); + Decls x260=x261.oneOf(x262); + Expression x268=x261.join(x56); + Formula x267=x268.eq(x8); + Formula x266=x267.not(); + Formula x265=x266.not(); + Expression x272=x10.closure(); + Expression x271=x261.join(x272); + Expression x270=x271.join(x56); + Formula x269=x270.no(); + Formula x264=x265.or(x269); + Expression x276=x261.join(x56); + Formula x275=x276.some(); + Formula x274=x275.not(); + Expression x280=x10.transpose(); + Expression x279=x261.join(x280); + Expression x278=x279.join(x56); + Formula x277=x278.some(); + Formula x273=x274.or(x277); + Formula x263=x264.and(x273); + Formula x259=x263.forAll(x260); + Expression x282=x6.join(x56); + Formula x281=x282.eq(x8); + Formula x258=x259.and(x281); + Variable x287=Variable.unary("IsValidFS_n"); + Expression x288=x15.difference(x6); + Decls x286=x287.oneOf(x288); + Expression x294=x287.join(x59); + Formula x293=x294.eq(x8); + Formula x292=x293.not(); + Formula x291=x292.not(); + Expression x298=x10.closure(); + Expression x297=x287.join(x298); + Expression x296=x297.join(x59); + Formula x295=x296.no(); + Formula x290=x291.or(x295); + Expression x302=x287.join(x59); + Formula x301=x302.some(); + Formula x300=x301.not(); + Expression x306=x10.transpose(); + Expression x305=x287.join(x306); + Expression x304=x305.join(x59); + Formula x303=x304.some(); + Formula x299=x300.or(x303); + Formula x289=x290.and(x299); + Formula x285=x289.forAll(x286); + Expression x308=x6.join(x59); + Formula x307=x308.eq(x8); + Formula x284=x285.and(x307); + Variable x312=Variable.unary("IsValidDirty_n"); + Decls x311=x312.oneOf(x71); + Expression x315=x10.transpose(); + Expression x314=x312.join(x315); + Formula x313=x314.in(x71); + Formula x310=x313.forAll(x311); + Formula x318=x6.in(x71); + Formula x317=x318.not(); + Expression x320=x71.difference(x6); + Formula x319=x320.some(); + Formula x316=x317.or(x319); + Formula x309=x310.and(x316); + Formula x283=x284.and(x309); + Formula x257=x258.and(x283); + Variable x324=Variable.unary("IsValidDirty_n"); + Decls x323=x324.oneOf(x69); + Expression x327=x10.transpose(); + Expression x326=x324.join(x327); + Formula x325=x326.in(x69); + Formula x322=x325.forAll(x323); + Formula x330=x6.in(x69); + Formula x329=x330.not(); + Expression x332=x69.difference(x6); + Formula x331=x332.some(); + Formula x328=x329.or(x331); + Formula x321=x322.and(x328); + Formula x256=x257.and(x321); + Formula x255=x256.not(); + Variable x337=Variable.unary("SyncSpec_p"); + Decls x336=x337.oneOf(x15); + Formula x341=x337.eq(x6); + Expression x346=x10.transpose(); + Expression x345=x337.join(x346); + Expression x344=x345.join(x56); + Formula x343=x344.eq(x8); + Expression x350=x10.transpose(); + Expression x349=x337.join(x350); + Expression x348=x349.join(x59); + Formula x347=x348.eq(x8); + Formula x342=x343.and(x347); + Formula x340=x341.or(x342); + Formula x339=x340.not(); + Expression x356=x337.join(x56); + Expression x357=x337.join(x59); + Formula x355=x356.eq(x357); + Formula x354=x355.not(); + Expression x360=x337.join(x61); + Expression x361=x337.join(x56); + Formula x359=x360.eq(x361); + Expression x363=x337.join(x63); + Expression x364=x337.join(x59); + Formula x362=x363.eq(x364); + Formula x358=x359.and(x362); + Formula x353=x354.or(x358); + Formula x369=x337.in(x69); + Formula x368=x369.not(); + Formula x367=x368.not(); + Expression x376=x10.closure(); + Expression x378=x48.product(Expression.UNIV); + Expression x377=Expression.IDEN.intersection(x378); + Expression x375=x376.union(x377); + Expression x374=x337.join(x375); + Expression x373=x374.product(x52); + Expression x372=x61.intersection(x373); + Expression x383=x10.closure(); + Expression x385=x48.product(Expression.UNIV); + Expression x384=Expression.IDEN.intersection(x385); + Expression x382=x383.union(x384); + Expression x381=x337.join(x382); + Expression x380=x381.product(x52); + Expression x379=x59.intersection(x380); + Formula x371=x372.eq(x379); + Expression x391=x10.closure(); + Expression x393=x48.product(Expression.UNIV); + Expression x392=Expression.IDEN.intersection(x393); + Expression x390=x391.union(x392); + Expression x389=x337.join(x390); + Expression x388=x389.product(x52); + Expression x387=x63.intersection(x388); + Expression x398=x10.closure(); + Expression x400=x48.product(Expression.UNIV); + Expression x399=Expression.IDEN.intersection(x400); + Expression x397=x398.union(x399); + Expression x396=x337.join(x397); + Expression x395=x396.product(x52); + Expression x394=x59.intersection(x395); + Formula x386=x387.eq(x394); + Formula x370=x371.and(x386); + Formula x366=x367.or(x370); + Formula x405=x337.in(x69); + Formula x406=x337.in(x71); + Formula x404=x405.and(x406); + Expression x409=x337.join(x56); + Expression x410=x337.join(x59); + Formula x408=x409.eq(x410); + Formula x407=x408.not(); + Formula x403=x404.and(x407); + Formula x402=x403.not(); + Expression x417=x10.closure(); + Expression x419=x48.product(Expression.UNIV); + Expression x418=Expression.IDEN.intersection(x419); + Expression x416=x417.union(x418); + Expression x415=x337.join(x416); + Expression x414=x415.product(x52); + Expression x413=x61.intersection(x414); + Expression x424=x10.closure(); + Expression x426=x48.product(Expression.UNIV); + Expression x425=Expression.IDEN.intersection(x426); + Expression x423=x424.union(x425); + Expression x422=x337.join(x423); + Expression x421=x422.product(x52); + Expression x420=x56.intersection(x421); + Formula x412=x413.eq(x420); + Expression x432=x10.closure(); + Expression x434=x48.product(Expression.UNIV); + Expression x433=Expression.IDEN.intersection(x434); + Expression x431=x432.union(x433); + Expression x430=x337.join(x431); + Expression x429=x430.product(x52); + Expression x428=x63.intersection(x429); + Expression x439=x10.closure(); + Expression x441=x48.product(Expression.UNIV); + Expression x440=Expression.IDEN.intersection(x441); + Expression x438=x439.union(x440); + Expression x437=x337.join(x438); + Expression x436=x437.product(x52); + Expression x435=x59.intersection(x436); + Formula x427=x428.eq(x435); + Formula x411=x412.and(x427); + Formula x401=x402.or(x411); + Formula x365=x366.and(x401); + Formula x352=x353.and(x365); + Formula x445=x337.in(x71); + Formula x444=x445.not(); + Formula x443=x444.not(); + Expression x452=x10.closure(); + Expression x454=x48.product(Expression.UNIV); + Expression x453=Expression.IDEN.intersection(x454); + Expression x451=x452.union(x453); + Expression x450=x337.join(x451); + Expression x449=x450.product(x52); + Expression x448=x63.intersection(x449); + Expression x459=x10.closure(); + Expression x461=x48.product(Expression.UNIV); + Expression x460=Expression.IDEN.intersection(x461); + Expression x458=x459.union(x460); + Expression x457=x337.join(x458); + Expression x456=x457.product(x52); + Expression x455=x56.intersection(x456); + Formula x447=x448.eq(x455); + Expression x467=x10.closure(); + Expression x469=x48.product(Expression.UNIV); + Expression x468=Expression.IDEN.intersection(x469); + Expression x466=x467.union(x468); + Expression x465=x337.join(x466); + Expression x464=x465.product(x52); + Expression x463=x61.intersection(x464); + Expression x474=x10.closure(); + Expression x476=x48.product(Expression.UNIV); + Expression x475=Expression.IDEN.intersection(x476); + Expression x473=x474.union(x475); + Expression x472=x337.join(x473); + Expression x471=x472.product(x52); + Expression x470=x56.intersection(x471); + Formula x462=x463.eq(x470); + Formula x446=x447.and(x462); + Formula x442=x443.or(x446); + Formula x351=x352.and(x442); + Formula x338=x339.or(x351); + Formula x335=x338.forAll(x336); + Variable x480=Variable.unary("IsValidFS_n"); + Expression x481=x15.difference(x6); + Decls x479=x480.oneOf(x481); + Expression x487=x480.join(x61); + Formula x486=x487.eq(x8); + Formula x485=x486.not(); + Formula x484=x485.not(); + Expression x491=x10.closure(); + Expression x490=x480.join(x491); + Expression x489=x490.join(x61); + Formula x488=x489.no(); + Formula x483=x484.or(x488); + Expression x495=x480.join(x61); + Formula x494=x495.some(); + Formula x493=x494.not(); + Expression x499=x10.transpose(); + Expression x498=x480.join(x499); + Expression x497=x498.join(x61); + Formula x496=x497.some(); + Formula x492=x493.or(x496); + Formula x482=x483.and(x492); + Formula x478=x482.forAll(x479); + Expression x501=x6.join(x61); + Formula x500=x501.eq(x8); + Formula x477=x478.and(x500); + Formula x334=x335.and(x477); + Variable x505=Variable.unary("IsValidFS_n"); + Expression x506=x15.difference(x6); + Decls x504=x505.oneOf(x506); + Expression x512=x505.join(x63); + Formula x511=x512.eq(x8); + Formula x510=x511.not(); + Formula x509=x510.not(); + Expression x516=x10.closure(); + Expression x515=x505.join(x516); + Expression x514=x515.join(x63); + Formula x513=x514.no(); + Formula x508=x509.or(x513); + Expression x520=x505.join(x63); + Formula x519=x520.some(); + Formula x518=x519.not(); + Expression x524=x10.transpose(); + Expression x523=x505.join(x524); + Expression x522=x523.join(x63); + Formula x521=x522.some(); + Formula x517=x518.or(x521); + Formula x507=x508.and(x517); + Formula x503=x507.forAll(x504); + Expression x526=x6.join(x63); + Formula x525=x526.eq(x8); + Formula x502=x503.and(x525); + Formula x333=x334.and(x502); + Formula x254=x255.or(x333); + Formula x241=x242.and(x254); + Variable x534=Variable.unary("IsValidFS_n"); + Expression x535=x15.difference(x6); + Decls x533=x534.oneOf(x535); + Expression x541=x534.join(x56); + Formula x540=x541.eq(x8); + Formula x539=x540.not(); + Formula x538=x539.not(); + Expression x545=x10.closure(); + Expression x544=x534.join(x545); + Expression x543=x544.join(x56); + Formula x542=x543.no(); + Formula x537=x538.or(x542); + Expression x549=x534.join(x56); + Formula x548=x549.some(); + Formula x547=x548.not(); + Expression x553=x10.transpose(); + Expression x552=x534.join(x553); + Expression x551=x552.join(x56); + Formula x550=x551.some(); + Formula x546=x547.or(x550); + Formula x536=x537.and(x546); + Formula x532=x536.forAll(x533); + Expression x555=x6.join(x56); + Formula x554=x555.eq(x8); + Formula x531=x532.and(x554); + Variable x560=Variable.unary("IsValidFS_n"); + Expression x561=x15.difference(x6); + Decls x559=x560.oneOf(x561); + Expression x567=x560.join(x59); + Formula x566=x567.eq(x8); + Formula x565=x566.not(); + Formula x564=x565.not(); + Expression x571=x10.closure(); + Expression x570=x560.join(x571); + Expression x569=x570.join(x59); + Formula x568=x569.no(); + Formula x563=x564.or(x568); + Expression x575=x560.join(x59); + Formula x574=x575.some(); + Formula x573=x574.not(); + Expression x579=x10.transpose(); + Expression x578=x560.join(x579); + Expression x577=x578.join(x59); + Formula x576=x577.some(); + Formula x572=x573.or(x576); + Formula x562=x563.and(x572); + Formula x558=x562.forAll(x559); + Expression x581=x6.join(x59); + Formula x580=x581.eq(x8); + Formula x557=x558.and(x580); + Variable x585=Variable.unary("IsValidDirty_n"); + Decls x584=x585.oneOf(x71); + Expression x588=x10.transpose(); + Expression x587=x585.join(x588); + Formula x586=x587.in(x71); + Formula x583=x586.forAll(x584); + Formula x591=x6.in(x71); + Formula x590=x591.not(); + Expression x593=x71.difference(x6); + Formula x592=x593.some(); + Formula x589=x590.or(x592); + Formula x582=x583.and(x589); + Formula x556=x557.and(x582); + Formula x530=x531.and(x556); + Variable x597=Variable.unary("IsValidDirty_n"); + Decls x596=x597.oneOf(x69); + Expression x600=x10.transpose(); + Expression x599=x597.join(x600); + Formula x598=x599.in(x69); + Formula x595=x598.forAll(x596); + Formula x603=x6.in(x69); + Formula x602=x603.not(); + Expression x605=x69.difference(x6); + Formula x604=x605.some(); + Formula x601=x602.or(x604); + Formula x594=x595.and(x601); + Formula x529=x530.and(x594); + Formula x528=x529.not(); + Variable x610=Variable.unary("SyncSpec_p"); + Decls x609=x610.oneOf(x15); + Formula x614=x610.eq(x6); + Expression x619=x10.transpose(); + Expression x618=x610.join(x619); + Expression x617=x618.join(x56); + Formula x616=x617.eq(x8); + Expression x623=x10.transpose(); + Expression x622=x610.join(x623); + Expression x621=x622.join(x59); + Formula x620=x621.eq(x8); + Formula x615=x616.and(x620); + Formula x613=x614.or(x615); + Formula x612=x613.not(); + Expression x629=x610.join(x56); + Expression x630=x610.join(x59); + Formula x628=x629.eq(x630); + Formula x627=x628.not(); + Expression x633=x610.join(x65); + Expression x634=x610.join(x56); + Formula x632=x633.eq(x634); + Expression x636=x610.join(x67); + Expression x637=x610.join(x59); + Formula x635=x636.eq(x637); + Formula x631=x632.and(x635); + Formula x626=x627.or(x631); + Formula x642=x610.in(x69); + Formula x641=x642.not(); + Formula x640=x641.not(); + Expression x649=x10.closure(); + Expression x651=x48.product(Expression.UNIV); + Expression x650=Expression.IDEN.intersection(x651); + Expression x648=x649.union(x650); + Expression x647=x610.join(x648); + Expression x646=x647.product(x52); + Expression x645=x65.intersection(x646); + Expression x656=x10.closure(); + Expression x658=x48.product(Expression.UNIV); + Expression x657=Expression.IDEN.intersection(x658); + Expression x655=x656.union(x657); + Expression x654=x610.join(x655); + Expression x653=x654.product(x52); + Expression x652=x59.intersection(x653); + Formula x644=x645.eq(x652); + Expression x664=x10.closure(); + Expression x666=x48.product(Expression.UNIV); + Expression x665=Expression.IDEN.intersection(x666); + Expression x663=x664.union(x665); + Expression x662=x610.join(x663); + Expression x661=x662.product(x52); + Expression x660=x67.intersection(x661); + Expression x671=x10.closure(); + Expression x673=x48.product(Expression.UNIV); + Expression x672=Expression.IDEN.intersection(x673); + Expression x670=x671.union(x672); + Expression x669=x610.join(x670); + Expression x668=x669.product(x52); + Expression x667=x59.intersection(x668); + Formula x659=x660.eq(x667); + Formula x643=x644.and(x659); + Formula x639=x640.or(x643); + Formula x678=x610.in(x69); + Formula x679=x610.in(x71); + Formula x677=x678.and(x679); + Expression x682=x610.join(x56); + Expression x683=x610.join(x59); + Formula x681=x682.eq(x683); + Formula x680=x681.not(); + Formula x676=x677.and(x680); + Formula x675=x676.not(); + Expression x690=x10.closure(); + Expression x692=x48.product(Expression.UNIV); + Expression x691=Expression.IDEN.intersection(x692); + Expression x689=x690.union(x691); + Expression x688=x610.join(x689); + Expression x687=x688.product(x52); + Expression x686=x65.intersection(x687); + Expression x697=x10.closure(); + Expression x699=x48.product(Expression.UNIV); + Expression x698=Expression.IDEN.intersection(x699); + Expression x696=x697.union(x698); + Expression x695=x610.join(x696); + Expression x694=x695.product(x52); + Expression x693=x56.intersection(x694); + Formula x685=x686.eq(x693); + Expression x705=x10.closure(); + Expression x707=x48.product(Expression.UNIV); + Expression x706=Expression.IDEN.intersection(x707); + Expression x704=x705.union(x706); + Expression x703=x610.join(x704); + Expression x702=x703.product(x52); + Expression x701=x67.intersection(x702); + Expression x712=x10.closure(); + Expression x714=x48.product(Expression.UNIV); + Expression x713=Expression.IDEN.intersection(x714); + Expression x711=x712.union(x713); + Expression x710=x610.join(x711); + Expression x709=x710.product(x52); + Expression x708=x59.intersection(x709); + Formula x700=x701.eq(x708); + Formula x684=x685.and(x700); + Formula x674=x675.or(x684); + Formula x638=x639.and(x674); + Formula x625=x626.and(x638); + Formula x718=x610.in(x71); + Formula x717=x718.not(); + Formula x716=x717.not(); + Expression x725=x10.closure(); + Expression x727=x48.product(Expression.UNIV); + Expression x726=Expression.IDEN.intersection(x727); + Expression x724=x725.union(x726); + Expression x723=x610.join(x724); + Expression x722=x723.product(x52); + Expression x721=x67.intersection(x722); + Expression x732=x10.closure(); + Expression x734=x48.product(Expression.UNIV); + Expression x733=Expression.IDEN.intersection(x734); + Expression x731=x732.union(x733); + Expression x730=x610.join(x731); + Expression x729=x730.product(x52); + Expression x728=x56.intersection(x729); + Formula x720=x721.eq(x728); + Expression x740=x10.closure(); + Expression x742=x48.product(Expression.UNIV); + Expression x741=Expression.IDEN.intersection(x742); + Expression x739=x740.union(x741); + Expression x738=x610.join(x739); + Expression x737=x738.product(x52); + Expression x736=x65.intersection(x737); + Expression x747=x10.closure(); + Expression x749=x48.product(Expression.UNIV); + Expression x748=Expression.IDEN.intersection(x749); + Expression x746=x747.union(x748); + Expression x745=x610.join(x746); + Expression x744=x745.product(x52); + Expression x743=x56.intersection(x744); + Formula x735=x736.eq(x743); + Formula x719=x720.and(x735); + Formula x715=x716.or(x719); + Formula x624=x625.and(x715); + Formula x611=x612.or(x624); + Formula x608=x611.forAll(x609); + Variable x753=Variable.unary("IsValidFS_n"); + Expression x754=x15.difference(x6); + Decls x752=x753.oneOf(x754); + Expression x760=x753.join(x65); + Formula x759=x760.eq(x8); + Formula x758=x759.not(); + Formula x757=x758.not(); + Expression x764=x10.closure(); + Expression x763=x753.join(x764); + Expression x762=x763.join(x65); + Formula x761=x762.no(); + Formula x756=x757.or(x761); + Expression x768=x753.join(x65); + Formula x767=x768.some(); + Formula x766=x767.not(); + Expression x772=x10.transpose(); + Expression x771=x753.join(x772); + Expression x770=x771.join(x65); + Formula x769=x770.some(); + Formula x765=x766.or(x769); + Formula x755=x756.and(x765); + Formula x751=x755.forAll(x752); + Expression x774=x6.join(x65); + Formula x773=x774.eq(x8); + Formula x750=x751.and(x773); + Formula x607=x608.and(x750); + Variable x778=Variable.unary("IsValidFS_n"); + Expression x779=x15.difference(x6); + Decls x777=x778.oneOf(x779); + Expression x785=x778.join(x67); + Formula x784=x785.eq(x8); + Formula x783=x784.not(); + Formula x782=x783.not(); + Expression x789=x10.closure(); + Expression x788=x778.join(x789); + Expression x787=x788.join(x67); + Formula x786=x787.no(); + Formula x781=x782.or(x786); + Expression x793=x778.join(x67); + Formula x792=x793.some(); + Formula x791=x792.not(); + Expression x797=x10.transpose(); + Expression x796=x778.join(x797); + Expression x795=x796.join(x67); + Formula x794=x795.some(); + Formula x790=x791.or(x794); + Formula x780=x781.and(x790); + Formula x776=x780.forAll(x777); + Expression x799=x6.join(x67); + Formula x798=x799.eq(x8); + Formula x775=x776.and(x798); + Formula x606=x607.and(x775); + Formula x527=x528.or(x606); + Formula x240=x241.and(x527); + Formula x169=x170.and(x240); + Formula x72=Formula.compose(FormulaOperator.AND, x73, x89, x105, x121, x137, x153, x169); + Formula x53=x72.forSome(x54); + Formula x800=x0.eq(x0); + Formula x801=x1.eq(x1); + Formula x802=x2.eq(x2); + Formula x803=x3.eq(x3); + Formula x804=x4.eq(x4); + Formula x805=x5.eq(x5); + Formula x806=x6.eq(x6); + Formula x807=x7.eq(x7); + Formula x808=x8.eq(x8); + Formula x809=x9.eq(x9); + Formula x810=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x18, x21, x41, x53, x800, x801, x802, x803, x804, x805, x806, x807, x808, x809, x810); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/algorithm/synchronsation/syncimplCorrectnessCheck.java b/Source/kodkod/examples/kodkod/examples/models/algorithm/synchronsation/syncimplCorrectnessCheck.java new file mode 100644 index 0000000..4db3157 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/algorithm/synchronsation/syncimplCorrectnessCheck.java @@ -0,0 +1,1222 @@ +package kodkod.examples.models.algorithm.synchronsation; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "syncimpl", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 8, + TernaryRelations = 5, + NaryRelations = 0, + HierarchicalTypes = 3, + NestedRelationalJoins = 8, + TransitiveClosure = 65, + NestedQuantifiers = 4, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 50, + OrderedRelations = 1, + Constraints = 52 +) + + +public final class syncimplCorrectnessCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/ReconName"); + Relation x7 = Relation.unary("sync/RootName"); + Relation x8 = Relation.unary("sync/Name remainder"); + Relation x9 = Relation.unary("sync/Dir"); + Relation x10 = Relation.unary("sync/FileContents remainder"); + Relation x11 = Relation.unary("ord/Ord"); + Relation x12 = Relation.nary("this/ReconName.Ain", 3); + Relation x13 = Relation.nary("this/ReconName.Bin", 3); + Relation x14 = Relation.nary("this/ReconName.Aout", 3); + Relation x15 = Relation.nary("this/ReconName.Bout", 3); + Relation x16 = Relation.nary("this/ReconName.p_children", 2); + Relation x17 = Relation.nary("this/ReconName.first_p_child", 2); + Relation x18 = Relation.nary("this/ReconName.last_p_child", 2); + Relation x19 = Relation.nary("this/ReconName.prev_p_child", 3); + Relation x20 = Relation.nary("sync/Name.children", 2); + Relation x21 = Relation.unary("ord/Ord.First"); + Relation x22 = Relation.nary("ord/Ord.Next", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "ord/Ord$0", + "sync/Dir$0", "sync/FileContents$0", "sync/Name$0", "sync/Name$1", "sync/Name$2", "sync/RootName$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("sync/Name$0")); + x6_upper.add(factory.tuple("sync/Name$1")); + x6_upper.add(factory.tuple("sync/Name$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("sync/RootName$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("sync/Name$0")); + x8_upper.add(factory.tuple("sync/Name$1")); + x8_upper.add(factory.tuple("sync/Name$2")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("sync/Dir$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("sync/FileContents$0")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("ord/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Dir$0"))); + x12_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/FileContents$0"))); + x12_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Dir$0"))); + x12_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/FileContents$0"))); + x12_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Dir$0"))); + x12_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/FileContents$0"))); + x12_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Dir$0"))); + x12_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/FileContents$0"))); + x12_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Dir$0"))); + x12_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/FileContents$0"))); + x12_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Dir$0"))); + x12_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/FileContents$0"))); + x12_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Dir$0"))); + x12_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/FileContents$0"))); + x12_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Dir$0"))); + x12_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/FileContents$0"))); + x12_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Dir$0"))); + x12_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/FileContents$0"))); + x12_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Dir$0"))); + x12_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/FileContents$0"))); + x12_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Dir$0"))); + x12_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/FileContents$0"))); + x12_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Dir$0"))); + x12_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/FileContents$0"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(3); + x13_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Dir$0"))); + x13_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/FileContents$0"))); + x13_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Dir$0"))); + x13_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/FileContents$0"))); + x13_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Dir$0"))); + x13_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/FileContents$0"))); + x13_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Dir$0"))); + x13_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/FileContents$0"))); + x13_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Dir$0"))); + x13_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/FileContents$0"))); + x13_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Dir$0"))); + x13_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/FileContents$0"))); + x13_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Dir$0"))); + x13_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/FileContents$0"))); + x13_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Dir$0"))); + x13_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/FileContents$0"))); + x13_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Dir$0"))); + x13_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/FileContents$0"))); + x13_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Dir$0"))); + x13_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/FileContents$0"))); + x13_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Dir$0"))); + x13_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/FileContents$0"))); + x13_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Dir$0"))); + x13_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/FileContents$0"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(3); + x14_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Dir$0"))); + x14_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/FileContents$0"))); + x14_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Dir$0"))); + x14_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/FileContents$0"))); + x14_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Dir$0"))); + x14_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/FileContents$0"))); + x14_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Dir$0"))); + x14_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/FileContents$0"))); + x14_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Dir$0"))); + x14_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/FileContents$0"))); + x14_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Dir$0"))); + x14_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/FileContents$0"))); + x14_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Dir$0"))); + x14_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/FileContents$0"))); + x14_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Dir$0"))); + x14_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/FileContents$0"))); + x14_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Dir$0"))); + x14_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/FileContents$0"))); + x14_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Dir$0"))); + x14_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/FileContents$0"))); + x14_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Dir$0"))); + x14_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/FileContents$0"))); + x14_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Dir$0"))); + x14_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/FileContents$0"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(3); + x15_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Dir$0"))); + x15_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/FileContents$0"))); + x15_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Dir$0"))); + x15_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/FileContents$0"))); + x15_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Dir$0"))); + x15_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/FileContents$0"))); + x15_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Dir$0"))); + x15_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/FileContents$0"))); + x15_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Dir$0"))); + x15_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/FileContents$0"))); + x15_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Dir$0"))); + x15_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/FileContents$0"))); + x15_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Dir$0"))); + x15_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/FileContents$0"))); + x15_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Dir$0"))); + x15_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/FileContents$0"))); + x15_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Dir$0"))); + x15_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/FileContents$0"))); + x15_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Dir$0"))); + x15_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/FileContents$0"))); + x15_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Dir$0"))); + x15_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/FileContents$0"))); + x15_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Dir$0"))); + x15_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/FileContents$0"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0"))); + x16_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0"))); + x16_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1"))); + x16_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2"))); + x16_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0"))); + x16_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0"))); + x16_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1"))); + x16_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2"))); + x16_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0"))); + x16_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0"))); + x16_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1"))); + x16_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0"))); + x17_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0"))); + x17_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1"))); + x17_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2"))); + x17_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0"))); + x17_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0"))); + x17_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1"))); + x17_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2"))); + x17_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0"))); + x17_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0"))); + x17_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1"))); + x17_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(2); + x18_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0"))); + x18_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0"))); + x18_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1"))); + x18_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2"))); + x18_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0"))); + x18_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0"))); + x18_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1"))); + x18_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2"))); + x18_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0"))); + x18_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0"))); + x18_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1"))); + x18_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(3); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/RootName$0"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Name$0"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Name$1"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Name$2"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/RootName$0"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Name$0"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Name$1"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Name$2"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/RootName$0"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Name$0"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Name$1"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Name$2"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/RootName$0"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Name$0"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Name$1"))); + x19_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Name$2"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/RootName$0"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Name$0"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Name$1"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Name$2"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/RootName$0"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Name$0"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Name$1"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Name$2"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/RootName$0"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Name$0"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Name$1"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Name$2"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/RootName$0"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Name$0"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Name$1"))); + x19_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Name$2"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/RootName$0"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Name$0"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Name$1"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0")).product(factory.tuple("sync/Name$2"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/RootName$0"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Name$0"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Name$1"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0")).product(factory.tuple("sync/Name$2"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/RootName$0"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Name$0"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Name$1"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1")).product(factory.tuple("sync/Name$2"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/RootName$0"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Name$0"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Name$1"))); + x19_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2")).product(factory.tuple("sync/Name$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("sync/RootName$0").product(factory.tuple("sync/RootName$0"))); + x20_upper.add(factory.tuple("sync/RootName$0").product(factory.tuple("sync/Name$0"))); + x20_upper.add(factory.tuple("sync/RootName$0").product(factory.tuple("sync/Name$1"))); + x20_upper.add(factory.tuple("sync/RootName$0").product(factory.tuple("sync/Name$2"))); + x20_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0"))); + x20_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0"))); + x20_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1"))); + x20_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2"))); + x20_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0"))); + x20_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0"))); + x20_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1"))); + x20_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2"))); + x20_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0"))); + x20_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0"))); + x20_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1"))); + x20_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(1); + x21_upper.add(factory.tuple("sync/RootName$0")); + x21_upper.add(factory.tuple("sync/Name$0")); + x21_upper.add(factory.tuple("sync/Name$1")); + x21_upper.add(factory.tuple("sync/Name$2")); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(2); + x22_upper.add(factory.tuple("sync/RootName$0").product(factory.tuple("sync/RootName$0"))); + x22_upper.add(factory.tuple("sync/RootName$0").product(factory.tuple("sync/Name$0"))); + x22_upper.add(factory.tuple("sync/RootName$0").product(factory.tuple("sync/Name$1"))); + x22_upper.add(factory.tuple("sync/RootName$0").product(factory.tuple("sync/Name$2"))); + x22_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/RootName$0"))); + x22_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$0"))); + x22_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$1"))); + x22_upper.add(factory.tuple("sync/Name$0").product(factory.tuple("sync/Name$2"))); + x22_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/RootName$0"))); + x22_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$0"))); + x22_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$1"))); + x22_upper.add(factory.tuple("sync/Name$1").product(factory.tuple("sync/Name$2"))); + x22_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/RootName$0"))); + x22_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$0"))); + x22_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$1"))); + x22_upper.add(factory.tuple("sync/Name$2").product(factory.tuple("sync/Name$2"))); + bounds.bound(x22, x22_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x25=x6.intersection(x7); + Formula x24=x25.no(); + Variable x28=Variable.unary("Correctness_this"); + Decls x27=x28.oneOf(x6); + Expression x30=x28.join(x12); + Expression x33=x6.union(x7); + Expression x32=x33.union(x8); + Expression x34=x9.union(x10); + Expression x31=x32.product(x34); + Formula x29=x30.in(x31); + Formula x26=x29.forAll(x27); + Expression x37=x12.join(Expression.UNIV); + Expression x36=x37.join(Expression.UNIV); + Formula x35=x36.in(x6); + Variable x41=Variable.unary("Correctness_this"); + Decls x40=x41.oneOf(x6); + Expression x43=x41.join(x13); + Expression x44=x32.product(x34); + Formula x42=x43.in(x44); + Formula x39=x42.forAll(x40); + Expression x47=x13.join(Expression.UNIV); + Expression x46=x47.join(Expression.UNIV); + Formula x45=x46.in(x6); + Variable x50=Variable.unary("Correctness_this"); + Decls x49=x50.oneOf(x6); + Expression x52=x50.join(x14); + Expression x53=x32.product(x34); + Formula x51=x52.in(x53); + Formula x48=x51.forAll(x49); + Expression x56=x14.join(Expression.UNIV); + Expression x55=x56.join(Expression.UNIV); + Formula x54=x55.in(x6); + Variable x59=Variable.unary("Correctness_this"); + Decls x58=x59.oneOf(x6); + Expression x61=x59.join(x15); + Expression x62=x32.product(x34); + Formula x60=x61.in(x62); + Formula x57=x60.forAll(x58); + Expression x65=x15.join(Expression.UNIV); + Expression x64=x65.join(Expression.UNIV); + Formula x63=x64.in(x6); + Variable x68=Variable.unary("Correctness_this"); + Decls x67=x68.oneOf(x6); + Expression x70=x68.join(x16); + Formula x69=x70.in(x32); + Formula x66=x69.forAll(x67); + Expression x72=x16.join(Expression.UNIV); + Formula x71=x72.in(x6); + Variable x75=Variable.unary("Correctness_this"); + Decls x74=x75.oneOf(x6); + Expression x78=x75.join(x17); + Formula x77=x78.lone(); + Formula x79=x78.in(x32); + Formula x76=x77.and(x79); + Formula x73=x76.forAll(x74); + Expression x81=x17.join(Expression.UNIV); + Formula x80=x81.in(x6); + Variable x84=Variable.unary("Correctness_this"); + Decls x83=x84.oneOf(x6); + Expression x87=x84.join(x18); + Formula x86=x87.lone(); + Formula x88=x87.in(x32); + Formula x85=x86.and(x88); + Formula x82=x85.forAll(x83); + Expression x90=x18.join(Expression.UNIV); + Formula x89=x90.in(x6); + Variable x93=Variable.unary("Correctness_this"); + Decls x92=x93.oneOf(x6); + Expression x95=x93.join(x19); + Expression x98=x93.join(x16); + Expression x99=x93.join(x17); + Expression x97=x98.difference(x99); + Expression x100=x93.join(x16); + Expression x96=x97.product(x100); + Formula x94=x95.in(x96); + Formula x91=x94.forAll(x92); + Expression x103=x19.join(Expression.UNIV); + Expression x102=x103.join(Expression.UNIV); + Formula x101=x102.in(x6); + Variable x106=Variable.unary("Correctness_this"); + Decls x105=x106.oneOf(x32); + Expression x108=x106.join(x20); + Formula x107=x108.in(x32); + Formula x104=x107.forAll(x105); + Expression x110=x20.join(Expression.UNIV); + Formula x109=x110.in(x32); + Expression x113=x11.product(x21); + Expression x112=x11.join(x113); + Formula x111=x112.in(x32); + Expression x116=x11.product(x22); + Expression x115=x11.join(x116); + Expression x117=x32.product(x32); + Formula x114=x115.in(x117); + Variable x122=Variable.unary(""); + Decls x121=x122.oneOf(x32); + Formula x126=x122.eq(x21); + Expression x128=x22.join(x122); + Formula x127=x128.one(); + Formula x125=x126.or(x127); + Expression x132=x22.join(x32); + Expression x131=x32.difference(x132); + Formula x130=x122.eq(x131); + Expression x134=x122.join(x22); + Formula x133=x134.one(); + Formula x129=x130.or(x133); + Formula x124=x125.and(x129); + Expression x138=x22.closure(); + Expression x137=x122.join(x138); + Formula x136=x122.in(x137); + Formula x135=x136.not(); + Formula x123=x124.and(x135); + Formula x120=x123.forAll(x121); + Expression x141=x22.reflexiveClosure(); + Expression x140=x21.join(x141); + Formula x139=x32.in(x140); + Formula x119=x120.and(x139); + Expression x143=x22.join(x21); + Formula x142=x143.no(); + Formula x118=x119.and(x142); + Variable x146=Variable.unary("Correctness_x"); + Decls x145=x146.oneOf(x6); + Expression x150=x146.join(x16); + Expression x152=x146.join(x20); + Expression x155=x146.join(x12); + Expression x159=Expression.INTS.union(x5); + Expression x158=x159.union(x32); + Expression x157=x158.union(x34); + Expression x156=x157.union(x11); + Expression x154=x155.join(x156); + Expression x162=x146.join(x13); + Expression x161=x162.join(x156); + Expression x153=x154.union(x161); + Expression x151=x152.intersection(x153); + Formula x149=x150.eq(x151); + Expression x165=x146.join(x17); + Variable x168=Variable.unary("Correctness_pc"); + Expression x169=x146.join(x16); + Decls x167=x168.oneOf(x169); + Expression x171=x146.join(x16); + Expression x174=x22.closure(); + Expression x173=x168.join(x174); + Expression x172=x168.union(x173); + Formula x170=x171.in(x172); + Expression x166=x170.comprehension(x167); + Formula x164=x165.eq(x166); + Variable x177=Variable.unary("Correctness_p_child"); + Expression x179=x146.join(x16); + Expression x180=x146.join(x17); + Expression x178=x179.difference(x180); + Decls x176=x177.oneOf(x178); + Expression x183=x146.join(x19); + Expression x182=x177.join(x183); + Variable x186=Variable.unary("Correctness_earlierChild"); + Expression x190=x22.transpose(); + Expression x189=x190.closure(); + Expression x188=x177.join(x189); + Expression x191=x146.join(x16); + Expression x187=x188.intersection(x191); + Decls x185=x186.oneOf(x187); + Expression x196=x22.transpose(); + Expression x195=x196.closure(); + Expression x194=x186.join(x195); + Expression x193=x186.union(x194); + Formula x192=x187.in(x193); + Expression x184=x192.comprehension(x185); + Formula x181=x182.eq(x184); + Formula x175=x181.forAll(x176); + Formula x163=x164.and(x175); + Formula x148=x149.and(x163); + Expression x198=x146.join(x18); + Variable x201=Variable.unary("Correctness_pc"); + Expression x202=x146.join(x16); + Decls x200=x201.oneOf(x202); + Expression x204=x146.join(x16); + Expression x208=x22.transpose(); + Expression x207=x208.closure(); + Expression x206=x201.join(x207); + Expression x205=x201.union(x206); + Formula x203=x204.in(x205); + Expression x199=x203.comprehension(x200); + Formula x197=x198.eq(x199); + Formula x147=x148.and(x197); + Formula x144=x147.forAll(x145); + Formula x209=x6.eq(x32); + Variable x214=Variable.unary("acyclic_x"); + Decls x213=x214.oneOf(x32); + Expression x218=x20.closure(); + Expression x217=x214.join(x218); + Formula x216=x214.in(x217); + Formula x215=x216.not(); + Formula x212=x215.forAll(x213); + Variable x221=Variable.unary("forest_n"); + Decls x220=x221.oneOf(x32); + Expression x223=x20.join(x221); + Formula x222=x223.lone(); + Formula x219=x222.forAll(x220); + Formula x211=x212.and(x219); + Variable x227=Variable.unary("tree_root"); + Decls x226=x227.oneOf(x32); + Expression x229=x20.join(x227); + Formula x228=x229.no(); + Expression x225=x228.comprehension(x226); + Formula x224=x225.lone(); + Formula x210=x211.and(x224); + Expression x233=x20.closure(); + Expression x236=x156.product(Expression.UNIV); + Expression x234=Expression.IDEN.intersection(x236); + Expression x232=x233.union(x234); + Expression x231=x7.join(x232); + Formula x230=x32.in(x231); + Variable x241=Variable.nary("Correctness_A",2); + Expression x242=x32.product(x34); + Decls x240=x241.setOf(x242); + Variable x244=Variable.nary("Correctness_B",2); + Decls x243=x244.setOf(x242); + Variable x246=Variable.nary("Correctness_A'",2); + Decls x245=x246.setOf(x242); + Variable x248=Variable.nary("Correctness_B'",2); + Decls x247=x248.setOf(x242); + Variable x250=Variable.unary("Correctness_Adirty"); + Decls x249=x250.setOf(x32); + Variable x252=Variable.unary("Correctness_Bdirty"); + Decls x251=x252.setOf(x32); + Decls x239=x240.and(x243).and(x245).and(x247).and(x249).and(x251); + Expression x258=x32.product(x34); + Formula x257=x241.in(x258); + Variable x261=Variable.unary(""); + Decls x260=x261.oneOf(x32); + Expression x264=x261.join(x241); + Formula x263=x264.lone(); + Formula x265=x264.in(x34); + Formula x262=x263.and(x265); + Formula x259=x262.forAll(x260); + Formula x256=x257.and(x259); + Variable x268=Variable.unary(""); + Decls x267=x268.oneOf(x34); + Expression x270=x241.join(x268); + Formula x269=x270.in(x32); + Formula x266=x269.forAll(x267); + Formula x255=x256.and(x266); + Expression x274=x32.product(x34); + Formula x273=x244.in(x274); + Variable x277=Variable.unary(""); + Decls x276=x277.oneOf(x32); + Expression x280=x277.join(x244); + Formula x279=x280.lone(); + Formula x281=x280.in(x34); + Formula x278=x279.and(x281); + Formula x275=x278.forAll(x276); + Formula x272=x273.and(x275); + Variable x284=Variable.unary(""); + Decls x283=x284.oneOf(x34); + Expression x286=x244.join(x284); + Formula x285=x286.in(x32); + Formula x282=x285.forAll(x283); + Formula x271=x272.and(x282); + Expression x290=x32.product(x34); + Formula x289=x246.in(x290); + Variable x293=Variable.unary(""); + Decls x292=x293.oneOf(x32); + Expression x296=x293.join(x246); + Formula x295=x296.lone(); + Formula x297=x296.in(x34); + Formula x294=x295.and(x297); + Formula x291=x294.forAll(x292); + Formula x288=x289.and(x291); + Variable x300=Variable.unary(""); + Decls x299=x300.oneOf(x34); + Expression x302=x246.join(x300); + Formula x301=x302.in(x32); + Formula x298=x301.forAll(x299); + Formula x287=x288.and(x298); + Expression x306=x32.product(x34); + Formula x305=x248.in(x306); + Variable x309=Variable.unary(""); + Decls x308=x309.oneOf(x32); + Expression x312=x309.join(x248); + Formula x311=x312.lone(); + Formula x313=x312.in(x34); + Formula x310=x311.and(x313); + Formula x307=x310.forAll(x308); + Formula x304=x305.and(x307); + Variable x316=Variable.unary(""); + Decls x315=x316.oneOf(x34); + Expression x318=x248.join(x316); + Formula x317=x318.in(x32); + Formula x314=x317.forAll(x315); + Formula x303=x304.and(x314); + Formula x254=Formula.compose(FormulaOperator.AND, x255, x271, x287, x303); + Variable x324=Variable.nary("DirtiesValid_O",2); + Expression x325=x32.product(x34); + Decls x323=x324.setOf(x325); + Expression x330=x32.product(x34); + Formula x329=x324.in(x330); + Variable x333=Variable.unary(""); + Decls x332=x333.oneOf(x32); + Expression x336=x333.join(x324); + Formula x335=x336.lone(); + Formula x337=x336.in(x34); + Formula x334=x335.and(x337); + Formula x331=x334.forAll(x332); + Formula x328=x329.and(x331); + Variable x340=Variable.unary(""); + Decls x339=x340.oneOf(x34); + Expression x342=x324.join(x340); + Formula x341=x342.in(x32); + Formula x338=x341.forAll(x339); + Formula x327=x328.and(x338); + Variable x348=Variable.unary("IsValidFS_n"); + Expression x349=x32.difference(x7); + Decls x347=x348.oneOf(x349); + Expression x355=x348.join(x324); + Formula x354=x355.eq(x9); + Formula x353=x354.not(); + Formula x352=x353.not(); + Expression x359=x20.closure(); + Expression x358=x348.join(x359); + Expression x357=x358.join(x324); + Formula x356=x357.no(); + Formula x351=x352.or(x356); + Expression x363=x348.join(x324); + Formula x362=x363.some(); + Formula x361=x362.not(); + Expression x367=x20.transpose(); + Expression x366=x348.join(x367); + Expression x365=x366.join(x324); + Formula x364=x365.some(); + Formula x360=x361.or(x364); + Formula x350=x351.and(x360); + Formula x346=x350.forAll(x347); + Expression x369=x7.join(x324); + Formula x368=x369.eq(x9); + Formula x345=x346.and(x368); + Variable x373=Variable.unary("DirtiesValid_n"); + Decls x372=x373.oneOf(x32); + Expression x376=x373.join(x324); + Expression x377=x373.join(x241); + Formula x375=x376.eq(x377); + Formula x374=x375.not(); + Expression x371=x374.comprehension(x372); + Formula x370=x371.in(x250); + Formula x344=x345.and(x370); + Variable x381=Variable.unary("DirtiesValid_n"); + Decls x380=x381.oneOf(x32); + Expression x384=x381.join(x324); + Expression x385=x381.join(x244); + Formula x383=x384.eq(x385); + Formula x382=x383.not(); + Expression x379=x382.comprehension(x380); + Formula x378=x379.in(x252); + Formula x343=x344.and(x378); + Formula x326=x327.and(x343); + Formula x322=x326.forSome(x323); + Expression x389=x6.join(x12); + Formula x388=x241.eq(x389); + Expression x393=x6.join(x13); + Formula x392=x244.eq(x393); + Expression x395=x6.join(x15); + Formula x394=x248.eq(x395); + Formula x391=x392.and(x394); + Variable x398=Variable.unary("reconHelper_p"); + Decls x397=x398.oneOf(x32); + Expression x404=x398.join(x12); + Expression x405=x398.join(x13); + Expression x403=x404.union(x405); + Expression x402=x398.join(x403); + Formula x401=x402.some(); + Formula x400=x401.not(); + Formula x410=x398.in(x250); + Formula x409=x410.not(); + Formula x412=x398.in(x252); + Formula x411=x412.not(); + Formula x408=x409.and(x411); + Expression x415=x398.join(x14); + Formula x414=x415.eq(x404); + Expression x417=x398.join(x15); + Formula x416=x417.eq(x405); + Formula x413=x414.and(x416); + Formula x407=x408.implies(x413); + Formula x419=x408.not(); + Expression x424=x398.join(x404); + Formula x423=x424.eq(x9); + Expression x426=x398.join(x405); + Formula x425=x426.eq(x9); + Formula x422=x423.and(x425); + Formula x429=x16.no(); + Expression x432=x398.join(x14); + Expression x433=x398.join(x12); + Formula x431=x432.eq(x433); + Expression x435=x398.join(x15); + Expression x436=x398.join(x13); + Formula x434=x435.eq(x436); + Formula x430=x431.and(x434); + Formula x428=x429.implies(x430); + Formula x438=x429.not(); + Expression x443=x398.join(x17); + Expression x442=x443.join(x12); + Expression x444=x398.join(x12); + Formula x441=x442.eq(x444); + Expression x449=x398.join(x17); + Expression x448=x449.join(x13); + Expression x450=x398.join(x13); + Formula x447=x448.eq(x450); + Expression x452=x398.join(x15); + Expression x454=x398.join(x18); + Expression x453=x454.join(x15); + Formula x451=x452.eq(x453); + Formula x446=x447.and(x451); + Variable x457=Variable.unary("reconHelper_pchild"); + Expression x459=x398.join(x16); + Expression x460=x398.join(x17); + Expression x458=x459.difference(x460); + Decls x456=x457.oneOf(x458); + Expression x463=x457.join(x12); + Expression x466=x398.join(x19); + Expression x465=x457.join(x466); + Expression x464=x465.join(x14); + Formula x462=x463.eq(x464); + Expression x468=x457.join(x13); + Expression x471=x398.join(x19); + Expression x470=x457.join(x471); + Expression x469=x470.join(x15); + Formula x467=x468.eq(x469); + Formula x461=x462.and(x467); + Formula x455=x461.forAll(x456); + Formula x445=x446.and(x455); + Formula x440=x441.and(x445); + Expression x473=x398.join(x14); + Expression x475=x398.join(x18); + Expression x474=x475.join(x14); + Formula x472=x473.eq(x474); + Formula x439=x440.and(x472); + Formula x437=x438.implies(x439); + Formula x427=x428.and(x437); + Formula x421=x422.implies(x427); + Formula x477=x422.not(); + Formula x481=x398.in(x250); + Formula x480=x481.not(); + Expression x489=x20.closure(); + Expression x491=x156.product(Expression.UNIV); + Expression x490=Expression.IDEN.intersection(x491); + Expression x488=x489.union(x490); + Expression x487=x398.join(x488); + Expression x486=x487.product(x34); + Expression x485=x405.intersection(x486); + Expression x497=x20.closure(); + Expression x499=x156.product(Expression.UNIV); + Expression x498=Expression.IDEN.intersection(x499); + Expression x496=x497.union(x498); + Expression x495=x398.join(x496); + Expression x494=x32.difference(x495); + Expression x493=x494.product(x34); + Expression x492=x404.intersection(x493); + Expression x484=x485.union(x492); + Formula x483=x415.eq(x484); + Formula x500=x417.eq(x405); + Formula x482=x483.and(x500); + Formula x479=x480.implies(x482); + Formula x502=x480.not(); + Formula x506=x398.in(x252); + Formula x505=x506.not(); + Formula x508=x415.eq(x404); + Expression x515=x20.closure(); + Expression x517=x156.product(Expression.UNIV); + Expression x516=Expression.IDEN.intersection(x517); + Expression x514=x515.union(x516); + Expression x513=x398.join(x514); + Expression x512=x513.product(x34); + Expression x511=x404.intersection(x512); + Expression x523=x20.closure(); + Expression x525=x156.product(Expression.UNIV); + Expression x524=Expression.IDEN.intersection(x525); + Expression x522=x523.union(x524); + Expression x521=x398.join(x522); + Expression x520=x32.difference(x521); + Expression x519=x520.product(x34); + Expression x518=x405.intersection(x519); + Expression x510=x511.union(x518); + Formula x509=x417.eq(x510); + Formula x507=x508.and(x509); + Formula x504=x505.implies(x507); + Formula x527=x505.not(); + Formula x529=x415.eq(x404); + Formula x530=x417.eq(x405); + Formula x528=x529.and(x530); + Formula x526=x527.implies(x528); + Formula x503=x504.and(x526); + Formula x501=x502.implies(x503); + Formula x478=x479.and(x501); + Formula x476=x477.implies(x478); + Formula x420=x421.and(x476); + Formula x418=x419.implies(x420); + Formula x406=x407.and(x418); + Formula x399=x400.or(x406); + Formula x396=x399.forAll(x397); + Formula x390=x391.and(x396); + Formula x387=x388.and(x390); + Expression x532=x6.join(x14); + Formula x531=x246.eq(x532); + Formula x386=x387.and(x531); + Formula x321=x322.and(x386); + Formula x320=x321.not(); + Variable x540=Variable.unary("IsValidFS_n"); + Expression x541=x32.difference(x7); + Decls x539=x540.oneOf(x541); + Expression x547=x540.join(x241); + Formula x546=x547.eq(x9); + Formula x545=x546.not(); + Formula x544=x545.not(); + Expression x551=x20.closure(); + Expression x550=x540.join(x551); + Expression x549=x550.join(x241); + Formula x548=x549.no(); + Formula x543=x544.or(x548); + Expression x555=x540.join(x241); + Formula x554=x555.some(); + Formula x553=x554.not(); + Expression x559=x20.transpose(); + Expression x558=x540.join(x559); + Expression x557=x558.join(x241); + Formula x556=x557.some(); + Formula x552=x553.or(x556); + Formula x542=x543.and(x552); + Formula x538=x542.forAll(x539); + Expression x561=x7.join(x241); + Formula x560=x561.eq(x9); + Formula x537=x538.and(x560); + Variable x566=Variable.unary("IsValidFS_n"); + Expression x567=x32.difference(x7); + Decls x565=x566.oneOf(x567); + Expression x573=x566.join(x244); + Formula x572=x573.eq(x9); + Formula x571=x572.not(); + Formula x570=x571.not(); + Expression x577=x20.closure(); + Expression x576=x566.join(x577); + Expression x575=x576.join(x244); + Formula x574=x575.no(); + Formula x569=x570.or(x574); + Expression x581=x566.join(x244); + Formula x580=x581.some(); + Formula x579=x580.not(); + Expression x585=x20.transpose(); + Expression x584=x566.join(x585); + Expression x583=x584.join(x244); + Formula x582=x583.some(); + Formula x578=x579.or(x582); + Formula x568=x569.and(x578); + Formula x564=x568.forAll(x565); + Expression x587=x7.join(x244); + Formula x586=x587.eq(x9); + Formula x563=x564.and(x586); + Variable x591=Variable.unary("IsValidDirty_n"); + Decls x590=x591.oneOf(x252); + Expression x594=x20.transpose(); + Expression x593=x591.join(x594); + Formula x592=x593.in(x252); + Formula x589=x592.forAll(x590); + Formula x597=x7.in(x252); + Formula x596=x597.not(); + Expression x599=x252.difference(x7); + Formula x598=x599.some(); + Formula x595=x596.or(x598); + Formula x588=x589.and(x595); + Formula x562=x563.and(x588); + Formula x536=x537.and(x562); + Variable x603=Variable.unary("IsValidDirty_n"); + Decls x602=x603.oneOf(x250); + Expression x606=x20.transpose(); + Expression x605=x603.join(x606); + Formula x604=x605.in(x250); + Formula x601=x604.forAll(x602); + Formula x609=x7.in(x250); + Formula x608=x609.not(); + Expression x611=x250.difference(x7); + Formula x610=x611.some(); + Formula x607=x608.or(x610); + Formula x600=x601.and(x607); + Formula x535=x536.and(x600); + Formula x534=x535.not(); + Variable x616=Variable.unary("SyncSpec_p"); + Decls x615=x616.oneOf(x32); + Formula x620=x616.eq(x7); + Expression x625=x20.transpose(); + Expression x624=x616.join(x625); + Expression x623=x624.join(x241); + Formula x622=x623.eq(x9); + Expression x629=x20.transpose(); + Expression x628=x616.join(x629); + Expression x627=x628.join(x244); + Formula x626=x627.eq(x9); + Formula x621=x622.and(x626); + Formula x619=x620.or(x621); + Formula x618=x619.not(); + Expression x635=x616.join(x241); + Expression x636=x616.join(x244); + Formula x634=x635.eq(x636); + Formula x633=x634.not(); + Expression x639=x616.join(x246); + Expression x640=x616.join(x241); + Formula x638=x639.eq(x640); + Expression x642=x616.join(x248); + Expression x643=x616.join(x244); + Formula x641=x642.eq(x643); + Formula x637=x638.and(x641); + Formula x632=x633.or(x637); + Formula x648=x616.in(x250); + Formula x647=x648.not(); + Formula x646=x647.not(); + Expression x655=x20.closure(); + Expression x657=x156.product(Expression.UNIV); + Expression x656=Expression.IDEN.intersection(x657); + Expression x654=x655.union(x656); + Expression x653=x616.join(x654); + Expression x652=x653.product(x34); + Expression x651=x246.intersection(x652); + Expression x662=x20.closure(); + Expression x664=x156.product(Expression.UNIV); + Expression x663=Expression.IDEN.intersection(x664); + Expression x661=x662.union(x663); + Expression x660=x616.join(x661); + Expression x659=x660.product(x34); + Expression x658=x244.intersection(x659); + Formula x650=x651.eq(x658); + Expression x670=x20.closure(); + Expression x672=x156.product(Expression.UNIV); + Expression x671=Expression.IDEN.intersection(x672); + Expression x669=x670.union(x671); + Expression x668=x616.join(x669); + Expression x667=x668.product(x34); + Expression x666=x248.intersection(x667); + Expression x677=x20.closure(); + Expression x679=x156.product(Expression.UNIV); + Expression x678=Expression.IDEN.intersection(x679); + Expression x676=x677.union(x678); + Expression x675=x616.join(x676); + Expression x674=x675.product(x34); + Expression x673=x244.intersection(x674); + Formula x665=x666.eq(x673); + Formula x649=x650.and(x665); + Formula x645=x646.or(x649); + Formula x684=x616.in(x250); + Formula x685=x616.in(x252); + Formula x683=x684.and(x685); + Expression x688=x616.join(x241); + Expression x689=x616.join(x244); + Formula x687=x688.eq(x689); + Formula x686=x687.not(); + Formula x682=x683.and(x686); + Formula x681=x682.not(); + Expression x696=x20.closure(); + Expression x698=x156.product(Expression.UNIV); + Expression x697=Expression.IDEN.intersection(x698); + Expression x695=x696.union(x697); + Expression x694=x616.join(x695); + Expression x693=x694.product(x34); + Expression x692=x246.intersection(x693); + Expression x703=x20.closure(); + Expression x705=x156.product(Expression.UNIV); + Expression x704=Expression.IDEN.intersection(x705); + Expression x702=x703.union(x704); + Expression x701=x616.join(x702); + Expression x700=x701.product(x34); + Expression x699=x241.intersection(x700); + Formula x691=x692.eq(x699); + Expression x711=x20.closure(); + Expression x713=x156.product(Expression.UNIV); + Expression x712=Expression.IDEN.intersection(x713); + Expression x710=x711.union(x712); + Expression x709=x616.join(x710); + Expression x708=x709.product(x34); + Expression x707=x248.intersection(x708); + Expression x718=x20.closure(); + Expression x720=x156.product(Expression.UNIV); + Expression x719=Expression.IDEN.intersection(x720); + Expression x717=x718.union(x719); + Expression x716=x616.join(x717); + Expression x715=x716.product(x34); + Expression x714=x244.intersection(x715); + Formula x706=x707.eq(x714); + Formula x690=x691.and(x706); + Formula x680=x681.or(x690); + Formula x644=x645.and(x680); + Formula x631=x632.and(x644); + Formula x724=x616.in(x252); + Formula x723=x724.not(); + Formula x722=x723.not(); + Expression x731=x20.closure(); + Expression x733=x156.product(Expression.UNIV); + Expression x732=Expression.IDEN.intersection(x733); + Expression x730=x731.union(x732); + Expression x729=x616.join(x730); + Expression x728=x729.product(x34); + Expression x727=x248.intersection(x728); + Expression x738=x20.closure(); + Expression x740=x156.product(Expression.UNIV); + Expression x739=Expression.IDEN.intersection(x740); + Expression x737=x738.union(x739); + Expression x736=x616.join(x737); + Expression x735=x736.product(x34); + Expression x734=x241.intersection(x735); + Formula x726=x727.eq(x734); + Expression x746=x20.closure(); + Expression x748=x156.product(Expression.UNIV); + Expression x747=Expression.IDEN.intersection(x748); + Expression x745=x746.union(x747); + Expression x744=x616.join(x745); + Expression x743=x744.product(x34); + Expression x742=x246.intersection(x743); + Expression x753=x20.closure(); + Expression x755=x156.product(Expression.UNIV); + Expression x754=Expression.IDEN.intersection(x755); + Expression x752=x753.union(x754); + Expression x751=x616.join(x752); + Expression x750=x751.product(x34); + Expression x749=x241.intersection(x750); + Formula x741=x742.eq(x749); + Formula x725=x726.and(x741); + Formula x721=x722.or(x725); + Formula x630=x631.and(x721); + Formula x617=x618.or(x630); + Formula x614=x617.forAll(x615); + Variable x759=Variable.unary("IsValidFS_n"); + Expression x760=x32.difference(x7); + Decls x758=x759.oneOf(x760); + Expression x766=x759.join(x246); + Formula x765=x766.eq(x9); + Formula x764=x765.not(); + Formula x763=x764.not(); + Expression x770=x20.closure(); + Expression x769=x759.join(x770); + Expression x768=x769.join(x246); + Formula x767=x768.no(); + Formula x762=x763.or(x767); + Expression x774=x759.join(x246); + Formula x773=x774.some(); + Formula x772=x773.not(); + Expression x778=x20.transpose(); + Expression x777=x759.join(x778); + Expression x776=x777.join(x246); + Formula x775=x776.some(); + Formula x771=x772.or(x775); + Formula x761=x762.and(x771); + Formula x757=x761.forAll(x758); + Expression x780=x7.join(x246); + Formula x779=x780.eq(x9); + Formula x756=x757.and(x779); + Formula x613=x614.and(x756); + Variable x784=Variable.unary("IsValidFS_n"); + Expression x785=x32.difference(x7); + Decls x783=x784.oneOf(x785); + Expression x791=x784.join(x248); + Formula x790=x791.eq(x9); + Formula x789=x790.not(); + Formula x788=x789.not(); + Expression x795=x20.closure(); + Expression x794=x784.join(x795); + Expression x793=x794.join(x248); + Formula x792=x793.no(); + Formula x787=x788.or(x792); + Expression x799=x784.join(x248); + Formula x798=x799.some(); + Formula x797=x798.not(); + Expression x803=x20.transpose(); + Expression x802=x784.join(x803); + Expression x801=x802.join(x248); + Formula x800=x801.some(); + Formula x796=x797.or(x800); + Formula x786=x787.and(x796); + Formula x782=x786.forAll(x783); + Expression x805=x7.join(x248); + Formula x804=x805.eq(x9); + Formula x781=x782.and(x804); + Formula x612=x613.and(x781); + Formula x533=x534.or(x612); + Formula x319=x320.or(x533); + Formula x253=x254.implies(x319); + Formula x238=x253.forAll(x239); + Formula x237=x238.not(); + Formula x806=x0.eq(x0); + Formula x807=x1.eq(x1); + Formula x808=x2.eq(x2); + Formula x809=x3.eq(x3); + Formula x810=x4.eq(x4); + Formula x811=x5.eq(x5); + Formula x812=x6.eq(x6); + Formula x813=x7.eq(x7); + Formula x814=x8.eq(x8); + Formula x815=x9.eq(x9); + Formula x816=x10.eq(x10); + Formula x817=x11.eq(x11); + Formula x818=x12.eq(x12); + Formula x819=x13.eq(x13); + Formula x820=x14.eq(x14); + Formula x821=x15.eq(x15); + Formula x822=x16.eq(x16); + Formula x823=x17.eq(x17); + Formula x824=x18.eq(x18); + Formula x825=x19.eq(x19); + Formula x826=x20.eq(x20); + Formula x827=x21.eq(x21); + Formula x828=x22.eq(x22); + Formula x23=Formula.compose(FormulaOperator.AND, x24, x26, x35, x39, x45, x48, x54, x57, x63, x66, x71, x73, x80, x82, x89, x91, x101, x104, x109, x111, x114, x118, x144, x209, x210, x230, x237, x806, x807, x808, x809, x810, x811, x812, x813, x814, x815, x816, x817, x818, x819, x820, x821, x822, x823, x824, x825, x826, x827, x828); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x23,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/logic/syllogism/syllogismCheck1.java b/Source/kodkod/examples/kodkod/examples/models/logic/syllogism/syllogismCheck1.java new file mode 100644 index 0000000..5ec5966 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/logic/syllogism/syllogismCheck1.java @@ -0,0 +1,162 @@ +package logic.syllogism; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "syllogism", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 1, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 6 +) + + +public final class syllogismCheck1 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Men"); + Relation x7 = Relation.unary("this/Socrates"); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Men$0", + "Men$1", "Men$2", "Men$3", "Men$4", "Socrates$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Men$0")); + x6_upper.add(factory.tuple("Men$1")); + x6_upper.add(factory.tuple("Men$2")); + x6_upper.add(factory.tuple("Men$3")); + x6_upper.add(factory.tuple("Men$4")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Socrates$0")); + bounds.boundExactly(x7, x7_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x13=Variable.unary("mortal"); + Expression x14=x6.union(x7); + Decls x12=x13.someOf(x14); + Variable x16=Variable.unary("men"); + Decls x15=x16.someOf(x14); + Decls x11=x12.and(x15); + Formula x20=x16.in(x13); + Formula x21=x7.in(x16); + Formula x19=x20.and(x21); + Formula x18=x19.not(); + Formula x22=x7.in(x13); + Formula x17=x18.or(x22); + Formula x10=x17.forAll(x11); + Formula x9=x10.not(); + Formula x23=x0.eq(x0); + Formula x24=x1.eq(x1); + Formula x25=x2.eq(x2); + Formula x26=x3.eq(x3); + Formula x27=x4.eq(x4); + Formula x28=x5.eq(x5); + Formula x29=x6.eq(x6); + Formula x30=x7.eq(x7); + Formula x8=Formula.compose(FormulaOperator.AND, x9, x23, x24, x25, x26, x27, x28, x29, x30); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x8,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/logic/syllogism/syllogismCheck2.java b/Source/kodkod/examples/kodkod/examples/models/logic/syllogism/syllogismCheck2.java new file mode 100644 index 0000000..83858d2 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/logic/syllogism/syllogismCheck2.java @@ -0,0 +1,161 @@ +package logic.syllogism; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "syllogism", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 1, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 6 +) + +public final class syllogismCheck2 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Men"); + Relation x7 = Relation.unary("this/Socrates"); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Men$0", + "Men$1", "Men$2", "Men$3", "Men$4", "Socrates$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Men$0")); + x6_upper.add(factory.tuple("Men$1")); + x6_upper.add(factory.tuple("Men$2")); + x6_upper.add(factory.tuple("Men$3")); + x6_upper.add(factory.tuple("Men$4")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Socrates$0")); + bounds.boundExactly(x7, x7_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x13=Variable.unary("mortal"); + Expression x14=x6.union(x7); + Decls x12=x13.someOf(x14); + Variable x16=Variable.unary("men"); + Decls x15=x16.someOf(x14); + Decls x11=x12.and(x15); + Formula x20=x16.in(x13); + Formula x21=x7.in(x13); + Formula x19=x20.and(x21); + Formula x18=x19.not(); + Formula x22=x7.in(x16); + Formula x17=x18.or(x22); + Formula x10=x17.forAll(x11); + Formula x9=x10.not(); + Formula x23=x0.eq(x0); + Formula x24=x1.eq(x1); + Formula x25=x2.eq(x2); + Formula x26=x3.eq(x3); + Formula x27=x4.eq(x4); + Formula x28=x5.eq(x5); + Formula x29=x6.eq(x6); + Formula x30=x7.eq(x7); + Formula x8=Formula.compose(FormulaOperator.AND, x9, x23, x24, x25, x26, x27, x28, x29, x30); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x8,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/model/fileSystem/file_systemCheck1.java b/Source/kodkod/examples/kodkod/examples/models/model/fileSystem/file_systemCheck1.java new file mode 100644 index 0000000..efa2ea1 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/model/fileSystem/file_systemCheck1.java @@ -0,0 +1,420 @@ +package kodkod.examples.model.fileSystem; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "file_system", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =4, + NestedRelationalJoins = 2, + TransitiveClosure = 2, + NestedQuantifiers = 3, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 0, + Constraints = 10 +) + + + +public final class file_systemCheck1 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/File"); + Relation x7 = Relation.unary("this/Root"); + Relation x8 = Relation.unary("this/Cur"); + Relation x9 = Relation.unary("this/Dir remainder"); + Relation x10 = Relation.unary("this/Name"); + Relation x11 = Relation.unary("this/DirEntry"); + Relation x12 = Relation.nary("this/Dir.entries", 2); + Relation x13 = Relation.nary("this/Dir.parent", 2); + Relation x14 = Relation.nary("this/DirEntry.name", 2); + Relation x15 = Relation.nary("this/DirEntry.contents", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "DirEntry$0", + "DirEntry$1", "DirEntry$2", "DirEntry$3", "DirEntry$4", "Name$0", "Name$1", + "Name$2", "Name$3", "Name$4", "Object$0", "Object$1", "Object$2", + "Object$3", "Root$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Object$0")); + x6_upper.add(factory.tuple("Object$1")); + x6_upper.add(factory.tuple("Object$2")); + x6_upper.add(factory.tuple("Object$3")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Root$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Object$0")); + x8_upper.add(factory.tuple("Object$1")); + x8_upper.add(factory.tuple("Object$2")); + x8_upper.add(factory.tuple("Object$3")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Object$0")); + x9_upper.add(factory.tuple("Object$1")); + x9_upper.add(factory.tuple("Object$2")); + x9_upper.add(factory.tuple("Object$3")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Name$0")); + x10_upper.add(factory.tuple("Name$1")); + x10_upper.add(factory.tuple("Name$2")); + x10_upper.add(factory.tuple("Name$3")); + x10_upper.add(factory.tuple("Name$4")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("DirEntry$0")); + x11_upper.add(factory.tuple("DirEntry$1")); + x11_upper.add(factory.tuple("DirEntry$2")); + x11_upper.add(factory.tuple("DirEntry$3")); + x11_upper.add(factory.tuple("DirEntry$4")); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("DirEntry$0"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("DirEntry$1"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("DirEntry$2"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("DirEntry$3"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("DirEntry$4"))); + x12_upper.add(factory.tuple("Object$0").product(factory.tuple("DirEntry$0"))); + x12_upper.add(factory.tuple("Object$0").product(factory.tuple("DirEntry$1"))); + x12_upper.add(factory.tuple("Object$0").product(factory.tuple("DirEntry$2"))); + x12_upper.add(factory.tuple("Object$0").product(factory.tuple("DirEntry$3"))); + x12_upper.add(factory.tuple("Object$0").product(factory.tuple("DirEntry$4"))); + x12_upper.add(factory.tuple("Object$1").product(factory.tuple("DirEntry$0"))); + x12_upper.add(factory.tuple("Object$1").product(factory.tuple("DirEntry$1"))); + x12_upper.add(factory.tuple("Object$1").product(factory.tuple("DirEntry$2"))); + x12_upper.add(factory.tuple("Object$1").product(factory.tuple("DirEntry$3"))); + x12_upper.add(factory.tuple("Object$1").product(factory.tuple("DirEntry$4"))); + x12_upper.add(factory.tuple("Object$2").product(factory.tuple("DirEntry$0"))); + x12_upper.add(factory.tuple("Object$2").product(factory.tuple("DirEntry$1"))); + x12_upper.add(factory.tuple("Object$2").product(factory.tuple("DirEntry$2"))); + x12_upper.add(factory.tuple("Object$2").product(factory.tuple("DirEntry$3"))); + x12_upper.add(factory.tuple("Object$2").product(factory.tuple("DirEntry$4"))); + x12_upper.add(factory.tuple("Object$3").product(factory.tuple("DirEntry$0"))); + x12_upper.add(factory.tuple("Object$3").product(factory.tuple("DirEntry$1"))); + x12_upper.add(factory.tuple("Object$3").product(factory.tuple("DirEntry$2"))); + x12_upper.add(factory.tuple("Object$3").product(factory.tuple("DirEntry$3"))); + x12_upper.add(factory.tuple("Object$3").product(factory.tuple("DirEntry$4"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$0"))); + x13_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$1"))); + x13_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$2"))); + x13_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$3"))); + x13_upper.add(factory.tuple("Object$0").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$0"))); + x13_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$1"))); + x13_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$2"))); + x13_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$3"))); + x13_upper.add(factory.tuple("Object$1").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$0"))); + x13_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$1"))); + x13_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$2"))); + x13_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$3"))); + x13_upper.add(factory.tuple("Object$2").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("Object$2").product(factory.tuple("Object$0"))); + x13_upper.add(factory.tuple("Object$2").product(factory.tuple("Object$1"))); + x13_upper.add(factory.tuple("Object$2").product(factory.tuple("Object$2"))); + x13_upper.add(factory.tuple("Object$2").product(factory.tuple("Object$3"))); + x13_upper.add(factory.tuple("Object$3").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("Object$3").product(factory.tuple("Object$0"))); + x13_upper.add(factory.tuple("Object$3").product(factory.tuple("Object$1"))); + x13_upper.add(factory.tuple("Object$3").product(factory.tuple("Object$2"))); + x13_upper.add(factory.tuple("Object$3").product(factory.tuple("Object$3"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Name$0"))); + x14_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Name$1"))); + x14_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Name$2"))); + x14_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Name$3"))); + x14_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Name$4"))); + x14_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Name$0"))); + x14_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Name$1"))); + x14_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Name$2"))); + x14_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Name$3"))); + x14_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Name$4"))); + x14_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Name$0"))); + x14_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Name$1"))); + x14_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Name$2"))); + x14_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Name$3"))); + x14_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Name$4"))); + x14_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Name$0"))); + x14_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Name$1"))); + x14_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Name$2"))); + x14_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Name$3"))); + x14_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Name$4"))); + x14_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Name$0"))); + x14_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Name$1"))); + x14_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Name$2"))); + x14_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Name$3"))); + x14_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Name$4"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Object$0"))); + x15_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Object$1"))); + x15_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Object$2"))); + x15_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Object$3"))); + x15_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Object$0"))); + x15_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Object$1"))); + x15_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Object$2"))); + x15_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Object$3"))); + x15_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Object$0"))); + x15_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Object$1"))); + x15_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Object$2"))); + x15_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Object$3"))); + x15_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Object$0"))); + x15_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Object$1"))); + x15_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Object$2"))); + x15_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Object$3"))); + x15_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Object$0"))); + x15_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Object$1"))); + x15_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Object$2"))); + x15_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Object$3"))); + bounds.bound(x15, x15_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x18=x7.intersection(x8); + Formula x17=x18.no(); + Expression x22=x7.union(x8); + Expression x21=x22.union(x9); + Expression x20=x6.intersection(x21); + Formula x19=x20.no(); + Formula x23=x8.lone(); + Formula x24=x8.lone(); + Variable x27=Variable.unary("this"); + Decls x26=x27.oneOf(x6); + Variable x30=Variable.unary("d"); + Decls x29=x30.oneOf(x21); + Expression x33=x30.join(x12); + Expression x32=x33.join(x15); + Formula x31=x27.in(x32); + Formula x28=x31.forSome(x29); + Formula x25=x28.forAll(x26); + Expression x35=x7.join(x13); + Formula x34=x35.no(); + Variable x38=Variable.unary("this"); + Decls x37=x38.oneOf(x21); + Expression x40=x38.join(x12); + Formula x39=x40.in(x11); + Formula x36=x39.forAll(x37); + Expression x42=x12.join(Expression.UNIV); + Formula x41=x42.in(x21); + Variable x46=Variable.unary("this"); + Decls x45=x46.oneOf(x21); + Expression x49=x46.join(x13); + Formula x48=x49.lone(); + Formula x50=x49.in(x21); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x52=x13.join(Expression.UNIV); + Formula x51=x52.in(x21); + Variable x55=Variable.unary("this"); + Decls x54=x55.oneOf(x21); + Expression x59=x55.join(x13); + Expression x62=x15.transpose(); + Expression x61=x55.join(x62); + Expression x63=x12.transpose(); + Expression x60=x61.join(x63); + Formula x58=x59.eq(x60); + Variable x68=Variable.unary("e1"); + Expression x69=x55.join(x12); + Decls x67=x68.oneOf(x69); + Variable x71=Variable.unary("e2"); + Decls x70=x71.oneOf(x69); + Decls x66=x67.and(x70); + Expression x75=x68.join(x14); + Expression x76=x71.join(x14); + Formula x74=x75.eq(x76); + Formula x73=x74.not(); + Formula x77=x68.eq(x71); + Formula x72=x73.or(x77); + Formula x65=x72.forAll(x66); + Formula x81=x55.eq(x7); + Formula x80=x81.not(); + Formula x79=x80.not(); + Expression x84=x13.closure(); + Expression x83=x55.join(x84); + Formula x82=x7.in(x83); + Formula x78=x79.or(x82); + Formula x64=x65.and(x78); + Formula x57=x58.and(x64); + Expression x88=x13.closure(); + Expression x87=x55.join(x88); + Formula x86=x55.in(x87); + Formula x85=x86.not(); + Formula x56=x57.and(x85); + Formula x53=x56.forAll(x54); + Variable x91=Variable.unary("this"); + Decls x90=x91.oneOf(x11); + Expression x94=x91.join(x14); + Formula x93=x94.one(); + Formula x95=x94.in(x10); + Formula x92=x93.and(x95); + Formula x89=x92.forAll(x90); + Expression x97=x14.join(Expression.UNIV); + Formula x96=x97.in(x11); + Variable x100=Variable.unary("this"); + Decls x99=x100.oneOf(x11); + Expression x103=x100.join(x15); + Formula x102=x103.one(); + Expression x105=x6.union(x21); + Formula x104=x103.in(x105); + Formula x101=x102.and(x104); + Formula x98=x101.forAll(x99); + Expression x107=x15.join(Expression.UNIV); + Formula x106=x107.in(x11); + Variable x110=Variable.unary("this"); + Decls x109=x110.oneOf(x11); + Expression x113=x12.transpose(); + Expression x112=x110.join(x113); + Formula x111=x112.one(); + Formula x108=x111.forAll(x109); + Variable x119=Variable.unary("OneParent_buggyVersion_d"); + Expression x120=x21.difference(x7); + Decls x118=x119.oneOf(x120); + Expression x122=x119.join(x13); + Formula x121=x122.one(); + Formula x117=x121.forAll(x118); + Formula x116=x117.not(); + Variable x125=Variable.unary("NoDirAliases_o"); + Decls x124=x125.oneOf(x21); + Expression x128=x15.transpose(); + Expression x127=x125.join(x128); + Formula x126=x127.lone(); + Formula x123=x126.forAll(x124); + Formula x115=x116.or(x123); + Formula x114=x115.not(); + Formula x129=x0.eq(x0); + Formula x130=x1.eq(x1); + Formula x131=x2.eq(x2); + Formula x132=x3.eq(x3); + Formula x133=x4.eq(x4); + Formula x134=x5.eq(x5); + Formula x135=x6.eq(x6); + Formula x136=x7.eq(x7); + Formula x137=x8.eq(x8); + Formula x138=x9.eq(x9); + Formula x139=x10.eq(x10); + Formula x140=x11.eq(x11); + Formula x141=x12.eq(x12); + Formula x142=x13.eq(x13); + Formula x143=x14.eq(x14); + Formula x144=x15.eq(x15); + Formula x16=Formula.compose(FormulaOperator.AND, x17, x19, x23, x24, x25, x34, x36, x41, x44, x51, x53, x89, x96, x98, x106, x108, x114, x129, x130, x131, x132, x133, x134, x135, x136, x137, x138, x139, x140, x141, x142, x143, x144); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x16,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/model/fileSystem/file_systemCheck2.java b/Source/kodkod/examples/kodkod/examples/models/model/fileSystem/file_systemCheck2.java new file mode 100644 index 0000000..876a09e --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/model/fileSystem/file_systemCheck2.java @@ -0,0 +1,422 @@ +package kodkod.examples.model.fileSystem; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "file_system", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =4, + NestedRelationalJoins = 2, + TransitiveClosure = 2, + NestedQuantifiers = 3, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 0, + Constraints = 10 +) + + +public final class file_systemCheck2 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/File"); + Relation x7 = Relation.unary("this/Root"); + Relation x8 = Relation.unary("this/Cur"); + Relation x9 = Relation.unary("this/Dir remainder"); + Relation x10 = Relation.unary("this/Name"); + Relation x11 = Relation.unary("this/DirEntry"); + Relation x12 = Relation.nary("this/Dir.entries", 2); + Relation x13 = Relation.nary("this/Dir.parent", 2); + Relation x14 = Relation.nary("this/DirEntry.name", 2); + Relation x15 = Relation.nary("this/DirEntry.contents", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "DirEntry$0", + "DirEntry$1", "DirEntry$2", "DirEntry$3", "DirEntry$4", "Name$0", "Name$1", + "Name$2", "Name$3", "Name$4", "Object$0", "Object$1", "Object$2", + "Object$3", "Root$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Object$0")); + x6_upper.add(factory.tuple("Object$1")); + x6_upper.add(factory.tuple("Object$2")); + x6_upper.add(factory.tuple("Object$3")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Root$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Object$0")); + x8_upper.add(factory.tuple("Object$1")); + x8_upper.add(factory.tuple("Object$2")); + x8_upper.add(factory.tuple("Object$3")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Object$0")); + x9_upper.add(factory.tuple("Object$1")); + x9_upper.add(factory.tuple("Object$2")); + x9_upper.add(factory.tuple("Object$3")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Name$0")); + x10_upper.add(factory.tuple("Name$1")); + x10_upper.add(factory.tuple("Name$2")); + x10_upper.add(factory.tuple("Name$3")); + x10_upper.add(factory.tuple("Name$4")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("DirEntry$0")); + x11_upper.add(factory.tuple("DirEntry$1")); + x11_upper.add(factory.tuple("DirEntry$2")); + x11_upper.add(factory.tuple("DirEntry$3")); + x11_upper.add(factory.tuple("DirEntry$4")); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("DirEntry$0"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("DirEntry$1"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("DirEntry$2"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("DirEntry$3"))); + x12_upper.add(factory.tuple("Root$0").product(factory.tuple("DirEntry$4"))); + x12_upper.add(factory.tuple("Object$0").product(factory.tuple("DirEntry$0"))); + x12_upper.add(factory.tuple("Object$0").product(factory.tuple("DirEntry$1"))); + x12_upper.add(factory.tuple("Object$0").product(factory.tuple("DirEntry$2"))); + x12_upper.add(factory.tuple("Object$0").product(factory.tuple("DirEntry$3"))); + x12_upper.add(factory.tuple("Object$0").product(factory.tuple("DirEntry$4"))); + x12_upper.add(factory.tuple("Object$1").product(factory.tuple("DirEntry$0"))); + x12_upper.add(factory.tuple("Object$1").product(factory.tuple("DirEntry$1"))); + x12_upper.add(factory.tuple("Object$1").product(factory.tuple("DirEntry$2"))); + x12_upper.add(factory.tuple("Object$1").product(factory.tuple("DirEntry$3"))); + x12_upper.add(factory.tuple("Object$1").product(factory.tuple("DirEntry$4"))); + x12_upper.add(factory.tuple("Object$2").product(factory.tuple("DirEntry$0"))); + x12_upper.add(factory.tuple("Object$2").product(factory.tuple("DirEntry$1"))); + x12_upper.add(factory.tuple("Object$2").product(factory.tuple("DirEntry$2"))); + x12_upper.add(factory.tuple("Object$2").product(factory.tuple("DirEntry$3"))); + x12_upper.add(factory.tuple("Object$2").product(factory.tuple("DirEntry$4"))); + x12_upper.add(factory.tuple("Object$3").product(factory.tuple("DirEntry$0"))); + x12_upper.add(factory.tuple("Object$3").product(factory.tuple("DirEntry$1"))); + x12_upper.add(factory.tuple("Object$3").product(factory.tuple("DirEntry$2"))); + x12_upper.add(factory.tuple("Object$3").product(factory.tuple("DirEntry$3"))); + x12_upper.add(factory.tuple("Object$3").product(factory.tuple("DirEntry$4"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$0"))); + x13_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$1"))); + x13_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$2"))); + x13_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$3"))); + x13_upper.add(factory.tuple("Object$0").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$0"))); + x13_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$1"))); + x13_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$2"))); + x13_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$3"))); + x13_upper.add(factory.tuple("Object$1").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$0"))); + x13_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$1"))); + x13_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$2"))); + x13_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$3"))); + x13_upper.add(factory.tuple("Object$2").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("Object$2").product(factory.tuple("Object$0"))); + x13_upper.add(factory.tuple("Object$2").product(factory.tuple("Object$1"))); + x13_upper.add(factory.tuple("Object$2").product(factory.tuple("Object$2"))); + x13_upper.add(factory.tuple("Object$2").product(factory.tuple("Object$3"))); + x13_upper.add(factory.tuple("Object$3").product(factory.tuple("Root$0"))); + x13_upper.add(factory.tuple("Object$3").product(factory.tuple("Object$0"))); + x13_upper.add(factory.tuple("Object$3").product(factory.tuple("Object$1"))); + x13_upper.add(factory.tuple("Object$3").product(factory.tuple("Object$2"))); + x13_upper.add(factory.tuple("Object$3").product(factory.tuple("Object$3"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Name$0"))); + x14_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Name$1"))); + x14_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Name$2"))); + x14_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Name$3"))); + x14_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Name$4"))); + x14_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Name$0"))); + x14_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Name$1"))); + x14_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Name$2"))); + x14_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Name$3"))); + x14_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Name$4"))); + x14_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Name$0"))); + x14_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Name$1"))); + x14_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Name$2"))); + x14_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Name$3"))); + x14_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Name$4"))); + x14_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Name$0"))); + x14_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Name$1"))); + x14_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Name$2"))); + x14_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Name$3"))); + x14_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Name$4"))); + x14_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Name$0"))); + x14_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Name$1"))); + x14_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Name$2"))); + x14_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Name$3"))); + x14_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Name$4"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Object$0"))); + x15_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Object$1"))); + x15_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Object$2"))); + x15_upper.add(factory.tuple("DirEntry$0").product(factory.tuple("Object$3"))); + x15_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Object$0"))); + x15_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Object$1"))); + x15_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Object$2"))); + x15_upper.add(factory.tuple("DirEntry$1").product(factory.tuple("Object$3"))); + x15_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Object$0"))); + x15_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Object$1"))); + x15_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Object$2"))); + x15_upper.add(factory.tuple("DirEntry$2").product(factory.tuple("Object$3"))); + x15_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Object$0"))); + x15_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Object$1"))); + x15_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Object$2"))); + x15_upper.add(factory.tuple("DirEntry$3").product(factory.tuple("Object$3"))); + x15_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Root$0"))); + x15_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Object$0"))); + x15_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Object$1"))); + x15_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Object$2"))); + x15_upper.add(factory.tuple("DirEntry$4").product(factory.tuple("Object$3"))); + bounds.bound(x15, x15_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x18=x7.intersection(x8); + Formula x17=x18.no(); + Expression x22=x7.union(x8); + Expression x21=x22.union(x9); + Expression x20=x6.intersection(x21); + Formula x19=x20.no(); + Formula x23=x8.lone(); + Formula x24=x8.lone(); + Variable x27=Variable.unary("this"); + Decls x26=x27.oneOf(x6); + Variable x30=Variable.unary("d"); + Decls x29=x30.oneOf(x21); + Expression x33=x30.join(x12); + Expression x32=x33.join(x15); + Formula x31=x27.in(x32); + Formula x28=x31.forSome(x29); + Formula x25=x28.forAll(x26); + Expression x35=x7.join(x13); + Formula x34=x35.no(); + Variable x38=Variable.unary("this"); + Decls x37=x38.oneOf(x21); + Expression x40=x38.join(x12); + Formula x39=x40.in(x11); + Formula x36=x39.forAll(x37); + Expression x42=x12.join(Expression.UNIV); + Formula x41=x42.in(x21); + Variable x46=Variable.unary("this"); + Decls x45=x46.oneOf(x21); + Expression x49=x46.join(x13); + Formula x48=x49.lone(); + Formula x50=x49.in(x21); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x52=x13.join(Expression.UNIV); + Formula x51=x52.in(x21); + Variable x55=Variable.unary("this"); + Decls x54=x55.oneOf(x21); + Expression x59=x55.join(x13); + Expression x62=x15.transpose(); + Expression x61=x55.join(x62); + Expression x63=x12.transpose(); + Expression x60=x61.join(x63); + Formula x58=x59.eq(x60); + Variable x68=Variable.unary("e1"); + Expression x69=x55.join(x12); + Decls x67=x68.oneOf(x69); + Variable x71=Variable.unary("e2"); + Decls x70=x71.oneOf(x69); + Decls x66=x67.and(x70); + Expression x75=x68.join(x14); + Expression x76=x71.join(x14); + Formula x74=x75.eq(x76); + Formula x73=x74.not(); + Formula x77=x68.eq(x71); + Formula x72=x73.or(x77); + Formula x65=x72.forAll(x66); + Formula x81=x55.eq(x7); + Formula x80=x81.not(); + Formula x79=x80.not(); + Expression x84=x13.closure(); + Expression x83=x55.join(x84); + Formula x82=x7.in(x83); + Formula x78=x79.or(x82); + Formula x64=x65.and(x78); + Formula x57=x58.and(x64); + Expression x88=x13.closure(); + Expression x87=x55.join(x88); + Formula x86=x55.in(x87); + Formula x85=x86.not(); + Formula x56=x57.and(x85); + Formula x53=x56.forAll(x54); + Variable x91=Variable.unary("this"); + Decls x90=x91.oneOf(x11); + Expression x94=x91.join(x14); + Formula x93=x94.one(); + Formula x95=x94.in(x10); + Formula x92=x93.and(x95); + Formula x89=x92.forAll(x90); + Expression x97=x14.join(Expression.UNIV); + Formula x96=x97.in(x11); + Variable x100=Variable.unary("this"); + Decls x99=x100.oneOf(x11); + Expression x103=x100.join(x15); + Formula x102=x103.one(); + Expression x105=x6.union(x21); + Formula x104=x103.in(x105); + Formula x101=x102.and(x104); + Formula x98=x101.forAll(x99); + Expression x107=x15.join(Expression.UNIV); + Formula x106=x107.in(x11); + Variable x110=Variable.unary("this"); + Decls x109=x110.oneOf(x11); + Expression x113=x12.transpose(); + Expression x112=x110.join(x113); + Formula x111=x112.one(); + Formula x108=x111.forAll(x109); + Variable x119=Variable.unary("OneParent_correctVersion_d"); + Expression x120=x21.difference(x7); + Decls x118=x119.oneOf(x120); + Expression x123=x119.join(x13); + Formula x122=x123.one(); + Expression x125=x15.join(x119); + Formula x124=x125.one(); + Formula x121=x122.and(x124); + Formula x117=x121.forAll(x118); + Formula x116=x117.not(); + Variable x128=Variable.unary("NoDirAliases_o"); + Decls x127=x128.oneOf(x21); + Expression x131=x15.transpose(); + Expression x130=x128.join(x131); + Formula x129=x130.lone(); + Formula x126=x129.forAll(x127); + Formula x115=x116.or(x126); + Formula x114=x115.not(); + Formula x132=x0.eq(x0); + Formula x133=x1.eq(x1); + Formula x134=x2.eq(x2); + Formula x135=x3.eq(x3); + Formula x136=x4.eq(x4); + Formula x137=x5.eq(x5); + Formula x138=x6.eq(x6); + Formula x139=x7.eq(x7); + Formula x140=x8.eq(x8); + Formula x141=x9.eq(x9); + Formula x142=x10.eq(x10); + Formula x143=x11.eq(x11); + Formula x144=x12.eq(x12); + Formula x145=x13.eq(x13); + Formula x146=x14.eq(x14); + Formula x147=x15.eq(x15); + Formula x16=Formula.compose(FormulaOperator.AND, x17, x19, x23, x24, x25, x34, x36, x41, x44, x51, x53, x89, x96, x98, x106, x108, x114, x132, x133, x134, x135, x136, x137, x138, x139, x140, x141, x142, x143, x144, x145, x146, x147); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x16,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/model/java/javatypesRun.java b/Source/kodkod/examples/kodkod/examples/models/model/java/javatypesRun.java new file mode 100644 index 0000000..a7d6621 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/model/java/javatypesRun.java @@ -0,0 +1,304 @@ +package kodkod.examples.models.model.java; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "javatypes", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 2, + TransitiveClosure = 3, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 7 +) + + +public final class javatypesRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Object"); + Relation x7 = Relation.unary("this/Class remainder"); + Relation x8 = Relation.unary("this/Interface"); + Relation x9 = Relation.unary("this/Instance"); + Relation x10 = Relation.unary("this/Variable"); + Relation x11 = Relation.nary("this/Type.subtypes", 2); + Relation x12 = Relation.nary("this/Instance.type", 2); + Relation x13 = Relation.nary("this/Variable.holds", 2); + Relation x14 = Relation.nary("this/Variable.type", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Instance$0", + "Instance$1", "Instance$2", "Object$0", "Type$0", "Type$1", "Variable$0", + "Variable$1", "Variable$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Object$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Type$0")); + x7_upper.add(factory.tuple("Type$1")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Type$0")); + x8_upper.add(factory.tuple("Type$1")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Instance$0")); + x9_upper.add(factory.tuple("Instance$1")); + x9_upper.add(factory.tuple("Instance$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Variable$0")); + x10_upper.add(factory.tuple("Variable$1")); + x10_upper.add(factory.tuple("Variable$2")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$0"))); + x11_upper.add(factory.tuple("Object$0").product(factory.tuple("Type$0"))); + x11_upper.add(factory.tuple("Object$0").product(factory.tuple("Type$1"))); + x11_upper.add(factory.tuple("Type$0").product(factory.tuple("Object$0"))); + x11_upper.add(factory.tuple("Type$0").product(factory.tuple("Type$0"))); + x11_upper.add(factory.tuple("Type$0").product(factory.tuple("Type$1"))); + x11_upper.add(factory.tuple("Type$1").product(factory.tuple("Object$0"))); + x11_upper.add(factory.tuple("Type$1").product(factory.tuple("Type$0"))); + x11_upper.add(factory.tuple("Type$1").product(factory.tuple("Type$1"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Instance$0").product(factory.tuple("Object$0"))); + x12_upper.add(factory.tuple("Instance$0").product(factory.tuple("Type$0"))); + x12_upper.add(factory.tuple("Instance$0").product(factory.tuple("Type$1"))); + x12_upper.add(factory.tuple("Instance$1").product(factory.tuple("Object$0"))); + x12_upper.add(factory.tuple("Instance$1").product(factory.tuple("Type$0"))); + x12_upper.add(factory.tuple("Instance$1").product(factory.tuple("Type$1"))); + x12_upper.add(factory.tuple("Instance$2").product(factory.tuple("Object$0"))); + x12_upper.add(factory.tuple("Instance$2").product(factory.tuple("Type$0"))); + x12_upper.add(factory.tuple("Instance$2").product(factory.tuple("Type$1"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Variable$0").product(factory.tuple("Instance$0"))); + x13_upper.add(factory.tuple("Variable$0").product(factory.tuple("Instance$1"))); + x13_upper.add(factory.tuple("Variable$0").product(factory.tuple("Instance$2"))); + x13_upper.add(factory.tuple("Variable$1").product(factory.tuple("Instance$0"))); + x13_upper.add(factory.tuple("Variable$1").product(factory.tuple("Instance$1"))); + x13_upper.add(factory.tuple("Variable$1").product(factory.tuple("Instance$2"))); + x13_upper.add(factory.tuple("Variable$2").product(factory.tuple("Instance$0"))); + x13_upper.add(factory.tuple("Variable$2").product(factory.tuple("Instance$1"))); + x13_upper.add(factory.tuple("Variable$2").product(factory.tuple("Instance$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Variable$0").product(factory.tuple("Object$0"))); + x14_upper.add(factory.tuple("Variable$0").product(factory.tuple("Type$0"))); + x14_upper.add(factory.tuple("Variable$0").product(factory.tuple("Type$1"))); + x14_upper.add(factory.tuple("Variable$1").product(factory.tuple("Object$0"))); + x14_upper.add(factory.tuple("Variable$1").product(factory.tuple("Type$0"))); + x14_upper.add(factory.tuple("Variable$1").product(factory.tuple("Type$1"))); + x14_upper.add(factory.tuple("Variable$2").product(factory.tuple("Object$0"))); + x14_upper.add(factory.tuple("Variable$2").product(factory.tuple("Type$0"))); + x14_upper.add(factory.tuple("Variable$2").product(factory.tuple("Type$1"))); + bounds.bound(x14, x14_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x18=x6.union(x7); + Expression x17=x18.intersection(x8); + Formula x16=x17.no(); + Variable x21=Variable.unary("Show_this"); + Expression x22=x18.union(x8); + Decls x20=x21.oneOf(x22); + Expression x24=x21.join(x11); + Formula x23=x24.in(x22); + Formula x19=x23.forAll(x20); + Expression x26=x11.join(Expression.UNIV); + Formula x25=x26.in(x22); + Variable x30=Variable.unary("Show_this"); + Decls x29=x30.oneOf(x9); + Expression x33=x30.join(x12); + Formula x32=x33.one(); + Formula x34=x33.in(x18); + Formula x31=x32.and(x34); + Formula x28=x31.forAll(x29); + Expression x36=x12.join(Expression.UNIV); + Formula x35=x36.in(x9); + Variable x39=Variable.unary("Show_this"); + Decls x38=x39.oneOf(x10); + Expression x42=x39.join(x13); + Formula x41=x42.lone(); + Formula x43=x42.in(x9); + Formula x40=x41.and(x43); + Formula x37=x40.forAll(x38); + Expression x45=x13.join(Expression.UNIV); + Formula x44=x45.in(x10); + Variable x48=Variable.unary("Show_this"); + Decls x47=x48.oneOf(x10); + Expression x51=x48.join(x14); + Formula x50=x51.one(); + Formula x52=x51.in(x22); + Formula x49=x50.and(x52); + Formula x46=x49.forAll(x47); + Expression x54=x14.join(Expression.UNIV); + Formula x53=x54.in(x10); + Expression x58=x11.closure(); + Expression x65=Expression.INTS.union(x5); + Expression x64=x65.union(x22); + Expression x63=x64.union(x9); + Expression x62=x63.union(x10); + Expression x61=x62.product(Expression.UNIV); + Expression x59=Expression.IDEN.intersection(x61); + Expression x57=x58.union(x59); + Expression x56=x6.join(x57); + Formula x55=x22.in(x56); + Variable x69=Variable.unary("Show_t"); + Decls x68=x69.oneOf(x22); + Expression x73=x11.closure(); + Expression x72=x69.join(x73); + Formula x71=x69.in(x72); + Formula x70=x71.not(); + Formula x67=x70.forAll(x68); + Variable x76=Variable.unary("Show_t"); + Decls x75=x76.oneOf(x22); + Expression x80=x11.transpose(); + Expression x79=x76.join(x80); + Expression x78=x79.intersection(x18); + Formula x77=x78.lone(); + Formula x74=x77.forAll(x75); + Variable x83=Variable.unary("Show_v"); + Decls x82=x83.oneOf(x10); + Expression x86=x83.join(x13); + Expression x85=x86.join(x12); + Expression x88=x83.join(x14); + Expression x90=x11.closure(); + Expression x92=x62.product(Expression.UNIV); + Expression x91=Expression.IDEN.intersection(x92); + Expression x89=x90.union(x91); + Expression x87=x88.join(x89); + Formula x84=x85.in(x87); + Formula x81=x84.forAll(x82); + Expression x94=x18.difference(x6); + Formula x93=x94.some(); + Formula x95=x8.some(); + Expression x98=x10.join(x14); + Expression x97=x98.intersection(x8); + Formula x96=x97.some(); + Formula x99=x0.eq(x0); + Formula x100=x1.eq(x1); + Formula x101=x2.eq(x2); + Formula x102=x3.eq(x3); + Formula x103=x4.eq(x4); + Formula x104=x5.eq(x5); + Formula x105=x6.eq(x6); + Formula x106=x7.eq(x7); + Formula x107=x8.eq(x8); + Formula x108=x9.eq(x9); + Formula x109=x10.eq(x10); + Formula x110=x11.eq(x11); + Formula x111=x12.eq(x12); + Formula x112=x13.eq(x13); + Formula x113=x14.eq(x14); + Formula x15=Formula.compose(FormulaOperator.AND, x16, x19, x25, x28, x35, x37, x44, x46, x53, x55, x67, x74, x81, x93, x95, x96, x99, x100, x101, x102, x103, x104, x105, x106, x107, x108, x109, x110, x111, x112, x113); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x15,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem1Check.java b/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem1Check.java new file mode 100644 index 0000000..0573911 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem1Check.java @@ -0,0 +1,584 @@ +package kodkod.examples.models.model.microsoftCom; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "com", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 10, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 5, + TransitiveClosure = 1, + NestedQuantifiers = 10, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 7, + OrderedRelations = 0, + Constraints = 10 +) + + +public final class comTheorem1Check { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/IID"); + Relation x7 = Relation.unary("this/LegalInterface"); + Relation x8 = Relation.unary("this/Interface remainder"); + Relation x9 = Relation.unary("this/LegalComponent"); + Relation x10 = Relation.unary("this/Component remainder"); + Relation x11 = Relation.nary("this/Interface.qi", 3); + Relation x12 = Relation.nary("this/Interface.iids", 2); + Relation x13 = Relation.nary("this/Interface.iidsKnown", 2); + Relation x14 = Relation.nary("this/Interface.reaches", 2); + Relation x15 = Relation.nary("this/Component.interfaces", 2); + Relation x16 = Relation.nary("this/Component.iids", 2); + Relation x17 = Relation.nary("this/Component.first", 2); + Relation x18 = Relation.nary("this/Component.identity", 2); + Relation x19 = Relation.nary("this/Component.eqs", 2); + Relation x20 = Relation.nary("this/Component.aggregates", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Component$0", + "Component$1", "Component$2", "IID$0", "IID$1", "IID$2", "Interface$0", + "Interface$1", "Interface$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("IID$0")); + x6_upper.add(factory.tuple("IID$1")); + x6_upper.add(factory.tuple("IID$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Interface$0")); + x7_upper.add(factory.tuple("Interface$1")); + x7_upper.add(factory.tuple("Interface$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Interface$0")); + x8_upper.add(factory.tuple("Interface$1")); + x8_upper.add(factory.tuple("Interface$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Component$0")); + x9_upper.add(factory.tuple("Component$1")); + x9_upper.add(factory.tuple("Component$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Component$0")); + x10_upper.add(factory.tuple("Component$1")); + x10_upper.add(factory.tuple("Component$2")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(3); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$2"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$2"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$2"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$2"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(2); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$2"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$2"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$2"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$2"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$2"))); + bounds.bound(x20, x20_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x24=Variable.unary("Theorem1_this"); + Expression x25=x7.union(x8); + Decls x23=x24.oneOf(x25); + Expression x29=x24.join(x11); + Expression x30=x6.product(x25); + Formula x28=x29.in(x30); + Variable x33=Variable.unary(""); + Decls x32=x33.oneOf(x6); + Expression x36=x33.join(x29); + Formula x35=x36.lone(); + Formula x37=x36.in(x25); + Formula x34=x35.and(x37); + Formula x31=x34.forAll(x32); + Formula x27=x28.and(x31); + Variable x40=Variable.unary(""); + Decls x39=x40.oneOf(x25); + Expression x42=x29.join(x40); + Formula x41=x42.in(x6); + Formula x38=x41.forAll(x39); + Formula x26=x27.and(x38); + Formula x22=x26.forAll(x23); + Expression x45=x11.join(Expression.UNIV); + Expression x44=x45.join(Expression.UNIV); + Formula x43=x44.in(x25); + Variable x49=Variable.unary("Theorem1_this"); + Decls x48=x49.oneOf(x25); + Expression x51=x49.join(x12); + Formula x50=x51.in(x6); + Formula x47=x50.forAll(x48); + Expression x53=x12.join(Expression.UNIV); + Formula x52=x53.in(x25); + Variable x56=Variable.unary("Theorem1_this"); + Decls x55=x56.oneOf(x25); + Expression x59=x56.join(x13); + Formula x58=x59.one(); + Formula x60=x59.in(x6); + Formula x57=x58.and(x60); + Formula x54=x57.forAll(x55); + Expression x62=x13.join(Expression.UNIV); + Formula x61=x62.in(x25); + Variable x65=Variable.unary("Theorem1_this"); + Decls x64=x65.oneOf(x25); + Expression x68=x65.join(x14); + Formula x67=x68.one(); + Formula x69=x68.in(x25); + Formula x66=x67.and(x69); + Formula x63=x66.forAll(x64); + Expression x71=x14.join(Expression.UNIV); + Formula x70=x71.in(x25); + Variable x74=Variable.unary("Theorem1_this"); + Decls x73=x74.oneOf(x25); + Expression x77=x74.join(x13); + Expression x79=x74.join(x11); + Expression x83=Expression.INTS.union(x5); + Expression x82=x83.union(x6); + Expression x81=x82.union(x25); + Expression x85=x9.union(x10); + Expression x80=x81.union(x85); + Expression x78=x79.join(x80); + Formula x76=x77.eq(x78); + Expression x87=x74.join(x14); + Expression x89=x74.join(x11); + Expression x88=x80.join(x89); + Formula x86=x87.eq(x88); + Formula x75=x76.and(x86); + Formula x72=x75.forAll(x73); + Variable x92=Variable.unary("Theorem1_this"); + Decls x91=x92.oneOf(x85); + Expression x94=x92.join(x15); + Formula x93=x94.in(x25); + Formula x90=x93.forAll(x91); + Expression x96=x15.join(Expression.UNIV); + Formula x95=x96.in(x85); + Variable x99=Variable.unary("Theorem1_this"); + Decls x98=x99.oneOf(x85); + Expression x101=x99.join(x16); + Formula x100=x101.in(x6); + Formula x97=x100.forAll(x98); + Expression x103=x16.join(Expression.UNIV); + Formula x102=x103.in(x85); + Variable x106=Variable.unary("Theorem1_this"); + Decls x105=x106.oneOf(x85); + Expression x109=x106.join(x17); + Formula x108=x109.one(); + Expression x111=x106.join(x15); + Formula x110=x109.in(x111); + Formula x107=x108.and(x110); + Formula x104=x107.forAll(x105); + Expression x113=x17.join(Expression.UNIV); + Formula x112=x113.in(x85); + Variable x116=Variable.unary("Theorem1_this"); + Decls x115=x116.oneOf(x85); + Expression x119=x116.join(x18); + Formula x118=x119.one(); + Expression x121=x116.join(x15); + Formula x120=x119.in(x121); + Formula x117=x118.and(x120); + Formula x114=x117.forAll(x115); + Expression x123=x18.join(Expression.UNIV); + Formula x122=x123.in(x85); + Variable x126=Variable.unary("Theorem1_this"); + Decls x125=x126.oneOf(x85); + Expression x128=x126.join(x19); + Formula x127=x128.in(x85); + Formula x124=x127.forAll(x125); + Expression x130=x19.join(Expression.UNIV); + Formula x129=x130.in(x85); + Variable x133=Variable.unary("Theorem1_this"); + Decls x132=x133.oneOf(x85); + Expression x135=x133.join(x20); + Formula x134=x135.in(x85); + Formula x131=x134.forAll(x132); + Expression x137=x20.join(Expression.UNIV); + Formula x136=x137.in(x85); + Variable x141=Variable.unary("Theorem1_c1"); + Decls x140=x141.oneOf(x85); + Variable x143=Variable.unary("Theorem1_c2"); + Decls x142=x143.oneOf(x85); + Decls x139=x140.and(x142); + Expression x146=x141.product(x143); + Formula x145=x146.in(x19); + Expression x148=x141.join(x18); + Expression x149=x143.join(x18); + Formula x147=x148.eq(x149); + Formula x144=x145.iff(x147); + Formula x138=x144.forAll(x139); + Variable x152=Variable.unary("Theorem1_unknown"); + Decls x151=x152.oneOf(x6); + Variable x155=Variable.unary("Theorem1_c"); + Decls x154=x155.oneOf(x85); + Variable x158=Variable.unary("Theorem1_i"); + Expression x159=x155.join(x15); + Decls x157=x158.oneOf(x159); + Expression x162=x158.join(x11); + Expression x161=x152.join(x162); + Expression x163=x155.join(x18); + Formula x160=x161.eq(x163); + Formula x156=x160.forAll(x157); + Formula x153=x156.forAll(x154); + Formula x150=x153.forSome(x151); + Variable x166=Variable.unary("Theorem1_c"); + Decls x165=x166.oneOf(x85); + Expression x169=x166.join(x16); + Expression x171=x166.join(x15); + Expression x170=x171.join(x12); + Formula x168=x169.eq(x170); + Variable x174=Variable.unary("Theorem1_i"); + Expression x175=x166.join(x15); + Decls x173=x174.oneOf(x175); + Variable x178=Variable.unary("Theorem1_x"); + Decls x177=x178.oneOf(x6); + Expression x181=x174.join(x11); + Expression x180=x178.join(x181); + Expression x182=x166.join(x15); + Formula x179=x180.in(x182); + Formula x176=x179.forAll(x177); + Formula x172=x176.forAll(x173); + Formula x167=x168.and(x172); + Formula x164=x167.forAll(x165); + Variable x185=Variable.unary("Theorem1_i"); + Decls x184=x185.oneOf(x7); + Variable x188=Variable.unary("Theorem1_x"); + Expression x189=x185.join(x13); + Decls x187=x188.oneOf(x189); + Expression x193=x185.join(x11); + Expression x192=x188.join(x193); + Expression x191=x192.join(x12); + Formula x190=x188.in(x191); + Formula x186=x190.forAll(x187); + Formula x183=x186.forAll(x184); + Expression x195=x9.join(x15); + Formula x194=x195.in(x7); + Variable x198=Variable.unary("Theorem1_i"); + Decls x197=x198.oneOf(x7); + Expression x200=x198.join(x12); + Expression x201=x198.join(x13); + Formula x199=x200.in(x201); + Formula x196=x199.forAll(x197); + Variable x205=Variable.unary("Theorem1_i"); + Decls x204=x205.oneOf(x7); + Variable x207=Variable.unary("Theorem1_j"); + Decls x206=x207.oneOf(x7); + Decls x203=x204.and(x206); + Expression x211=x205.join(x14); + Formula x210=x207.in(x211); + Formula x209=x210.not(); + Expression x213=x205.join(x12); + Expression x214=x207.join(x13); + Formula x212=x213.in(x214); + Formula x208=x209.or(x212); + Formula x202=x208.forAll(x203); + Variable x218=Variable.unary("Theorem1_i"); + Decls x217=x218.oneOf(x7); + Variable x220=Variable.unary("Theorem1_j"); + Decls x219=x220.oneOf(x7); + Decls x216=x217.and(x219); + Expression x224=x218.join(x14); + Formula x223=x220.in(x224); + Formula x222=x223.not(); + Expression x226=x220.join(x13); + Expression x227=x218.join(x13); + Formula x225=x226.in(x227); + Formula x221=x222.or(x225); + Formula x215=x221.forAll(x216); + Variable x230=Variable.unary("Theorem1_c"); + Decls x229=x230.oneOf(x85); + Expression x234=x20.closure(); + Expression x233=x230.join(x234); + Formula x232=x230.in(x233); + Formula x231=x232.not(); + Formula x228=x231.forAll(x229); + Variable x237=Variable.unary("Theorem1_outer"); + Decls x236=x237.oneOf(x85); + Variable x240=Variable.unary("Theorem1_inner"); + Expression x241=x237.join(x20); + Decls x239=x240.oneOf(x241); + Expression x245=x240.join(x15); + Expression x246=x237.join(x15); + Expression x244=x245.intersection(x246); + Formula x243=x244.some(); + Variable x249=Variable.unary("Theorem1_o"); + Expression x250=x237.join(x15); + Decls x248=x249.oneOf(x250); + Variable x253=Variable.unary("Theorem1_i"); + Expression x255=x240.join(x15); + Expression x256=x240.join(x17); + Expression x254=x255.difference(x256); + Decls x252=x253.oneOf(x254); + Variable x259=Variable.unary("Theorem1_x"); + Decls x258=x259.oneOf(x85); + Expression x262=x259.join(x16); + Expression x263=x253.join(x11); + Expression x261=x262.join(x263); + Expression x265=x259.join(x16); + Expression x266=x249.join(x11); + Expression x264=x265.join(x266); + Formula x260=x261.eq(x264); + Formula x257=x260.forAll(x258); + Formula x251=x257.forAll(x252); + Formula x247=x251.forSome(x248); + Formula x242=x243.and(x247); + Formula x238=x242.forAll(x239); + Formula x235=x238.forAll(x236); + Variable x270=Variable.unary("Theorem1_c"); + Decls x269=x270.oneOf(x9); + Variable x273=Variable.unary("Theorem1_i"); + Expression x274=x270.join(x15); + Decls x272=x273.oneOf(x274); + Expression x276=x273.join(x13); + Expression x277=x270.join(x16); + Formula x275=x276.eq(x277); + Formula x271=x275.forAll(x272); + Formula x268=x271.forAll(x269); + Formula x267=x268.not(); + Formula x278=x0.eq(x0); + Formula x279=x1.eq(x1); + Formula x280=x2.eq(x2); + Formula x281=x3.eq(x3); + Formula x282=x4.eq(x4); + Formula x283=x5.eq(x5); + Formula x284=x6.eq(x6); + Formula x285=x7.eq(x7); + Formula x286=x8.eq(x8); + Formula x287=x9.eq(x9); + Formula x288=x10.eq(x10); + Formula x289=x11.eq(x11); + Formula x290=x12.eq(x12); + Formula x291=x13.eq(x13); + Formula x292=x14.eq(x14); + Formula x293=x15.eq(x15); + Formula x294=x16.eq(x16); + Formula x295=x17.eq(x17); + Formula x296=x18.eq(x18); + Formula x297=x19.eq(x19); + Formula x298=x20.eq(x20); + Formula x21=Formula.compose(FormulaOperator.AND, x22, x43, x47, x52, x54, x61, x63, x70, x72, x90, x95, x97, x102, x104, x112, x114, x122, x124, x129, x131, x136, x138, x150, x164, x183, x194, x196, x202, x215, x228, x235, x267, x278, x279, x280, x281, x282, x283, x284, x285, x286, x287, x288, x289, x290, x291, x292, x293, x294, x295, x296, x297, x298); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x21,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem2Check.java b/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem2Check.java new file mode 100644 index 0000000..a176f7b --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem2Check.java @@ -0,0 +1,587 @@ +package kodkod.examples.models.model.microsoftCom; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "com", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 10, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 5, + TransitiveClosure = 1, + NestedQuantifiers = 10, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 7, + OrderedRelations = 0, + Constraints = 10 +) + + +public final class comTheorem2Check { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/IID"); + Relation x7 = Relation.unary("this/LegalInterface"); + Relation x8 = Relation.unary("this/Interface remainder"); + Relation x9 = Relation.unary("this/LegalComponent"); + Relation x10 = Relation.unary("this/Component remainder"); + Relation x11 = Relation.nary("this/Interface.qi", 3); + Relation x12 = Relation.nary("this/Interface.iids", 2); + Relation x13 = Relation.nary("this/Interface.iidsKnown", 2); + Relation x14 = Relation.nary("this/Interface.reaches", 2); + Relation x15 = Relation.nary("this/Component.interfaces", 2); + Relation x16 = Relation.nary("this/Component.iids", 2); + Relation x17 = Relation.nary("this/Component.first", 2); + Relation x18 = Relation.nary("this/Component.identity", 2); + Relation x19 = Relation.nary("this/Component.eqs", 2); + Relation x20 = Relation.nary("this/Component.aggregates", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Component$0", + "Component$1", "Component$2", "IID$0", "IID$1", "IID$2", "Interface$0", + "Interface$1", "Interface$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("IID$0")); + x6_upper.add(factory.tuple("IID$1")); + x6_upper.add(factory.tuple("IID$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Interface$0")); + x7_upper.add(factory.tuple("Interface$1")); + x7_upper.add(factory.tuple("Interface$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Interface$0")); + x8_upper.add(factory.tuple("Interface$1")); + x8_upper.add(factory.tuple("Interface$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Component$0")); + x9_upper.add(factory.tuple("Component$1")); + x9_upper.add(factory.tuple("Component$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Component$0")); + x10_upper.add(factory.tuple("Component$1")); + x10_upper.add(factory.tuple("Component$2")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(3); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$2"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$2"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$2"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$2"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(2); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$2"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$2"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$2"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$2"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$2"))); + bounds.bound(x20, x20_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x24=Variable.unary("Theorem2_this"); + Expression x25=x7.union(x8); + Decls x23=x24.oneOf(x25); + Expression x29=x24.join(x11); + Expression x30=x6.product(x25); + Formula x28=x29.in(x30); + Variable x33=Variable.unary(""); + Decls x32=x33.oneOf(x6); + Expression x36=x33.join(x29); + Formula x35=x36.lone(); + Formula x37=x36.in(x25); + Formula x34=x35.and(x37); + Formula x31=x34.forAll(x32); + Formula x27=x28.and(x31); + Variable x40=Variable.unary(""); + Decls x39=x40.oneOf(x25); + Expression x42=x29.join(x40); + Formula x41=x42.in(x6); + Formula x38=x41.forAll(x39); + Formula x26=x27.and(x38); + Formula x22=x26.forAll(x23); + Expression x45=x11.join(Expression.UNIV); + Expression x44=x45.join(Expression.UNIV); + Formula x43=x44.in(x25); + Variable x49=Variable.unary("Theorem2_this"); + Decls x48=x49.oneOf(x25); + Expression x51=x49.join(x12); + Formula x50=x51.in(x6); + Formula x47=x50.forAll(x48); + Expression x53=x12.join(Expression.UNIV); + Formula x52=x53.in(x25); + Variable x56=Variable.unary("Theorem2_this"); + Decls x55=x56.oneOf(x25); + Expression x59=x56.join(x13); + Formula x58=x59.one(); + Formula x60=x59.in(x6); + Formula x57=x58.and(x60); + Formula x54=x57.forAll(x55); + Expression x62=x13.join(Expression.UNIV); + Formula x61=x62.in(x25); + Variable x65=Variable.unary("Theorem2_this"); + Decls x64=x65.oneOf(x25); + Expression x68=x65.join(x14); + Formula x67=x68.one(); + Formula x69=x68.in(x25); + Formula x66=x67.and(x69); + Formula x63=x66.forAll(x64); + Expression x71=x14.join(Expression.UNIV); + Formula x70=x71.in(x25); + Variable x74=Variable.unary("Theorem2_this"); + Decls x73=x74.oneOf(x25); + Expression x77=x74.join(x13); + Expression x79=x74.join(x11); + Expression x83=Expression.INTS.union(x5); + Expression x82=x83.union(x6); + Expression x81=x82.union(x25); + Expression x85=x9.union(x10); + Expression x80=x81.union(x85); + Expression x78=x79.join(x80); + Formula x76=x77.eq(x78); + Expression x87=x74.join(x14); + Expression x89=x74.join(x11); + Expression x88=x80.join(x89); + Formula x86=x87.eq(x88); + Formula x75=x76.and(x86); + Formula x72=x75.forAll(x73); + Variable x92=Variable.unary("Theorem2_this"); + Decls x91=x92.oneOf(x85); + Expression x94=x92.join(x15); + Formula x93=x94.in(x25); + Formula x90=x93.forAll(x91); + Expression x96=x15.join(Expression.UNIV); + Formula x95=x96.in(x85); + Variable x99=Variable.unary("Theorem2_this"); + Decls x98=x99.oneOf(x85); + Expression x101=x99.join(x16); + Formula x100=x101.in(x6); + Formula x97=x100.forAll(x98); + Expression x103=x16.join(Expression.UNIV); + Formula x102=x103.in(x85); + Variable x106=Variable.unary("Theorem2_this"); + Decls x105=x106.oneOf(x85); + Expression x109=x106.join(x17); + Formula x108=x109.one(); + Expression x111=x106.join(x15); + Formula x110=x109.in(x111); + Formula x107=x108.and(x110); + Formula x104=x107.forAll(x105); + Expression x113=x17.join(Expression.UNIV); + Formula x112=x113.in(x85); + Variable x116=Variable.unary("Theorem2_this"); + Decls x115=x116.oneOf(x85); + Expression x119=x116.join(x18); + Formula x118=x119.one(); + Expression x121=x116.join(x15); + Formula x120=x119.in(x121); + Formula x117=x118.and(x120); + Formula x114=x117.forAll(x115); + Expression x123=x18.join(Expression.UNIV); + Formula x122=x123.in(x85); + Variable x126=Variable.unary("Theorem2_this"); + Decls x125=x126.oneOf(x85); + Expression x128=x126.join(x19); + Formula x127=x128.in(x85); + Formula x124=x127.forAll(x125); + Expression x130=x19.join(Expression.UNIV); + Formula x129=x130.in(x85); + Variable x133=Variable.unary("Theorem2_this"); + Decls x132=x133.oneOf(x85); + Expression x135=x133.join(x20); + Formula x134=x135.in(x85); + Formula x131=x134.forAll(x132); + Expression x137=x20.join(Expression.UNIV); + Formula x136=x137.in(x85); + Variable x141=Variable.unary("Theorem2_c1"); + Decls x140=x141.oneOf(x85); + Variable x143=Variable.unary("Theorem2_c2"); + Decls x142=x143.oneOf(x85); + Decls x139=x140.and(x142); + Expression x146=x141.product(x143); + Formula x145=x146.in(x19); + Expression x148=x141.join(x18); + Expression x149=x143.join(x18); + Formula x147=x148.eq(x149); + Formula x144=x145.iff(x147); + Formula x138=x144.forAll(x139); + Variable x152=Variable.unary("Theorem2_unknown"); + Decls x151=x152.oneOf(x6); + Variable x155=Variable.unary("Theorem2_c"); + Decls x154=x155.oneOf(x85); + Variable x158=Variable.unary("Theorem2_i"); + Expression x159=x155.join(x15); + Decls x157=x158.oneOf(x159); + Expression x162=x158.join(x11); + Expression x161=x152.join(x162); + Expression x163=x155.join(x18); + Formula x160=x161.eq(x163); + Formula x156=x160.forAll(x157); + Formula x153=x156.forAll(x154); + Formula x150=x153.forSome(x151); + Variable x166=Variable.unary("Theorem2_c"); + Decls x165=x166.oneOf(x85); + Expression x169=x166.join(x16); + Expression x171=x166.join(x15); + Expression x170=x171.join(x12); + Formula x168=x169.eq(x170); + Variable x174=Variable.unary("Theorem2_i"); + Expression x175=x166.join(x15); + Decls x173=x174.oneOf(x175); + Variable x178=Variable.unary("Theorem2_x"); + Decls x177=x178.oneOf(x6); + Expression x181=x174.join(x11); + Expression x180=x178.join(x181); + Expression x182=x166.join(x15); + Formula x179=x180.in(x182); + Formula x176=x179.forAll(x177); + Formula x172=x176.forAll(x173); + Formula x167=x168.and(x172); + Formula x164=x167.forAll(x165); + Variable x185=Variable.unary("Theorem2_i"); + Decls x184=x185.oneOf(x7); + Variable x188=Variable.unary("Theorem2_x"); + Expression x189=x185.join(x13); + Decls x187=x188.oneOf(x189); + Expression x193=x185.join(x11); + Expression x192=x188.join(x193); + Expression x191=x192.join(x12); + Formula x190=x188.in(x191); + Formula x186=x190.forAll(x187); + Formula x183=x186.forAll(x184); + Expression x195=x9.join(x15); + Formula x194=x195.in(x7); + Variable x198=Variable.unary("Theorem2_i"); + Decls x197=x198.oneOf(x7); + Expression x200=x198.join(x12); + Expression x201=x198.join(x13); + Formula x199=x200.in(x201); + Formula x196=x199.forAll(x197); + Variable x205=Variable.unary("Theorem2_i"); + Decls x204=x205.oneOf(x7); + Variable x207=Variable.unary("Theorem2_j"); + Decls x206=x207.oneOf(x7); + Decls x203=x204.and(x206); + Expression x211=x205.join(x14); + Formula x210=x207.in(x211); + Formula x209=x210.not(); + Expression x213=x205.join(x12); + Expression x214=x207.join(x13); + Formula x212=x213.in(x214); + Formula x208=x209.or(x212); + Formula x202=x208.forAll(x203); + Variable x218=Variable.unary("Theorem2_i"); + Decls x217=x218.oneOf(x7); + Variable x220=Variable.unary("Theorem2_j"); + Decls x219=x220.oneOf(x7); + Decls x216=x217.and(x219); + Expression x224=x218.join(x14); + Formula x223=x220.in(x224); + Formula x222=x223.not(); + Expression x226=x220.join(x13); + Expression x227=x218.join(x13); + Formula x225=x226.in(x227); + Formula x221=x222.or(x225); + Formula x215=x221.forAll(x216); + Variable x230=Variable.unary("Theorem2_c"); + Decls x229=x230.oneOf(x85); + Expression x234=x20.closure(); + Expression x233=x230.join(x234); + Formula x232=x230.in(x233); + Formula x231=x232.not(); + Formula x228=x231.forAll(x229); + Variable x237=Variable.unary("Theorem2_outer"); + Decls x236=x237.oneOf(x85); + Variable x240=Variable.unary("Theorem2_inner"); + Expression x241=x237.join(x20); + Decls x239=x240.oneOf(x241); + Expression x245=x240.join(x15); + Expression x246=x237.join(x15); + Expression x244=x245.intersection(x246); + Formula x243=x244.some(); + Variable x249=Variable.unary("Theorem2_o"); + Expression x250=x237.join(x15); + Decls x248=x249.oneOf(x250); + Variable x253=Variable.unary("Theorem2_i"); + Expression x255=x240.join(x15); + Expression x256=x240.join(x17); + Expression x254=x255.difference(x256); + Decls x252=x253.oneOf(x254); + Variable x259=Variable.unary("Theorem2_x"); + Decls x258=x259.oneOf(x85); + Expression x262=x259.join(x16); + Expression x263=x253.join(x11); + Expression x261=x262.join(x263); + Expression x265=x259.join(x16); + Expression x266=x249.join(x11); + Expression x264=x265.join(x266); + Formula x260=x261.eq(x264); + Formula x257=x260.forAll(x258); + Formula x251=x257.forAll(x252); + Formula x247=x251.forSome(x248); + Formula x242=x243.and(x247); + Formula x238=x242.forAll(x239); + Formula x235=x238.forAll(x236); + Variable x270=Variable.unary("Theorem2_outer"); + Decls x269=x270.oneOf(x85); + Variable x273=Variable.unary("Theorem2_inner"); + Expression x274=x270.join(x20); + Decls x272=x273.oneOf(x274); + Formula x277=x273.in(x9); + Formula x276=x277.not(); + Expression x279=x273.join(x16); + Expression x280=x270.join(x16); + Formula x278=x279.in(x280); + Formula x275=x276.or(x278); + Formula x271=x275.forAll(x272); + Formula x268=x271.forAll(x269); + Formula x267=x268.not(); + Formula x281=x0.eq(x0); + Formula x282=x1.eq(x1); + Formula x283=x2.eq(x2); + Formula x284=x3.eq(x3); + Formula x285=x4.eq(x4); + Formula x286=x5.eq(x5); + Formula x287=x6.eq(x6); + Formula x288=x7.eq(x7); + Formula x289=x8.eq(x8); + Formula x290=x9.eq(x9); + Formula x291=x10.eq(x10); + Formula x292=x11.eq(x11); + Formula x293=x12.eq(x12); + Formula x294=x13.eq(x13); + Formula x295=x14.eq(x14); + Formula x296=x15.eq(x15); + Formula x297=x16.eq(x16); + Formula x298=x17.eq(x17); + Formula x299=x18.eq(x18); + Formula x300=x19.eq(x19); + Formula x301=x20.eq(x20); + Formula x21=Formula.compose(FormulaOperator.AND, x22, x43, x47, x52, x54, x61, x63, x70, x72, x90, x95, x97, x102, x104, x112, x114, x122, x124, x129, x131, x136, x138, x150, x164, x183, x194, x196, x202, x215, x228, x235, x267, x281, x282, x283, x284, x285, x286, x287, x288, x289, x290, x291, x292, x293, x294, x295, x296, x297, x298, x299, x300, x301); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x21,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem3Check.java b/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem3Check.java new file mode 100644 index 0000000..f0c1948 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem3Check.java @@ -0,0 +1,583 @@ +package kodkod.examples.models.model.microsoftCom; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "com", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 10, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 5, + TransitiveClosure = 1, + NestedQuantifiers = 10, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 7, + OrderedRelations = 0, + Constraints = 10 +) + + +public final class comTheorem3Check { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/IID"); + Relation x7 = Relation.unary("this/LegalInterface"); + Relation x8 = Relation.unary("this/Interface remainder"); + Relation x9 = Relation.unary("this/LegalComponent"); + Relation x10 = Relation.unary("this/Component remainder"); + Relation x11 = Relation.nary("this/Interface.qi", 3); + Relation x12 = Relation.nary("this/Interface.iids", 2); + Relation x13 = Relation.nary("this/Interface.iidsKnown", 2); + Relation x14 = Relation.nary("this/Interface.reaches", 2); + Relation x15 = Relation.nary("this/Component.interfaces", 2); + Relation x16 = Relation.nary("this/Component.iids", 2); + Relation x17 = Relation.nary("this/Component.first", 2); + Relation x18 = Relation.nary("this/Component.identity", 2); + Relation x19 = Relation.nary("this/Component.eqs", 2); + Relation x20 = Relation.nary("this/Component.aggregates", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Component$0", + "Component$1", "Component$2", "IID$0", "IID$1", "IID$2", "Interface$0", + "Interface$1", "Interface$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("IID$0")); + x6_upper.add(factory.tuple("IID$1")); + x6_upper.add(factory.tuple("IID$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Interface$0")); + x7_upper.add(factory.tuple("Interface$1")); + x7_upper.add(factory.tuple("Interface$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Interface$0")); + x8_upper.add(factory.tuple("Interface$1")); + x8_upper.add(factory.tuple("Interface$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Component$0")); + x9_upper.add(factory.tuple("Component$1")); + x9_upper.add(factory.tuple("Component$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Component$0")); + x10_upper.add(factory.tuple("Component$1")); + x10_upper.add(factory.tuple("Component$2")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(3); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$2"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$2"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$2"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$2"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(2); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$2"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$2"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$2"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$2"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$2"))); + bounds.bound(x20, x20_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x24=Variable.unary("Theorem3_this"); + Expression x25=x7.union(x8); + Decls x23=x24.oneOf(x25); + Expression x29=x24.join(x11); + Expression x30=x6.product(x25); + Formula x28=x29.in(x30); + Variable x33=Variable.unary(""); + Decls x32=x33.oneOf(x6); + Expression x36=x33.join(x29); + Formula x35=x36.lone(); + Formula x37=x36.in(x25); + Formula x34=x35.and(x37); + Formula x31=x34.forAll(x32); + Formula x27=x28.and(x31); + Variable x40=Variable.unary(""); + Decls x39=x40.oneOf(x25); + Expression x42=x29.join(x40); + Formula x41=x42.in(x6); + Formula x38=x41.forAll(x39); + Formula x26=x27.and(x38); + Formula x22=x26.forAll(x23); + Expression x45=x11.join(Expression.UNIV); + Expression x44=x45.join(Expression.UNIV); + Formula x43=x44.in(x25); + Variable x49=Variable.unary("Theorem3_this"); + Decls x48=x49.oneOf(x25); + Expression x51=x49.join(x12); + Formula x50=x51.in(x6); + Formula x47=x50.forAll(x48); + Expression x53=x12.join(Expression.UNIV); + Formula x52=x53.in(x25); + Variable x56=Variable.unary("Theorem3_this"); + Decls x55=x56.oneOf(x25); + Expression x59=x56.join(x13); + Formula x58=x59.one(); + Formula x60=x59.in(x6); + Formula x57=x58.and(x60); + Formula x54=x57.forAll(x55); + Expression x62=x13.join(Expression.UNIV); + Formula x61=x62.in(x25); + Variable x65=Variable.unary("Theorem3_this"); + Decls x64=x65.oneOf(x25); + Expression x68=x65.join(x14); + Formula x67=x68.one(); + Formula x69=x68.in(x25); + Formula x66=x67.and(x69); + Formula x63=x66.forAll(x64); + Expression x71=x14.join(Expression.UNIV); + Formula x70=x71.in(x25); + Variable x74=Variable.unary("Theorem3_this"); + Decls x73=x74.oneOf(x25); + Expression x77=x74.join(x13); + Expression x79=x74.join(x11); + Expression x83=Expression.INTS.union(x5); + Expression x82=x83.union(x6); + Expression x81=x82.union(x25); + Expression x85=x9.union(x10); + Expression x80=x81.union(x85); + Expression x78=x79.join(x80); + Formula x76=x77.eq(x78); + Expression x87=x74.join(x14); + Expression x89=x74.join(x11); + Expression x88=x80.join(x89); + Formula x86=x87.eq(x88); + Formula x75=x76.and(x86); + Formula x72=x75.forAll(x73); + Variable x92=Variable.unary("Theorem3_this"); + Decls x91=x92.oneOf(x85); + Expression x94=x92.join(x15); + Formula x93=x94.in(x25); + Formula x90=x93.forAll(x91); + Expression x96=x15.join(Expression.UNIV); + Formula x95=x96.in(x85); + Variable x99=Variable.unary("Theorem3_this"); + Decls x98=x99.oneOf(x85); + Expression x101=x99.join(x16); + Formula x100=x101.in(x6); + Formula x97=x100.forAll(x98); + Expression x103=x16.join(Expression.UNIV); + Formula x102=x103.in(x85); + Variable x106=Variable.unary("Theorem3_this"); + Decls x105=x106.oneOf(x85); + Expression x109=x106.join(x17); + Formula x108=x109.one(); + Expression x111=x106.join(x15); + Formula x110=x109.in(x111); + Formula x107=x108.and(x110); + Formula x104=x107.forAll(x105); + Expression x113=x17.join(Expression.UNIV); + Formula x112=x113.in(x85); + Variable x116=Variable.unary("Theorem3_this"); + Decls x115=x116.oneOf(x85); + Expression x119=x116.join(x18); + Formula x118=x119.one(); + Expression x121=x116.join(x15); + Formula x120=x119.in(x121); + Formula x117=x118.and(x120); + Formula x114=x117.forAll(x115); + Expression x123=x18.join(Expression.UNIV); + Formula x122=x123.in(x85); + Variable x126=Variable.unary("Theorem3_this"); + Decls x125=x126.oneOf(x85); + Expression x128=x126.join(x19); + Formula x127=x128.in(x85); + Formula x124=x127.forAll(x125); + Expression x130=x19.join(Expression.UNIV); + Formula x129=x130.in(x85); + Variable x133=Variable.unary("Theorem3_this"); + Decls x132=x133.oneOf(x85); + Expression x135=x133.join(x20); + Formula x134=x135.in(x85); + Formula x131=x134.forAll(x132); + Expression x137=x20.join(Expression.UNIV); + Formula x136=x137.in(x85); + Variable x141=Variable.unary("Theorem3_c1"); + Decls x140=x141.oneOf(x85); + Variable x143=Variable.unary("Theorem3_c2"); + Decls x142=x143.oneOf(x85); + Decls x139=x140.and(x142); + Expression x146=x141.product(x143); + Formula x145=x146.in(x19); + Expression x148=x141.join(x18); + Expression x149=x143.join(x18); + Formula x147=x148.eq(x149); + Formula x144=x145.iff(x147); + Formula x138=x144.forAll(x139); + Variable x152=Variable.unary("Theorem3_unknown"); + Decls x151=x152.oneOf(x6); + Variable x155=Variable.unary("Theorem3_c"); + Decls x154=x155.oneOf(x85); + Variable x158=Variable.unary("Theorem3_i"); + Expression x159=x155.join(x15); + Decls x157=x158.oneOf(x159); + Expression x162=x158.join(x11); + Expression x161=x152.join(x162); + Expression x163=x155.join(x18); + Formula x160=x161.eq(x163); + Formula x156=x160.forAll(x157); + Formula x153=x156.forAll(x154); + Formula x150=x153.forSome(x151); + Variable x166=Variable.unary("Theorem3_c"); + Decls x165=x166.oneOf(x85); + Expression x169=x166.join(x16); + Expression x171=x166.join(x15); + Expression x170=x171.join(x12); + Formula x168=x169.eq(x170); + Variable x174=Variable.unary("Theorem3_i"); + Expression x175=x166.join(x15); + Decls x173=x174.oneOf(x175); + Variable x178=Variable.unary("Theorem3_x"); + Decls x177=x178.oneOf(x6); + Expression x181=x174.join(x11); + Expression x180=x178.join(x181); + Expression x182=x166.join(x15); + Formula x179=x180.in(x182); + Formula x176=x179.forAll(x177); + Formula x172=x176.forAll(x173); + Formula x167=x168.and(x172); + Formula x164=x167.forAll(x165); + Variable x185=Variable.unary("Theorem3_i"); + Decls x184=x185.oneOf(x7); + Variable x188=Variable.unary("Theorem3_x"); + Expression x189=x185.join(x13); + Decls x187=x188.oneOf(x189); + Expression x193=x185.join(x11); + Expression x192=x188.join(x193); + Expression x191=x192.join(x12); + Formula x190=x188.in(x191); + Formula x186=x190.forAll(x187); + Formula x183=x186.forAll(x184); + Expression x195=x9.join(x15); + Formula x194=x195.in(x7); + Variable x198=Variable.unary("Theorem3_i"); + Decls x197=x198.oneOf(x7); + Expression x200=x198.join(x12); + Expression x201=x198.join(x13); + Formula x199=x200.in(x201); + Formula x196=x199.forAll(x197); + Variable x205=Variable.unary("Theorem3_i"); + Decls x204=x205.oneOf(x7); + Variable x207=Variable.unary("Theorem3_j"); + Decls x206=x207.oneOf(x7); + Decls x203=x204.and(x206); + Expression x211=x205.join(x14); + Formula x210=x207.in(x211); + Formula x209=x210.not(); + Expression x213=x205.join(x12); + Expression x214=x207.join(x13); + Formula x212=x213.in(x214); + Formula x208=x209.or(x212); + Formula x202=x208.forAll(x203); + Variable x218=Variable.unary("Theorem3_i"); + Decls x217=x218.oneOf(x7); + Variable x220=Variable.unary("Theorem3_j"); + Decls x219=x220.oneOf(x7); + Decls x216=x217.and(x219); + Expression x224=x218.join(x14); + Formula x223=x220.in(x224); + Formula x222=x223.not(); + Expression x226=x220.join(x13); + Expression x227=x218.join(x13); + Formula x225=x226.in(x227); + Formula x221=x222.or(x225); + Formula x215=x221.forAll(x216); + Variable x230=Variable.unary("Theorem3_c"); + Decls x229=x230.oneOf(x85); + Expression x234=x20.closure(); + Expression x233=x230.join(x234); + Formula x232=x230.in(x233); + Formula x231=x232.not(); + Formula x228=x231.forAll(x229); + Variable x237=Variable.unary("Theorem3_outer"); + Decls x236=x237.oneOf(x85); + Variable x240=Variable.unary("Theorem3_inner"); + Expression x241=x237.join(x20); + Decls x239=x240.oneOf(x241); + Expression x245=x240.join(x15); + Expression x246=x237.join(x15); + Expression x244=x245.intersection(x246); + Formula x243=x244.some(); + Variable x249=Variable.unary("Theorem3_o"); + Expression x250=x237.join(x15); + Decls x248=x249.oneOf(x250); + Variable x253=Variable.unary("Theorem3_i"); + Expression x255=x240.join(x15); + Expression x256=x240.join(x17); + Expression x254=x255.difference(x256); + Decls x252=x253.oneOf(x254); + Variable x259=Variable.unary("Theorem3_x"); + Decls x258=x259.oneOf(x85); + Expression x262=x259.join(x16); + Expression x263=x253.join(x11); + Expression x261=x262.join(x263); + Expression x265=x259.join(x16); + Expression x266=x249.join(x11); + Expression x264=x265.join(x266); + Formula x260=x261.eq(x264); + Formula x257=x260.forAll(x258); + Formula x251=x257.forAll(x252); + Formula x247=x251.forSome(x248); + Formula x242=x243.and(x247); + Formula x238=x242.forAll(x239); + Formula x235=x238.forAll(x236); + Variable x270=Variable.unary("Theorem3_outer"); + Decls x269=x270.oneOf(x85); + Variable x273=Variable.unary("Theorem3_inner"); + Expression x274=x270.join(x20); + Decls x272=x273.oneOf(x274); + Expression x276=x270.join(x19); + Formula x275=x273.in(x276); + Formula x271=x275.forAll(x272); + Formula x268=x271.forAll(x269); + Formula x267=x268.not(); + Formula x277=x0.eq(x0); + Formula x278=x1.eq(x1); + Formula x279=x2.eq(x2); + Formula x280=x3.eq(x3); + Formula x281=x4.eq(x4); + Formula x282=x5.eq(x5); + Formula x283=x6.eq(x6); + Formula x284=x7.eq(x7); + Formula x285=x8.eq(x8); + Formula x286=x9.eq(x9); + Formula x287=x10.eq(x10); + Formula x288=x11.eq(x11); + Formula x289=x12.eq(x12); + Formula x290=x13.eq(x13); + Formula x291=x14.eq(x14); + Formula x292=x15.eq(x15); + Formula x293=x16.eq(x16); + Formula x294=x17.eq(x17); + Formula x295=x18.eq(x18); + Formula x296=x19.eq(x19); + Formula x297=x20.eq(x20); + Formula x21=Formula.compose(FormulaOperator.AND, x22, x43, x47, x52, x54, x61, x63, x70, x72, x90, x95, x97, x102, x104, x112, x114, x122, x124, x129, x131, x136, x138, x150, x164, x183, x194, x196, x202, x215, x228, x235, x267, x277, x278, x279, x280, x281, x282, x283, x284, x285, x286, x287, x288, x289, x290, x291, x292, x293, x294, x295, x296, x297); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x21,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem4aCheck.java b/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem4aCheck.java new file mode 100644 index 0000000..451c54c --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem4aCheck.java @@ -0,0 +1,589 @@ +package kodkod.examples.models.model.microsoftCom; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "com", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 10, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 5, + TransitiveClosure = 1, + NestedQuantifiers = 10, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 7, + OrderedRelations = 0, + Constraints = 10 +) + + +public final class comTheorem4aCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/IID"); + Relation x7 = Relation.unary("this/LegalInterface"); + Relation x8 = Relation.unary("this/Interface remainder"); + Relation x9 = Relation.unary("this/LegalComponent"); + Relation x10 = Relation.unary("this/Component remainder"); + Relation x11 = Relation.nary("this/Interface.qi", 3); + Relation x12 = Relation.nary("this/Interface.iids", 2); + Relation x13 = Relation.nary("this/Interface.iidsKnown", 2); + Relation x14 = Relation.nary("this/Interface.reaches", 2); + Relation x15 = Relation.nary("this/Component.interfaces", 2); + Relation x16 = Relation.nary("this/Component.iids", 2); + Relation x17 = Relation.nary("this/Component.first", 2); + Relation x18 = Relation.nary("this/Component.identity", 2); + Relation x19 = Relation.nary("this/Component.eqs", 2); + Relation x20 = Relation.nary("this/Component.aggregates", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Component$0", + "Component$1", "Component$2", "IID$0", "IID$1", "IID$2", "Interface$0", + "Interface$1", "Interface$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("IID$0")); + x6_upper.add(factory.tuple("IID$1")); + x6_upper.add(factory.tuple("IID$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Interface$0")); + x7_upper.add(factory.tuple("Interface$1")); + x7_upper.add(factory.tuple("Interface$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Interface$0")); + x8_upper.add(factory.tuple("Interface$1")); + x8_upper.add(factory.tuple("Interface$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Component$0")); + x9_upper.add(factory.tuple("Component$1")); + x9_upper.add(factory.tuple("Component$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Component$0")); + x10_upper.add(factory.tuple("Component$1")); + x10_upper.add(factory.tuple("Component$2")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(3); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$2"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$2"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$2"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$2"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(2); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$2"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$2"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$2"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$2"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$2"))); + bounds.bound(x20, x20_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x24=Variable.unary("Theorem4a_this"); + Expression x25=x7.union(x8); + Decls x23=x24.oneOf(x25); + Expression x29=x24.join(x11); + Expression x30=x6.product(x25); + Formula x28=x29.in(x30); + Variable x33=Variable.unary(""); + Decls x32=x33.oneOf(x6); + Expression x36=x33.join(x29); + Formula x35=x36.lone(); + Formula x37=x36.in(x25); + Formula x34=x35.and(x37); + Formula x31=x34.forAll(x32); + Formula x27=x28.and(x31); + Variable x40=Variable.unary(""); + Decls x39=x40.oneOf(x25); + Expression x42=x29.join(x40); + Formula x41=x42.in(x6); + Formula x38=x41.forAll(x39); + Formula x26=x27.and(x38); + Formula x22=x26.forAll(x23); + Expression x45=x11.join(Expression.UNIV); + Expression x44=x45.join(Expression.UNIV); + Formula x43=x44.in(x25); + Variable x49=Variable.unary("Theorem4a_this"); + Decls x48=x49.oneOf(x25); + Expression x51=x49.join(x12); + Formula x50=x51.in(x6); + Formula x47=x50.forAll(x48); + Expression x53=x12.join(Expression.UNIV); + Formula x52=x53.in(x25); + Variable x56=Variable.unary("Theorem4a_this"); + Decls x55=x56.oneOf(x25); + Expression x59=x56.join(x13); + Formula x58=x59.one(); + Formula x60=x59.in(x6); + Formula x57=x58.and(x60); + Formula x54=x57.forAll(x55); + Expression x62=x13.join(Expression.UNIV); + Formula x61=x62.in(x25); + Variable x65=Variable.unary("Theorem4a_this"); + Decls x64=x65.oneOf(x25); + Expression x68=x65.join(x14); + Formula x67=x68.one(); + Formula x69=x68.in(x25); + Formula x66=x67.and(x69); + Formula x63=x66.forAll(x64); + Expression x71=x14.join(Expression.UNIV); + Formula x70=x71.in(x25); + Variable x74=Variable.unary("Theorem4a_this"); + Decls x73=x74.oneOf(x25); + Expression x77=x74.join(x13); + Expression x79=x74.join(x11); + Expression x83=Expression.INTS.union(x5); + Expression x82=x83.union(x6); + Expression x81=x82.union(x25); + Expression x85=x9.union(x10); + Expression x80=x81.union(x85); + Expression x78=x79.join(x80); + Formula x76=x77.eq(x78); + Expression x87=x74.join(x14); + Expression x89=x74.join(x11); + Expression x88=x80.join(x89); + Formula x86=x87.eq(x88); + Formula x75=x76.and(x86); + Formula x72=x75.forAll(x73); + Variable x92=Variable.unary("Theorem4a_this"); + Decls x91=x92.oneOf(x85); + Expression x94=x92.join(x15); + Formula x93=x94.in(x25); + Formula x90=x93.forAll(x91); + Expression x96=x15.join(Expression.UNIV); + Formula x95=x96.in(x85); + Variable x99=Variable.unary("Theorem4a_this"); + Decls x98=x99.oneOf(x85); + Expression x101=x99.join(x16); + Formula x100=x101.in(x6); + Formula x97=x100.forAll(x98); + Expression x103=x16.join(Expression.UNIV); + Formula x102=x103.in(x85); + Variable x106=Variable.unary("Theorem4a_this"); + Decls x105=x106.oneOf(x85); + Expression x109=x106.join(x17); + Formula x108=x109.one(); + Expression x111=x106.join(x15); + Formula x110=x109.in(x111); + Formula x107=x108.and(x110); + Formula x104=x107.forAll(x105); + Expression x113=x17.join(Expression.UNIV); + Formula x112=x113.in(x85); + Variable x116=Variable.unary("Theorem4a_this"); + Decls x115=x116.oneOf(x85); + Expression x119=x116.join(x18); + Formula x118=x119.one(); + Expression x121=x116.join(x15); + Formula x120=x119.in(x121); + Formula x117=x118.and(x120); + Formula x114=x117.forAll(x115); + Expression x123=x18.join(Expression.UNIV); + Formula x122=x123.in(x85); + Variable x126=Variable.unary("Theorem4a_this"); + Decls x125=x126.oneOf(x85); + Expression x128=x126.join(x19); + Formula x127=x128.in(x85); + Formula x124=x127.forAll(x125); + Expression x130=x19.join(Expression.UNIV); + Formula x129=x130.in(x85); + Variable x133=Variable.unary("Theorem4a_this"); + Decls x132=x133.oneOf(x85); + Expression x135=x133.join(x20); + Formula x134=x135.in(x85); + Formula x131=x134.forAll(x132); + Expression x137=x20.join(Expression.UNIV); + Formula x136=x137.in(x85); + Variable x141=Variable.unary("Theorem4a_c1"); + Decls x140=x141.oneOf(x85); + Variable x143=Variable.unary("Theorem4a_c2"); + Decls x142=x143.oneOf(x85); + Decls x139=x140.and(x142); + Expression x146=x141.product(x143); + Formula x145=x146.in(x19); + Expression x148=x141.join(x18); + Expression x149=x143.join(x18); + Formula x147=x148.eq(x149); + Formula x144=x145.iff(x147); + Formula x138=x144.forAll(x139); + Variable x152=Variable.unary("Theorem4a_unknown"); + Decls x151=x152.oneOf(x6); + Variable x155=Variable.unary("Theorem4a_c"); + Decls x154=x155.oneOf(x85); + Variable x158=Variable.unary("Theorem4a_i"); + Expression x159=x155.join(x15); + Decls x157=x158.oneOf(x159); + Expression x162=x158.join(x11); + Expression x161=x152.join(x162); + Expression x163=x155.join(x18); + Formula x160=x161.eq(x163); + Formula x156=x160.forAll(x157); + Formula x153=x156.forAll(x154); + Formula x150=x153.forSome(x151); + Variable x166=Variable.unary("Theorem4a_c"); + Decls x165=x166.oneOf(x85); + Expression x169=x166.join(x16); + Expression x171=x166.join(x15); + Expression x170=x171.join(x12); + Formula x168=x169.eq(x170); + Variable x174=Variable.unary("Theorem4a_i"); + Expression x175=x166.join(x15); + Decls x173=x174.oneOf(x175); + Variable x178=Variable.unary("Theorem4a_x"); + Decls x177=x178.oneOf(x6); + Expression x181=x174.join(x11); + Expression x180=x178.join(x181); + Expression x182=x166.join(x15); + Formula x179=x180.in(x182); + Formula x176=x179.forAll(x177); + Formula x172=x176.forAll(x173); + Formula x167=x168.and(x172); + Formula x164=x167.forAll(x165); + Variable x185=Variable.unary("Theorem4a_i"); + Decls x184=x185.oneOf(x7); + Variable x188=Variable.unary("Theorem4a_x"); + Expression x189=x185.join(x13); + Decls x187=x188.oneOf(x189); + Expression x193=x185.join(x11); + Expression x192=x188.join(x193); + Expression x191=x192.join(x12); + Formula x190=x188.in(x191); + Formula x186=x190.forAll(x187); + Formula x183=x186.forAll(x184); + Expression x195=x9.join(x15); + Formula x194=x195.in(x7); + Variable x198=Variable.unary("Theorem4a_i"); + Decls x197=x198.oneOf(x7); + Expression x200=x198.join(x12); + Expression x201=x198.join(x13); + Formula x199=x200.in(x201); + Formula x196=x199.forAll(x197); + Variable x205=Variable.unary("Theorem4a_i"); + Decls x204=x205.oneOf(x7); + Variable x207=Variable.unary("Theorem4a_j"); + Decls x206=x207.oneOf(x7); + Decls x203=x204.and(x206); + Expression x211=x205.join(x14); + Formula x210=x207.in(x211); + Formula x209=x210.not(); + Expression x213=x205.join(x12); + Expression x214=x207.join(x13); + Formula x212=x213.in(x214); + Formula x208=x209.or(x212); + Formula x202=x208.forAll(x203); + Variable x218=Variable.unary("Theorem4a_i"); + Decls x217=x218.oneOf(x7); + Variable x220=Variable.unary("Theorem4a_j"); + Decls x219=x220.oneOf(x7); + Decls x216=x217.and(x219); + Expression x224=x218.join(x14); + Formula x223=x220.in(x224); + Formula x222=x223.not(); + Expression x226=x220.join(x13); + Expression x227=x218.join(x13); + Formula x225=x226.in(x227); + Formula x221=x222.or(x225); + Formula x215=x221.forAll(x216); + Variable x230=Variable.unary("Theorem4a_c"); + Decls x229=x230.oneOf(x85); + Expression x234=x20.closure(); + Expression x233=x230.join(x234); + Formula x232=x230.in(x233); + Formula x231=x232.not(); + Formula x228=x231.forAll(x229); + Variable x237=Variable.unary("Theorem4a_outer"); + Decls x236=x237.oneOf(x85); + Variable x240=Variable.unary("Theorem4a_inner"); + Expression x241=x237.join(x20); + Decls x239=x240.oneOf(x241); + Expression x245=x240.join(x15); + Expression x246=x237.join(x15); + Expression x244=x245.intersection(x246); + Formula x243=x244.some(); + Variable x249=Variable.unary("Theorem4a_o"); + Expression x250=x237.join(x15); + Decls x248=x249.oneOf(x250); + Variable x253=Variable.unary("Theorem4a_i"); + Expression x255=x240.join(x15); + Expression x256=x240.join(x17); + Expression x254=x255.difference(x256); + Decls x252=x253.oneOf(x254); + Variable x259=Variable.unary("Theorem4a_x"); + Decls x258=x259.oneOf(x85); + Expression x262=x259.join(x16); + Expression x263=x253.join(x11); + Expression x261=x262.join(x263); + Expression x265=x259.join(x16); + Expression x266=x249.join(x11); + Expression x264=x265.join(x266); + Formula x260=x261.eq(x264); + Formula x257=x260.forAll(x258); + Formula x251=x257.forAll(x252); + Formula x247=x251.forSome(x248); + Formula x242=x243.and(x247); + Formula x238=x242.forAll(x239); + Formula x235=x238.forAll(x236); + Variable x271=Variable.unary("Theorem4a_c1"); + Decls x270=x271.oneOf(x85); + Variable x273=Variable.unary("Theorem4a_c2"); + Decls x272=x273.oneOf(x9); + Decls x269=x270.and(x272); + Expression x278=x271.join(x15); + Expression x279=x273.join(x15); + Expression x277=x278.intersection(x279); + Formula x276=x277.some(); + Formula x275=x276.not(); + Expression x281=x273.join(x16); + Expression x282=x271.join(x16); + Formula x280=x281.in(x282); + Formula x274=x275.or(x280); + Formula x268=x274.forAll(x269); + Formula x267=x268.not(); + Formula x283=x0.eq(x0); + Formula x284=x1.eq(x1); + Formula x285=x2.eq(x2); + Formula x286=x3.eq(x3); + Formula x287=x4.eq(x4); + Formula x288=x5.eq(x5); + Formula x289=x6.eq(x6); + Formula x290=x7.eq(x7); + Formula x291=x8.eq(x8); + Formula x292=x9.eq(x9); + Formula x293=x10.eq(x10); + Formula x294=x11.eq(x11); + Formula x295=x12.eq(x12); + Formula x296=x13.eq(x13); + Formula x297=x14.eq(x14); + Formula x298=x15.eq(x15); + Formula x299=x16.eq(x16); + Formula x300=x17.eq(x17); + Formula x301=x18.eq(x18); + Formula x302=x19.eq(x19); + Formula x303=x20.eq(x20); + Formula x21=Formula.compose(FormulaOperator.AND, x22, x43, x47, x52, x54, x61, x63, x70, x72, x90, x95, x97, x102, x104, x112, x114, x122, x124, x129, x131, x136, x138, x150, x164, x183, x194, x196, x202, x215, x228, x235, x267, x283, x284, x285, x286, x287, x288, x289, x290, x291, x292, x293, x294, x295, x296, x297, x298, x299, x300, x301, x302, x303); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x21,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem4bCheck.java b/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem4bCheck.java new file mode 100644 index 0000000..231bd2b --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/model/microsoftCom/comTheorem4bCheck.java @@ -0,0 +1,588 @@ +package kodkod.examples.models.model.microsoftCom; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "com", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 10, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 5, + TransitiveClosure = 1, + NestedQuantifiers = 10, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 7, + OrderedRelations = 0, + Constraints = 10 +) + + +public final class comTheorem4bCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/IID"); + Relation x7 = Relation.unary("this/LegalInterface"); + Relation x8 = Relation.unary("this/Interface remainder"); + Relation x9 = Relation.unary("this/LegalComponent"); + Relation x10 = Relation.unary("this/Component remainder"); + Relation x11 = Relation.nary("this/Interface.qi", 3); + Relation x12 = Relation.nary("this/Interface.iids", 2); + Relation x13 = Relation.nary("this/Interface.iidsKnown", 2); + Relation x14 = Relation.nary("this/Interface.reaches", 2); + Relation x15 = Relation.nary("this/Component.interfaces", 2); + Relation x16 = Relation.nary("this/Component.iids", 2); + Relation x17 = Relation.nary("this/Component.first", 2); + Relation x18 = Relation.nary("this/Component.identity", 2); + Relation x19 = Relation.nary("this/Component.eqs", 2); + Relation x20 = Relation.nary("this/Component.aggregates", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Component$0", + "Component$1", "Component$2", "IID$0", "IID$1", "IID$2", "Interface$0", + "Interface$1", "Interface$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("IID$0")); + x6_upper.add(factory.tuple("IID$1")); + x6_upper.add(factory.tuple("IID$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Interface$0")); + x7_upper.add(factory.tuple("Interface$1")); + x7_upper.add(factory.tuple("Interface$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Interface$0")); + x8_upper.add(factory.tuple("Interface$1")); + x8_upper.add(factory.tuple("Interface$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Component$0")); + x9_upper.add(factory.tuple("Component$1")); + x9_upper.add(factory.tuple("Component$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Component$0")); + x10_upper.add(factory.tuple("Component$1")); + x10_upper.add(factory.tuple("Component$2")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(3); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1")).product(factory.tuple("Interface$2"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$0"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$1"))); + x11_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2")).product(factory.tuple("Interface$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1"))); + x12_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$0").product(factory.tuple("IID$2"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$1").product(factory.tuple("IID$2"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$0"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$1"))); + x13_upper.add(factory.tuple("Interface$2").product(factory.tuple("IID$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$0").product(factory.tuple("Interface$2"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$1").product(factory.tuple("Interface$2"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$0"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$1"))); + x14_upper.add(factory.tuple("Interface$2").product(factory.tuple("Interface$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x15_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$0").product(factory.tuple("IID$2"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$1").product(factory.tuple("IID$2"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$0"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$1"))); + x16_upper.add(factory.tuple("Component$2").product(factory.tuple("IID$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x17_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(2); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$0").product(factory.tuple("Interface$2"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$1").product(factory.tuple("Interface$2"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$0"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$1"))); + x18_upper.add(factory.tuple("Component$2").product(factory.tuple("Interface$2"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$2"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$2"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$0"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$1"))); + x19_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$2"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$0").product(factory.tuple("Component$2"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$1").product(factory.tuple("Component$2"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$0"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$1"))); + x20_upper.add(factory.tuple("Component$2").product(factory.tuple("Component$2"))); + bounds.bound(x20, x20_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x24=Variable.unary("Theorem4b_this"); + Expression x25=x7.union(x8); + Decls x23=x24.oneOf(x25); + Expression x29=x24.join(x11); + Expression x30=x6.product(x25); + Formula x28=x29.in(x30); + Variable x33=Variable.unary(""); + Decls x32=x33.oneOf(x6); + Expression x36=x33.join(x29); + Formula x35=x36.lone(); + Formula x37=x36.in(x25); + Formula x34=x35.and(x37); + Formula x31=x34.forAll(x32); + Formula x27=x28.and(x31); + Variable x40=Variable.unary(""); + Decls x39=x40.oneOf(x25); + Expression x42=x29.join(x40); + Formula x41=x42.in(x6); + Formula x38=x41.forAll(x39); + Formula x26=x27.and(x38); + Formula x22=x26.forAll(x23); + Expression x45=x11.join(Expression.UNIV); + Expression x44=x45.join(Expression.UNIV); + Formula x43=x44.in(x25); + Variable x49=Variable.unary("Theorem4b_this"); + Decls x48=x49.oneOf(x25); + Expression x51=x49.join(x12); + Formula x50=x51.in(x6); + Formula x47=x50.forAll(x48); + Expression x53=x12.join(Expression.UNIV); + Formula x52=x53.in(x25); + Variable x56=Variable.unary("Theorem4b_this"); + Decls x55=x56.oneOf(x25); + Expression x59=x56.join(x13); + Formula x58=x59.one(); + Formula x60=x59.in(x6); + Formula x57=x58.and(x60); + Formula x54=x57.forAll(x55); + Expression x62=x13.join(Expression.UNIV); + Formula x61=x62.in(x25); + Variable x65=Variable.unary("Theorem4b_this"); + Decls x64=x65.oneOf(x25); + Expression x68=x65.join(x14); + Formula x67=x68.one(); + Formula x69=x68.in(x25); + Formula x66=x67.and(x69); + Formula x63=x66.forAll(x64); + Expression x71=x14.join(Expression.UNIV); + Formula x70=x71.in(x25); + Variable x74=Variable.unary("Theorem4b_this"); + Decls x73=x74.oneOf(x25); + Expression x77=x74.join(x13); + Expression x79=x74.join(x11); + Expression x83=Expression.INTS.union(x5); + Expression x82=x83.union(x6); + Expression x81=x82.union(x25); + Expression x85=x9.union(x10); + Expression x80=x81.union(x85); + Expression x78=x79.join(x80); + Formula x76=x77.eq(x78); + Expression x87=x74.join(x14); + Expression x89=x74.join(x11); + Expression x88=x80.join(x89); + Formula x86=x87.eq(x88); + Formula x75=x76.and(x86); + Formula x72=x75.forAll(x73); + Variable x92=Variable.unary("Theorem4b_this"); + Decls x91=x92.oneOf(x85); + Expression x94=x92.join(x15); + Formula x93=x94.in(x25); + Formula x90=x93.forAll(x91); + Expression x96=x15.join(Expression.UNIV); + Formula x95=x96.in(x85); + Variable x99=Variable.unary("Theorem4b_this"); + Decls x98=x99.oneOf(x85); + Expression x101=x99.join(x16); + Formula x100=x101.in(x6); + Formula x97=x100.forAll(x98); + Expression x103=x16.join(Expression.UNIV); + Formula x102=x103.in(x85); + Variable x106=Variable.unary("Theorem4b_this"); + Decls x105=x106.oneOf(x85); + Expression x109=x106.join(x17); + Formula x108=x109.one(); + Expression x111=x106.join(x15); + Formula x110=x109.in(x111); + Formula x107=x108.and(x110); + Formula x104=x107.forAll(x105); + Expression x113=x17.join(Expression.UNIV); + Formula x112=x113.in(x85); + Variable x116=Variable.unary("Theorem4b_this"); + Decls x115=x116.oneOf(x85); + Expression x119=x116.join(x18); + Formula x118=x119.one(); + Expression x121=x116.join(x15); + Formula x120=x119.in(x121); + Formula x117=x118.and(x120); + Formula x114=x117.forAll(x115); + Expression x123=x18.join(Expression.UNIV); + Formula x122=x123.in(x85); + Variable x126=Variable.unary("Theorem4b_this"); + Decls x125=x126.oneOf(x85); + Expression x128=x126.join(x19); + Formula x127=x128.in(x85); + Formula x124=x127.forAll(x125); + Expression x130=x19.join(Expression.UNIV); + Formula x129=x130.in(x85); + Variable x133=Variable.unary("Theorem4b_this"); + Decls x132=x133.oneOf(x85); + Expression x135=x133.join(x20); + Formula x134=x135.in(x85); + Formula x131=x134.forAll(x132); + Expression x137=x20.join(Expression.UNIV); + Formula x136=x137.in(x85); + Variable x141=Variable.unary("Theorem4b_c1"); + Decls x140=x141.oneOf(x85); + Variable x143=Variable.unary("Theorem4b_c2"); + Decls x142=x143.oneOf(x85); + Decls x139=x140.and(x142); + Expression x146=x141.product(x143); + Formula x145=x146.in(x19); + Expression x148=x141.join(x18); + Expression x149=x143.join(x18); + Formula x147=x148.eq(x149); + Formula x144=x145.iff(x147); + Formula x138=x144.forAll(x139); + Variable x152=Variable.unary("Theorem4b_unknown"); + Decls x151=x152.oneOf(x6); + Variable x155=Variable.unary("Theorem4b_c"); + Decls x154=x155.oneOf(x85); + Variable x158=Variable.unary("Theorem4b_i"); + Expression x159=x155.join(x15); + Decls x157=x158.oneOf(x159); + Expression x162=x158.join(x11); + Expression x161=x152.join(x162); + Expression x163=x155.join(x18); + Formula x160=x161.eq(x163); + Formula x156=x160.forAll(x157); + Formula x153=x156.forAll(x154); + Formula x150=x153.forSome(x151); + Variable x166=Variable.unary("Theorem4b_c"); + Decls x165=x166.oneOf(x85); + Expression x169=x166.join(x16); + Expression x171=x166.join(x15); + Expression x170=x171.join(x12); + Formula x168=x169.eq(x170); + Variable x174=Variable.unary("Theorem4b_i"); + Expression x175=x166.join(x15); + Decls x173=x174.oneOf(x175); + Variable x178=Variable.unary("Theorem4b_x"); + Decls x177=x178.oneOf(x6); + Expression x181=x174.join(x11); + Expression x180=x178.join(x181); + Expression x182=x166.join(x15); + Formula x179=x180.in(x182); + Formula x176=x179.forAll(x177); + Formula x172=x176.forAll(x173); + Formula x167=x168.and(x172); + Formula x164=x167.forAll(x165); + Variable x185=Variable.unary("Theorem4b_i"); + Decls x184=x185.oneOf(x7); + Variable x188=Variable.unary("Theorem4b_x"); + Expression x189=x185.join(x13); + Decls x187=x188.oneOf(x189); + Expression x193=x185.join(x11); + Expression x192=x188.join(x193); + Expression x191=x192.join(x12); + Formula x190=x188.in(x191); + Formula x186=x190.forAll(x187); + Formula x183=x186.forAll(x184); + Expression x195=x9.join(x15); + Formula x194=x195.in(x7); + Variable x198=Variable.unary("Theorem4b_i"); + Decls x197=x198.oneOf(x7); + Expression x200=x198.join(x12); + Expression x201=x198.join(x13); + Formula x199=x200.in(x201); + Formula x196=x199.forAll(x197); + Variable x205=Variable.unary("Theorem4b_i"); + Decls x204=x205.oneOf(x7); + Variable x207=Variable.unary("Theorem4b_j"); + Decls x206=x207.oneOf(x7); + Decls x203=x204.and(x206); + Expression x211=x205.join(x14); + Formula x210=x207.in(x211); + Formula x209=x210.not(); + Expression x213=x205.join(x12); + Expression x214=x207.join(x13); + Formula x212=x213.in(x214); + Formula x208=x209.or(x212); + Formula x202=x208.forAll(x203); + Variable x218=Variable.unary("Theorem4b_i"); + Decls x217=x218.oneOf(x7); + Variable x220=Variable.unary("Theorem4b_j"); + Decls x219=x220.oneOf(x7); + Decls x216=x217.and(x219); + Expression x224=x218.join(x14); + Formula x223=x220.in(x224); + Formula x222=x223.not(); + Expression x226=x220.join(x13); + Expression x227=x218.join(x13); + Formula x225=x226.in(x227); + Formula x221=x222.or(x225); + Formula x215=x221.forAll(x216); + Variable x230=Variable.unary("Theorem4b_c"); + Decls x229=x230.oneOf(x85); + Expression x234=x20.closure(); + Expression x233=x230.join(x234); + Formula x232=x230.in(x233); + Formula x231=x232.not(); + Formula x228=x231.forAll(x229); + Variable x237=Variable.unary("Theorem4b_outer"); + Decls x236=x237.oneOf(x85); + Variable x240=Variable.unary("Theorem4b_inner"); + Expression x241=x237.join(x20); + Decls x239=x240.oneOf(x241); + Expression x245=x240.join(x15); + Expression x246=x237.join(x15); + Expression x244=x245.intersection(x246); + Formula x243=x244.some(); + Variable x249=Variable.unary("Theorem4b_o"); + Expression x250=x237.join(x15); + Decls x248=x249.oneOf(x250); + Variable x253=Variable.unary("Theorem4b_i"); + Expression x255=x240.join(x15); + Expression x256=x240.join(x17); + Expression x254=x255.difference(x256); + Decls x252=x253.oneOf(x254); + Variable x259=Variable.unary("Theorem4b_x"); + Decls x258=x259.oneOf(x85); + Expression x262=x259.join(x16); + Expression x263=x253.join(x11); + Expression x261=x262.join(x263); + Expression x265=x259.join(x16); + Expression x266=x249.join(x11); + Expression x264=x265.join(x266); + Formula x260=x261.eq(x264); + Formula x257=x260.forAll(x258); + Formula x251=x257.forAll(x252); + Formula x247=x251.forSome(x248); + Formula x242=x243.and(x247); + Formula x238=x242.forAll(x239); + Formula x235=x238.forAll(x236); + Variable x271=Variable.unary("Theorem4b_c1"); + Decls x270=x271.oneOf(x85); + Variable x273=Variable.unary("Theorem4b_c2"); + Decls x272=x273.oneOf(x85); + Decls x269=x270.and(x272); + Expression x278=x271.join(x15); + Expression x279=x273.join(x15); + Expression x277=x278.intersection(x279); + Formula x276=x277.some(); + Formula x275=x276.not(); + Expression x281=x273.join(x19); + Formula x280=x271.in(x281); + Formula x274=x275.or(x280); + Formula x268=x274.forAll(x269); + Formula x267=x268.not(); + Formula x282=x0.eq(x0); + Formula x283=x1.eq(x1); + Formula x284=x2.eq(x2); + Formula x285=x3.eq(x3); + Formula x286=x4.eq(x4); + Formula x287=x5.eq(x5); + Formula x288=x6.eq(x6); + Formula x289=x7.eq(x7); + Formula x290=x8.eq(x8); + Formula x291=x9.eq(x9); + Formula x292=x10.eq(x10); + Formula x293=x11.eq(x11); + Formula x294=x12.eq(x12); + Formula x295=x13.eq(x13); + Formula x296=x14.eq(x14); + Formula x297=x15.eq(x15); + Formula x298=x16.eq(x16); + Formula x299=x17.eq(x17); + Formula x300=x18.eq(x18); + Formula x301=x19.eq(x19); + Formula x302=x20.eq(x20); + Formula x21=Formula.compose(FormulaOperator.AND, x22, x43, x47, x52, x54, x61, x63, x70, x72, x90, x95, x97, x102, x104, x112, x114, x122, x124, x129, x131, x136, x138, x150, x164, x183, x194, x196, x202, x215, x228, x235, x267, x282, x283, x284, x285, x286, x287, x288, x289, x290, x291, x292, x293, x294, x295, x296, x297, x298, x299, x300, x301, x302); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x21,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/model/transport/railwayPolicyWorksCheck.java b/Source/kodkod/examples/kodkod/examples/models/model/transport/railwayPolicyWorksCheck.java new file mode 100644 index 0000000..2ca08e3 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/model/transport/railwayPolicyWorksCheck.java @@ -0,0 +1,409 @@ +package kodkod.examples.models.model.transport; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "railway", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 10, + TransitiveClosure = 0, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 3, + OrderedRelations = 0, + Constraints = 10 +) + + +public final class railwayPolicyWorksCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Seg"); + Relation x7 = Relation.unary("this/Train"); + Relation x8 = Relation.unary("this/GateState"); + Relation x9 = Relation.unary("this/TrainState"); + Relation x10 = Relation.nary("this/Seg.next", 2); + Relation x11 = Relation.nary("this/Seg.overlaps", 2); + Relation x12 = Relation.nary("this/GateState.closed", 2); + Relation x13 = Relation.nary("this/TrainState.on", 3); + Relation x14 = Relation.nary("this/TrainState.occupied", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "GateState$0", + "Seg$0", "Seg$1", "Seg$2", "Seg$3", "Train$0", "Train$1", + "TrainState$0", "TrainState$1" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Seg$0")); + x6_upper.add(factory.tuple("Seg$1")); + x6_upper.add(factory.tuple("Seg$2")); + x6_upper.add(factory.tuple("Seg$3")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Train$0")); + x7_upper.add(factory.tuple("Train$1")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("GateState$0")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("TrainState$0")); + x9_upper.add(factory.tuple("TrainState$1")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$0"))); + x10_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$1"))); + x10_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$2"))); + x10_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$3"))); + x10_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$0"))); + x10_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$1"))); + x10_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$2"))); + x10_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$3"))); + x10_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$0"))); + x10_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$1"))); + x10_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$2"))); + x10_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$3"))); + x10_upper.add(factory.tuple("Seg$3").product(factory.tuple("Seg$0"))); + x10_upper.add(factory.tuple("Seg$3").product(factory.tuple("Seg$1"))); + x10_upper.add(factory.tuple("Seg$3").product(factory.tuple("Seg$2"))); + x10_upper.add(factory.tuple("Seg$3").product(factory.tuple("Seg$3"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$0"))); + x11_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$1"))); + x11_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$2"))); + x11_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$3"))); + x11_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$0"))); + x11_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$1"))); + x11_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$2"))); + x11_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$3"))); + x11_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$0"))); + x11_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$1"))); + x11_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$2"))); + x11_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$3"))); + x11_upper.add(factory.tuple("Seg$3").product(factory.tuple("Seg$0"))); + x11_upper.add(factory.tuple("Seg$3").product(factory.tuple("Seg$1"))); + x11_upper.add(factory.tuple("Seg$3").product(factory.tuple("Seg$2"))); + x11_upper.add(factory.tuple("Seg$3").product(factory.tuple("Seg$3"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("GateState$0").product(factory.tuple("Seg$0"))); + x12_upper.add(factory.tuple("GateState$0").product(factory.tuple("Seg$1"))); + x12_upper.add(factory.tuple("GateState$0").product(factory.tuple("Seg$2"))); + x12_upper.add(factory.tuple("GateState$0").product(factory.tuple("Seg$3"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(3); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$0")).product(factory.tuple("Seg$0"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$0")).product(factory.tuple("Seg$1"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$0")).product(factory.tuple("Seg$2"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$0")).product(factory.tuple("Seg$3"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$1")).product(factory.tuple("Seg$0"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$1")).product(factory.tuple("Seg$1"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$1")).product(factory.tuple("Seg$2"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$1")).product(factory.tuple("Seg$3"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$0")).product(factory.tuple("Seg$0"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$0")).product(factory.tuple("Seg$1"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$0")).product(factory.tuple("Seg$2"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$0")).product(factory.tuple("Seg$3"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$1")).product(factory.tuple("Seg$0"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$1")).product(factory.tuple("Seg$1"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$1")).product(factory.tuple("Seg$2"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$1")).product(factory.tuple("Seg$3"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Seg$0"))); + x14_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Seg$1"))); + x14_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Seg$2"))); + x14_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Seg$3"))); + x14_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Seg$0"))); + x14_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Seg$1"))); + x14_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Seg$2"))); + x14_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Seg$3"))); + bounds.bound(x14, x14_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x18=Variable.unary("PolicyWorks_this"); + Decls x17=x18.oneOf(x6); + Expression x20=x18.join(x10); + Formula x19=x20.in(x6); + Formula x16=x19.forAll(x17); + Expression x22=x10.join(Expression.UNIV); + Formula x21=x22.in(x6); + Variable x26=Variable.unary("PolicyWorks_this"); + Decls x25=x26.oneOf(x6); + Expression x28=x26.join(x11); + Formula x27=x28.in(x6); + Formula x24=x27.forAll(x25); + Expression x30=x11.join(Expression.UNIV); + Formula x29=x30.in(x6); + Variable x33=Variable.unary("PolicyWorks_this"); + Decls x32=x33.oneOf(x8); + Expression x35=x33.join(x12); + Formula x34=x35.in(x6); + Formula x31=x34.forAll(x32); + Expression x37=x12.join(Expression.UNIV); + Formula x36=x37.in(x8); + Variable x40=Variable.unary("PolicyWorks_this"); + Decls x39=x40.oneOf(x9); + Expression x44=x40.join(x13); + Expression x45=x7.product(x6); + Formula x43=x44.in(x45); + Variable x48=Variable.unary(""); + Decls x47=x48.oneOf(x7); + Expression x51=x48.join(x44); + Formula x50=x51.lone(); + Formula x52=x51.in(x6); + Formula x49=x50.and(x52); + Formula x46=x49.forAll(x47); + Formula x42=x43.and(x46); + Variable x55=Variable.unary(""); + Decls x54=x55.oneOf(x6); + Expression x57=x44.join(x55); + Formula x56=x57.in(x7); + Formula x53=x56.forAll(x54); + Formula x41=x42.and(x53); + Formula x38=x41.forAll(x39); + Expression x60=x13.join(Expression.UNIV); + Expression x59=x60.join(Expression.UNIV); + Formula x58=x59.in(x9); + Variable x63=Variable.unary("PolicyWorks_this"); + Decls x62=x63.oneOf(x9); + Expression x65=x63.join(x14); + Formula x64=x65.in(x6); + Formula x61=x64.forAll(x62); + Expression x67=x14.join(Expression.UNIV); + Formula x66=x67.in(x9); + Variable x70=Variable.unary("PolicyWorks_s"); + Decls x69=x70.oneOf(x6); + Expression x72=x70.join(x11); + Formula x71=x70.in(x72); + Formula x68=x71.forAll(x69); + Variable x76=Variable.unary("PolicyWorks_s1"); + Decls x75=x76.oneOf(x6); + Variable x78=Variable.unary("PolicyWorks_s2"); + Decls x77=x78.oneOf(x6); + Decls x74=x75.and(x77); + Expression x82=x78.join(x11); + Formula x81=x76.in(x82); + Formula x80=x81.not(); + Expression x84=x76.join(x11); + Formula x83=x78.in(x84); + Formula x79=x80.or(x83); + Formula x73=x79.forAll(x74); + Variable x87=Variable.unary("PolicyWorks_x"); + Decls x86=x87.oneOf(x9); + Expression x89=x87.join(x14); + Variable x92=Variable.unary("PolicyWorks_s"); + Decls x91=x92.oneOf(x6); + Variable x95=Variable.unary("PolicyWorks_t"); + Decls x94=x95.oneOf(x7); + Expression x98=x87.join(x13); + Expression x97=x95.join(x98); + Formula x96=x97.eq(x92); + Formula x93=x96.forSome(x94); + Expression x90=x93.comprehension(x91); + Formula x88=x89.eq(x90); + Formula x85=x88.forAll(x86); + Variable x103=Variable.unary("PolicyWorks_x"); + Decls x102=x103.oneOf(x9); + Variable x105=Variable.unary("PolicyWorks_x'"); + Decls x104=x105.oneOf(x9); + Variable x107=Variable.unary("PolicyWorks_g"); + Decls x106=x107.oneOf(x8); + Variable x109=Variable.unary("PolicyWorks_ts"); + Decls x108=x109.setOf(x7); + Decls x101=x102.and(x104).and(x106).and(x108); + Expression x117=x103.join(x13); + Expression x116=x109.join(x117); + Expression x118=x107.join(x12); + Expression x115=x116.intersection(x118); + Formula x114=x115.no(); + Variable x123=Variable.unary("TrainsMove_t"); + Decls x122=x123.oneOf(x109); + Expression x126=x105.join(x13); + Expression x125=x123.join(x126); + Expression x129=x103.join(x13); + Expression x128=x123.join(x129); + Expression x127=x128.join(x10); + Formula x124=x125.in(x127); + Formula x121=x124.forAll(x122); + Variable x132=Variable.unary("TrainsMove_t"); + Expression x133=x7.difference(x109); + Decls x131=x132.oneOf(x133); + Expression x136=x105.join(x13); + Expression x135=x132.join(x136); + Expression x138=x103.join(x13); + Expression x137=x132.join(x138); + Formula x134=x135.eq(x137); + Formula x130=x134.forAll(x131); + Formula x120=x121.and(x130); + Expression x143=x103.join(x14); + Expression x142=x143.join(x11); + Expression x144=x10.transpose(); + Expression x141=x142.join(x144); + Expression x145=x107.join(x12); + Formula x140=x141.in(x145); + Variable x149=Variable.unary("GatePolicy_s1"); + Decls x148=x149.oneOf(x6); + Variable x151=Variable.unary("GatePolicy_s2"); + Decls x150=x151.oneOf(x6); + Decls x147=x148.and(x150); + Expression x157=x149.join(x10); + Expression x156=x157.join(x11); + Expression x158=x151.join(x10); + Expression x155=x156.intersection(x158); + Formula x154=x155.some(); + Formula x153=x154.not(); + Expression x161=x149.union(x151); + Expression x162=x107.join(x12); + Expression x160=x161.difference(x162); + Formula x159=x160.lone(); + Formula x152=x153.or(x159); + Formula x146=x152.forAll(x147); + Formula x139=x140.and(x146); + Formula x119=x120.and(x139); + Formula x113=x114.and(x119); + Variable x165=Variable.unary("Safe_s"); + Decls x164=x165.oneOf(x6); + Expression x168=x165.join(x11); + Expression x170=x103.join(x13); + Expression x169=x170.transpose(); + Expression x167=x168.join(x169); + Formula x166=x167.lone(); + Formula x163=x166.forAll(x164); + Formula x112=x113.and(x163); + Formula x111=x112.not(); + Variable x173=Variable.unary("Safe_s"); + Decls x172=x173.oneOf(x6); + Expression x176=x173.join(x11); + Expression x178=x105.join(x13); + Expression x177=x178.transpose(); + Expression x175=x176.join(x177); + Formula x174=x175.lone(); + Formula x171=x174.forAll(x172); + Formula x110=x111.or(x171); + Formula x100=x110.forAll(x101); + Formula x99=x100.not(); + Formula x179=x0.eq(x0); + Formula x180=x1.eq(x1); + Formula x181=x2.eq(x2); + Formula x182=x3.eq(x3); + Formula x183=x4.eq(x4); + Formula x184=x5.eq(x5); + Formula x185=x6.eq(x6); + Formula x186=x7.eq(x7); + Formula x187=x8.eq(x8); + Formula x188=x9.eq(x9); + Formula x189=x10.eq(x10); + Formula x190=x11.eq(x11); + Formula x191=x12.eq(x12); + Formula x192=x13.eq(x13); + Formula x193=x14.eq(x14); + Formula x15=Formula.compose(FormulaOperator.AND, x16, x21, x24, x29, x31, x36, x38, x58, x61, x66, x68, x73, x85, x99, x179, x180, x181, x182, x183, x184, x185, x186, x187, x188, x189, x190, x191, x192, x193); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x15,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/model/transport/railwayTrainsMoveLegalRun.java b/Source/kodkod/examples/kodkod/examples/models/model/transport/railwayTrainsMoveLegalRun.java new file mode 100644 index 0000000..886da86 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/model/transport/railwayTrainsMoveLegalRun.java @@ -0,0 +1,394 @@ +package kodkod.examples.models.model.transport; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "railway", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 10, + TransitiveClosure = 0, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 3, + OrderedRelations = 0, + Constraints = 10 +) + + +public final class railwayTrainsMoveLegalRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Seg"); + Relation x7 = Relation.unary("this/Train"); + Relation x8 = Relation.unary("this/GateState"); + Relation x9 = Relation.unary("this/TrainState"); + Relation x10 = Relation.nary("this/Seg.next", 2); + Relation x11 = Relation.nary("this/Seg.overlaps", 2); + Relation x12 = Relation.nary("this/GateState.closed", 2); + Relation x13 = Relation.nary("this/TrainState.on", 3); + Relation x14 = Relation.nary("this/TrainState.occupied", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "GateState$0", + "GateState$1", "GateState$2", "Seg$0", "Seg$1", "Seg$2", "Train$0", + "Train$1", "Train$2", "TrainState$0", "TrainState$1", "TrainState$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Seg$0")); + x6_upper.add(factory.tuple("Seg$1")); + x6_upper.add(factory.tuple("Seg$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Train$0")); + x7_upper.add(factory.tuple("Train$1")); + x7_upper.add(factory.tuple("Train$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("GateState$0")); + x8_upper.add(factory.tuple("GateState$1")); + x8_upper.add(factory.tuple("GateState$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("TrainState$0")); + x9_upper.add(factory.tuple("TrainState$1")); + x9_upper.add(factory.tuple("TrainState$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$0"))); + x10_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$1"))); + x10_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$2"))); + x10_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$0"))); + x10_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$1"))); + x10_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$2"))); + x10_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$0"))); + x10_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$1"))); + x10_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$2"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$0"))); + x11_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$1"))); + x11_upper.add(factory.tuple("Seg$0").product(factory.tuple("Seg$2"))); + x11_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$0"))); + x11_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$1"))); + x11_upper.add(factory.tuple("Seg$1").product(factory.tuple("Seg$2"))); + x11_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$0"))); + x11_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$1"))); + x11_upper.add(factory.tuple("Seg$2").product(factory.tuple("Seg$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("GateState$0").product(factory.tuple("Seg$0"))); + x12_upper.add(factory.tuple("GateState$0").product(factory.tuple("Seg$1"))); + x12_upper.add(factory.tuple("GateState$0").product(factory.tuple("Seg$2"))); + x12_upper.add(factory.tuple("GateState$1").product(factory.tuple("Seg$0"))); + x12_upper.add(factory.tuple("GateState$1").product(factory.tuple("Seg$1"))); + x12_upper.add(factory.tuple("GateState$1").product(factory.tuple("Seg$2"))); + x12_upper.add(factory.tuple("GateState$2").product(factory.tuple("Seg$0"))); + x12_upper.add(factory.tuple("GateState$2").product(factory.tuple("Seg$1"))); + x12_upper.add(factory.tuple("GateState$2").product(factory.tuple("Seg$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(3); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$0")).product(factory.tuple("Seg$0"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$0")).product(factory.tuple("Seg$1"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$0")).product(factory.tuple("Seg$2"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$1")).product(factory.tuple("Seg$0"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$1")).product(factory.tuple("Seg$1"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$1")).product(factory.tuple("Seg$2"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$2")).product(factory.tuple("Seg$0"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$2")).product(factory.tuple("Seg$1"))); + x13_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Train$2")).product(factory.tuple("Seg$2"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$0")).product(factory.tuple("Seg$0"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$0")).product(factory.tuple("Seg$1"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$0")).product(factory.tuple("Seg$2"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$1")).product(factory.tuple("Seg$0"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$1")).product(factory.tuple("Seg$1"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$1")).product(factory.tuple("Seg$2"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$2")).product(factory.tuple("Seg$0"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$2")).product(factory.tuple("Seg$1"))); + x13_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Train$2")).product(factory.tuple("Seg$2"))); + x13_upper.add(factory.tuple("TrainState$2").product(factory.tuple("Train$0")).product(factory.tuple("Seg$0"))); + x13_upper.add(factory.tuple("TrainState$2").product(factory.tuple("Train$0")).product(factory.tuple("Seg$1"))); + x13_upper.add(factory.tuple("TrainState$2").product(factory.tuple("Train$0")).product(factory.tuple("Seg$2"))); + x13_upper.add(factory.tuple("TrainState$2").product(factory.tuple("Train$1")).product(factory.tuple("Seg$0"))); + x13_upper.add(factory.tuple("TrainState$2").product(factory.tuple("Train$1")).product(factory.tuple("Seg$1"))); + x13_upper.add(factory.tuple("TrainState$2").product(factory.tuple("Train$1")).product(factory.tuple("Seg$2"))); + x13_upper.add(factory.tuple("TrainState$2").product(factory.tuple("Train$2")).product(factory.tuple("Seg$0"))); + x13_upper.add(factory.tuple("TrainState$2").product(factory.tuple("Train$2")).product(factory.tuple("Seg$1"))); + x13_upper.add(factory.tuple("TrainState$2").product(factory.tuple("Train$2")).product(factory.tuple("Seg$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Seg$0"))); + x14_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Seg$1"))); + x14_upper.add(factory.tuple("TrainState$0").product(factory.tuple("Seg$2"))); + x14_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Seg$0"))); + x14_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Seg$1"))); + x14_upper.add(factory.tuple("TrainState$1").product(factory.tuple("Seg$2"))); + x14_upper.add(factory.tuple("TrainState$2").product(factory.tuple("Seg$0"))); + x14_upper.add(factory.tuple("TrainState$2").product(factory.tuple("Seg$1"))); + x14_upper.add(factory.tuple("TrainState$2").product(factory.tuple("Seg$2"))); + bounds.bound(x14, x14_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x18=Variable.unary("TrainsMoveLegal_this"); + Decls x17=x18.oneOf(x6); + Expression x20=x18.join(x10); + Formula x19=x20.in(x6); + Formula x16=x19.forAll(x17); + Expression x22=x10.join(Expression.UNIV); + Formula x21=x22.in(x6); + Variable x26=Variable.unary("TrainsMoveLegal_this"); + Decls x25=x26.oneOf(x6); + Expression x28=x26.join(x11); + Formula x27=x28.in(x6); + Formula x24=x27.forAll(x25); + Expression x30=x11.join(Expression.UNIV); + Formula x29=x30.in(x6); + Variable x33=Variable.unary("TrainsMoveLegal_this"); + Decls x32=x33.oneOf(x8); + Expression x35=x33.join(x12); + Formula x34=x35.in(x6); + Formula x31=x34.forAll(x32); + Expression x37=x12.join(Expression.UNIV); + Formula x36=x37.in(x8); + Variable x40=Variable.unary("TrainsMoveLegal_this"); + Decls x39=x40.oneOf(x9); + Expression x44=x40.join(x13); + Expression x45=x7.product(x6); + Formula x43=x44.in(x45); + Variable x48=Variable.unary(""); + Decls x47=x48.oneOf(x7); + Expression x51=x48.join(x44); + Formula x50=x51.lone(); + Formula x52=x51.in(x6); + Formula x49=x50.and(x52); + Formula x46=x49.forAll(x47); + Formula x42=x43.and(x46); + Variable x55=Variable.unary(""); + Decls x54=x55.oneOf(x6); + Expression x57=x44.join(x55); + Formula x56=x57.in(x7); + Formula x53=x56.forAll(x54); + Formula x41=x42.and(x53); + Formula x38=x41.forAll(x39); + Expression x60=x13.join(Expression.UNIV); + Expression x59=x60.join(Expression.UNIV); + Formula x58=x59.in(x9); + Variable x63=Variable.unary("TrainsMoveLegal_this"); + Decls x62=x63.oneOf(x9); + Expression x65=x63.join(x14); + Formula x64=x65.in(x6); + Formula x61=x64.forAll(x62); + Expression x67=x14.join(Expression.UNIV); + Formula x66=x67.in(x9); + Variable x70=Variable.unary("TrainsMoveLegal_s"); + Decls x69=x70.oneOf(x6); + Expression x72=x70.join(x11); + Formula x71=x70.in(x72); + Formula x68=x71.forAll(x69); + Variable x76=Variable.unary("TrainsMoveLegal_s1"); + Decls x75=x76.oneOf(x6); + Variable x78=Variable.unary("TrainsMoveLegal_s2"); + Decls x77=x78.oneOf(x6); + Decls x74=x75.and(x77); + Expression x82=x78.join(x11); + Formula x81=x76.in(x82); + Formula x80=x81.not(); + Expression x84=x76.join(x11); + Formula x83=x78.in(x84); + Formula x79=x80.or(x83); + Formula x73=x79.forAll(x74); + Variable x87=Variable.unary("TrainsMoveLegal_x"); + Decls x86=x87.oneOf(x9); + Expression x89=x87.join(x14); + Variable x92=Variable.unary("TrainsMoveLegal_s"); + Decls x91=x92.oneOf(x6); + Variable x95=Variable.unary("TrainsMoveLegal_t"); + Decls x94=x95.oneOf(x7); + Expression x98=x87.join(x13); + Expression x97=x95.join(x98); + Formula x96=x97.eq(x92); + Formula x93=x96.forSome(x94); + Expression x90=x93.comprehension(x91); + Formula x88=x89.eq(x90); + Formula x85=x88.forAll(x86); + Variable x102=Variable.unary("TrainsMoveLegal_x"); + Decls x101=x102.oneOf(x9); + Variable x104=Variable.unary("TrainsMoveLegal_x'"); + Decls x103=x104.oneOf(x9); + Variable x106=Variable.unary("TrainsMoveLegal_g"); + Decls x105=x106.oneOf(x8); + Variable x108=Variable.unary("TrainsMoveLegal_ts"); + Decls x107=x108.setOf(x7); + Decls x100=x101.and(x103).and(x105).and(x107); + Variable x114=Variable.unary("TrainsMove_t"); + Decls x113=x114.oneOf(x108); + Expression x117=x104.join(x13); + Expression x116=x114.join(x117); + Expression x120=x102.join(x13); + Expression x119=x114.join(x120); + Expression x118=x119.join(x10); + Formula x115=x116.in(x118); + Formula x112=x115.forAll(x113); + Variable x123=Variable.unary("TrainsMove_t"); + Expression x124=x7.difference(x108); + Decls x122=x123.oneOf(x124); + Expression x127=x104.join(x13); + Expression x126=x123.join(x127); + Expression x129=x102.join(x13); + Expression x128=x123.join(x129); + Formula x125=x126.eq(x128); + Formula x121=x125.forAll(x122); + Formula x111=x112.and(x121); + Expression x133=x102.join(x13); + Expression x132=x108.join(x133); + Expression x134=x106.join(x12); + Expression x131=x132.intersection(x134); + Formula x130=x131.no(); + Formula x110=x111.and(x130); + Expression x139=x102.join(x14); + Expression x138=x139.join(x11); + Expression x140=x10.transpose(); + Expression x137=x138.join(x140); + Expression x141=x106.join(x12); + Formula x136=x137.in(x141); + Variable x145=Variable.unary("GatePolicy_s1"); + Decls x144=x145.oneOf(x6); + Variable x147=Variable.unary("GatePolicy_s2"); + Decls x146=x147.oneOf(x6); + Decls x143=x144.and(x146); + Expression x153=x145.join(x10); + Expression x152=x153.join(x11); + Expression x154=x147.join(x10); + Expression x151=x152.intersection(x154); + Formula x150=x151.some(); + Formula x149=x150.not(); + Expression x157=x145.union(x147); + Expression x158=x106.join(x12); + Expression x156=x157.difference(x158); + Formula x155=x156.lone(); + Formula x148=x149.or(x155); + Formula x142=x148.forAll(x143); + Formula x135=x136.and(x142); + Formula x109=x110.and(x135); + Formula x99=x109.forSome(x100); + Formula x159=x0.eq(x0); + Formula x160=x1.eq(x1); + Formula x161=x2.eq(x2); + Formula x162=x3.eq(x3); + Formula x163=x4.eq(x4); + Formula x164=x5.eq(x5); + Formula x165=x6.eq(x6); + Formula x166=x7.eq(x7); + Formula x167=x8.eq(x8); + Formula x168=x9.eq(x9); + Formula x169=x10.eq(x10); + Formula x170=x11.eq(x11); + Formula x171=x12.eq(x12); + Formula x172=x13.eq(x13); + Formula x173=x14.eq(x14); + Formula x15=Formula.compose(FormulaOperator.AND, x16, x21, x24, x29, x31, x36, x38, x58, x61, x66, x68, x73, x85, x99, x159, x160, x161, x162, x163, x164, x165, x166, x167, x168, x169, x170, x171, x172, x173); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x15,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/model/typography/paragraphNumberingAddNeverReducesCheck.java b/Source/kodkod/examples/kodkod/examples/models/model/typography/paragraphNumberingAddNeverReducesCheck.java new file mode 100644 index 0000000..fff14ea --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/model/typography/paragraphNumberingAddNeverReducesCheck.java @@ -0,0 +1,831 @@ +package kodkod.examples.models.model.typography; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "paragraph-numbering", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 6, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 10, + TransitiveClosure = 5, + NestedQuantifiers = 4, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 8, + OrderedRelations = 0, + Constraints = 15 +) + + +public final class paragraphNumberingAddNeverReducesCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/NumberedStyle"); + Relation x7 = Relation.unary("this/Style remainder"); + Relation x8 = Relation.unary("this/NumberedState"); + Relation x9 = Relation.unary("this/State remainder"); + Relation x10 = Relation.unary("this/Value"); + Relation x11 = Relation.nary("this/Style.replaces", 2); + Relation x12 = Relation.nary("this/Style.parents", 2); + Relation x13 = Relation.nary("this/State.context", 2); + Relation x14 = Relation.nary("this/State.ancestors", 3); + Relation x15 = Relation.nary("this/Value.next", 2); + Relation x16 = Relation.nary("this/NumberedStyle.initial", 2); + Relation x17 = Relation.nary("this/NumberedState.value", 3); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "State$0", + "State$1", "State$2", "State$3", "State$4", "Style$0", "Style$1", + "Style$2", "Style$3", "Style$4", "Value$0", "Value$1", "Value$2", + "Value$3", "Value$4" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Style$0")); + x6_upper.add(factory.tuple("Style$1")); + x6_upper.add(factory.tuple("Style$2")); + x6_upper.add(factory.tuple("Style$3")); + x6_upper.add(factory.tuple("Style$4")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Style$0")); + x7_upper.add(factory.tuple("Style$1")); + x7_upper.add(factory.tuple("Style$2")); + x7_upper.add(factory.tuple("Style$3")); + x7_upper.add(factory.tuple("Style$4")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + x8_upper.add(factory.tuple("State$3")); + x8_upper.add(factory.tuple("State$4")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("State$0")); + x9_upper.add(factory.tuple("State$1")); + x9_upper.add(factory.tuple("State$2")); + x9_upper.add(factory.tuple("State$3")); + x9_upper.add(factory.tuple("State$4")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Value$0")); + x10_upper.add(factory.tuple("Value$1")); + x10_upper.add(factory.tuple("Value$2")); + x10_upper.add(factory.tuple("Value$3")); + x10_upper.add(factory.tuple("Value$4")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$0"))); + x11_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$1"))); + x11_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$2"))); + x11_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$3"))); + x11_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$4"))); + x11_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$0"))); + x11_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$1"))); + x11_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$2"))); + x11_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$3"))); + x11_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$4"))); + x11_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$0"))); + x11_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$1"))); + x11_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$2"))); + x11_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$3"))); + x11_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$4"))); + x11_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$0"))); + x11_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$1"))); + x11_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$2"))); + x11_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$3"))); + x11_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$4"))); + x11_upper.add(factory.tuple("Style$4").product(factory.tuple("Style$0"))); + x11_upper.add(factory.tuple("Style$4").product(factory.tuple("Style$1"))); + x11_upper.add(factory.tuple("Style$4").product(factory.tuple("Style$2"))); + x11_upper.add(factory.tuple("Style$4").product(factory.tuple("Style$3"))); + x11_upper.add(factory.tuple("Style$4").product(factory.tuple("Style$4"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$0"))); + x12_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$1"))); + x12_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$2"))); + x12_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$3"))); + x12_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$4"))); + x12_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$0"))); + x12_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$1"))); + x12_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$2"))); + x12_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$3"))); + x12_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$4"))); + x12_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$0"))); + x12_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$1"))); + x12_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$2"))); + x12_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$3"))); + x12_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$4"))); + x12_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$0"))); + x12_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$1"))); + x12_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$2"))); + x12_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$3"))); + x12_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$4"))); + x12_upper.add(factory.tuple("Style$4").product(factory.tuple("Style$0"))); + x12_upper.add(factory.tuple("Style$4").product(factory.tuple("Style$1"))); + x12_upper.add(factory.tuple("Style$4").product(factory.tuple("Style$2"))); + x12_upper.add(factory.tuple("Style$4").product(factory.tuple("Style$3"))); + x12_upper.add(factory.tuple("Style$4").product(factory.tuple("Style$4"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Style$4"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Style$4"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Style$4"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Style$4"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Style$0"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Style$1"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Style$2"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Style$3"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Style$4"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(3); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$4")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$4")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$4")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$4")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$4")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$4")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$4")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$4")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$4")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$4")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$4")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$4")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$4")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$4")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$4")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$4")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$4")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$4")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$4")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$4")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$0")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$0")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$0")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$0")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$0")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$1")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$1")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$1")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$1")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$1")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$2")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$2")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$2")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$2")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$2")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$3")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$3")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$3")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$3")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$3")).product(factory.tuple("Style$4"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$4")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$4")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$4")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$4")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Style$4")).product(factory.tuple("Style$4"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("Value$0").product(factory.tuple("Value$0"))); + x15_upper.add(factory.tuple("Value$0").product(factory.tuple("Value$1"))); + x15_upper.add(factory.tuple("Value$0").product(factory.tuple("Value$2"))); + x15_upper.add(factory.tuple("Value$0").product(factory.tuple("Value$3"))); + x15_upper.add(factory.tuple("Value$0").product(factory.tuple("Value$4"))); + x15_upper.add(factory.tuple("Value$1").product(factory.tuple("Value$0"))); + x15_upper.add(factory.tuple("Value$1").product(factory.tuple("Value$1"))); + x15_upper.add(factory.tuple("Value$1").product(factory.tuple("Value$2"))); + x15_upper.add(factory.tuple("Value$1").product(factory.tuple("Value$3"))); + x15_upper.add(factory.tuple("Value$1").product(factory.tuple("Value$4"))); + x15_upper.add(factory.tuple("Value$2").product(factory.tuple("Value$0"))); + x15_upper.add(factory.tuple("Value$2").product(factory.tuple("Value$1"))); + x15_upper.add(factory.tuple("Value$2").product(factory.tuple("Value$2"))); + x15_upper.add(factory.tuple("Value$2").product(factory.tuple("Value$3"))); + x15_upper.add(factory.tuple("Value$2").product(factory.tuple("Value$4"))); + x15_upper.add(factory.tuple("Value$3").product(factory.tuple("Value$0"))); + x15_upper.add(factory.tuple("Value$3").product(factory.tuple("Value$1"))); + x15_upper.add(factory.tuple("Value$3").product(factory.tuple("Value$2"))); + x15_upper.add(factory.tuple("Value$3").product(factory.tuple("Value$3"))); + x15_upper.add(factory.tuple("Value$3").product(factory.tuple("Value$4"))); + x15_upper.add(factory.tuple("Value$4").product(factory.tuple("Value$0"))); + x15_upper.add(factory.tuple("Value$4").product(factory.tuple("Value$1"))); + x15_upper.add(factory.tuple("Value$4").product(factory.tuple("Value$2"))); + x15_upper.add(factory.tuple("Value$4").product(factory.tuple("Value$3"))); + x15_upper.add(factory.tuple("Value$4").product(factory.tuple("Value$4"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Style$0").product(factory.tuple("Value$0"))); + x16_upper.add(factory.tuple("Style$0").product(factory.tuple("Value$1"))); + x16_upper.add(factory.tuple("Style$0").product(factory.tuple("Value$2"))); + x16_upper.add(factory.tuple("Style$0").product(factory.tuple("Value$3"))); + x16_upper.add(factory.tuple("Style$0").product(factory.tuple("Value$4"))); + x16_upper.add(factory.tuple("Style$1").product(factory.tuple("Value$0"))); + x16_upper.add(factory.tuple("Style$1").product(factory.tuple("Value$1"))); + x16_upper.add(factory.tuple("Style$1").product(factory.tuple("Value$2"))); + x16_upper.add(factory.tuple("Style$1").product(factory.tuple("Value$3"))); + x16_upper.add(factory.tuple("Style$1").product(factory.tuple("Value$4"))); + x16_upper.add(factory.tuple("Style$2").product(factory.tuple("Value$0"))); + x16_upper.add(factory.tuple("Style$2").product(factory.tuple("Value$1"))); + x16_upper.add(factory.tuple("Style$2").product(factory.tuple("Value$2"))); + x16_upper.add(factory.tuple("Style$2").product(factory.tuple("Value$3"))); + x16_upper.add(factory.tuple("Style$2").product(factory.tuple("Value$4"))); + x16_upper.add(factory.tuple("Style$3").product(factory.tuple("Value$0"))); + x16_upper.add(factory.tuple("Style$3").product(factory.tuple("Value$1"))); + x16_upper.add(factory.tuple("Style$3").product(factory.tuple("Value$2"))); + x16_upper.add(factory.tuple("Style$3").product(factory.tuple("Value$3"))); + x16_upper.add(factory.tuple("Style$3").product(factory.tuple("Value$4"))); + x16_upper.add(factory.tuple("Style$4").product(factory.tuple("Value$0"))); + x16_upper.add(factory.tuple("Style$4").product(factory.tuple("Value$1"))); + x16_upper.add(factory.tuple("Style$4").product(factory.tuple("Value$2"))); + x16_upper.add(factory.tuple("Style$4").product(factory.tuple("Value$3"))); + x16_upper.add(factory.tuple("Style$4").product(factory.tuple("Value$4"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(3); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$4")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$4")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$4")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$4")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$4")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$4")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$4")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$4")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$4")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$4")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$4")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$4")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$4")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$4")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$4")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$4")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$4")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$4")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$4")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$4")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$0")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$0")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$0")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$0")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$0")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$1")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$1")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$1")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$1")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$1")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$2")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$2")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$2")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$2")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$2")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$3")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$3")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$3")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$3")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$3")).product(factory.tuple("Value$4"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$4")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$4")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$4")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$4")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("Style$4")).product(factory.tuple("Value$4"))); + bounds.bound(x17, x17_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x21=Variable.unary("AddNeverReduces_this"); + Decls x20=x21.oneOf(x6); + Expression x24=x21.join(x16); + Formula x23=x24.one(); + Formula x25=x24.in(x10); + Formula x22=x23.and(x25); + Formula x19=x22.forAll(x20); + Expression x27=x16.join(Expression.UNIV); + Formula x26=x27.in(x6); + Variable x31=Variable.unary("AddNeverReduces_this"); + Expression x32=x6.union(x7); + Decls x30=x31.oneOf(x32); + Expression x34=x31.join(x11); + Formula x33=x34.in(x32); + Formula x29=x33.forAll(x30); + Expression x36=x11.join(Expression.UNIV); + Formula x35=x36.in(x32); + Variable x39=Variable.unary("AddNeverReduces_this"); + Decls x38=x39.oneOf(x32); + Expression x41=x39.join(x12); + Formula x40=x41.in(x32); + Formula x37=x40.forAll(x38); + Expression x43=x12.join(Expression.UNIV); + Formula x42=x43.in(x32); + Variable x46=Variable.unary("AddNeverReduces_this"); + Decls x45=x46.oneOf(x8); + Expression x50=x46.join(x17); + Expression x51=x32.product(x10); + Formula x49=x50.in(x51); + Variable x54=Variable.unary(""); + Decls x53=x54.oneOf(x32); + Expression x57=x54.join(x50); + Formula x56=x57.one(); + Formula x58=x57.in(x10); + Formula x55=x56.and(x58); + Formula x52=x55.forAll(x53); + Formula x48=x49.and(x52); + Variable x61=Variable.unary(""); + Decls x60=x61.oneOf(x10); + Expression x63=x50.join(x61); + Formula x62=x63.in(x32); + Formula x59=x62.forAll(x60); + Formula x47=x48.and(x59); + Formula x44=x47.forAll(x45); + Expression x66=x17.join(Expression.UNIV); + Expression x65=x66.join(Expression.UNIV); + Formula x64=x65.in(x8); + Variable x69=Variable.unary("AddNeverReduces_this"); + Expression x70=x8.union(x9); + Decls x68=x69.oneOf(x70); + Expression x72=x69.join(x13); + Formula x71=x72.in(x32); + Formula x67=x71.forAll(x68); + Expression x74=x13.join(Expression.UNIV); + Formula x73=x74.in(x70); + Variable x77=Variable.unary("AddNeverReduces_this"); + Decls x76=x77.oneOf(x70); + Expression x79=x77.join(x14); + Expression x80=x32.product(x32); + Formula x78=x79.in(x80); + Formula x75=x78.forAll(x76); + Expression x83=x14.join(Expression.UNIV); + Expression x82=x83.join(Expression.UNIV); + Formula x81=x82.in(x70); + Variable x86=Variable.unary("AddNeverReduces_this"); + Decls x85=x86.oneOf(x10); + Expression x89=x86.join(x15); + Formula x88=x89.one(); + Formula x90=x89.in(x10); + Formula x87=x88.and(x90); + Formula x84=x87.forAll(x85); + Expression x92=x15.join(Expression.UNIV); + Formula x91=x92.in(x10); + Expression x97=x32.product(Expression.UNIV); + Expression x104=Expression.INTS.union(x5); + Expression x103=x104.union(x32); + Expression x102=x103.union(x70); + Expression x101=x102.union(x10); + Expression x100=x101.product(Expression.UNIV); + Expression x98=Expression.IDEN.intersection(x100); + Expression x96=x97.intersection(x98); + Formula x95=x96.in(x11); + Expression x107=x11.join(x11); + Formula x106=x107.in(x11); + Formula x94=x95.and(x106); + Expression x109=x11.transpose(); + Formula x108=x109.in(x11); + Formula x93=x94.and(x108); + Variable x112=Variable.unary("acyclic_x"); + Decls x111=x112.oneOf(x32); + Expression x116=x12.closure(); + Expression x115=x112.join(x116); + Formula x114=x112.in(x115); + Formula x113=x114.not(); + Formula x110=x113.forAll(x111); + Variable x119=Variable.unary("AddNeverReduces_x"); + Decls x118=x119.oneOf(x32); + Expression x124=x119.join(x11); + Expression x123=x124.join(x12); + Expression x122=x123.join(x11); + Expression x125=x119.join(x12); + Formula x121=x122.eq(x125); + Variable x129=Variable.unary("AddNeverReduces_y"); + Expression x130=x119.join(x12); + Decls x128=x129.oneOf(x130); + Variable x132=Variable.unary("AddNeverReduces_z"); + Decls x131=x132.oneOf(x130); + Decls x127=x128.and(x131); + Expression x134=x132.join(x11); + Formula x133=x129.in(x134); + Formula x126=x133.forAll(x127); + Formula x120=x121.and(x126); + Formula x117=x120.forAll(x118); + Variable x138=Variable.unary("AddNeverReduces_s"); + Decls x137=x138.oneOf(x70); + Variable x140=Variable.unary("AddNeverReduces_x"); + Decls x139=x140.oneOf(x32); + Decls x136=x137.and(x139); + Expression x143=x138.join(x14); + Expression x142=x140.join(x143); + Expression x147=x12.closure(); + Expression x149=x101.product(Expression.UNIV); + Expression x148=Expression.IDEN.intersection(x149); + Expression x146=x147.union(x148); + Expression x145=x140.join(x146); + Expression x150=x138.join(x13); + Expression x144=x145.intersection(x150); + Formula x141=x142.eq(x144); + Formula x135=x141.forAll(x136); + Formula x151=x32.eq(x6); + Formula x152=x70.eq(x8); + Variable x157=Variable.unary("AddNeverReduces_s"); + Decls x156=x157.oneOf(x70); + Variable x159=Variable.unary("AddNeverReduces_s'"); + Decls x158=x159.oneOf(x70); + Variable x161=Variable.unary("AddNeverReduces_z"); + Decls x160=x161.oneOf(x32); + Decls x155=x156.and(x158).and(x160); + Variable x168=Variable.unary("Forest_x"); + Expression x169=x157.join(x13); + Decls x167=x168.oneOf(x169); + Variable x172=Variable.unary("Forest_root"); + Expression x174=x157.join(x14); + Expression x173=x168.join(x174); + Decls x171=x172.oneOf(x173); + Expression x177=x172.join(x12); + Formula x176=x177.no(); + Variable x180=Variable.unary("Forest_y"); + Expression x183=x157.join(x14); + Expression x182=x168.join(x183); + Expression x181=x182.difference(x172); + Decls x179=x180.oneOf(x181); + Expression x186=x180.join(x12); + Expression x187=x157.join(x13); + Expression x185=x186.intersection(x187); + Formula x184=x185.one(); + Formula x178=x184.forAll(x179); + Formula x175=x176.and(x178); + Formula x170=x175.forSome(x171); + Formula x166=x170.forAll(x167); + Variable x190=Variable.unary("Forest_x"); + Decls x189=x190.oneOf(x32); + Expression x193=x190.join(x11); + Expression x194=x157.join(x13); + Expression x192=x193.intersection(x194); + Formula x191=x192.lone(); + Formula x188=x191.forAll(x189); + Formula x165=x166.and(x188); + Variable x199=Variable.unary("AddStyleToContext_x"); + Expression x201=x12.closure(); + Expression x200=x161.join(x201); + Decls x198=x199.oneOf(x200); + Expression x204=x199.join(x11); + Expression x205=x157.join(x13); + Expression x203=x204.intersection(x205); + Formula x202=x203.some(); + Formula x197=x202.forAll(x198); + Expression x207=x159.join(x13); + Expression x210=x157.join(x13); + Expression x211=x161.join(x11); + Expression x209=x210.difference(x211); + Expression x208=x209.union(x161); + Formula x206=x207.eq(x208); + Formula x196=x197.and(x206); + Expression x216=x159.join(x17); + Expression x215=x161.join(x216); + Expression x219=x157.join(x13); + Formula x218=x161.in(x219); + Expression x222=x157.join(x17); + Expression x221=x161.join(x222); + Expression x220=x221.join(x15); + Expression x223=x161.join(x16); + Expression x217=x218.thenElse(x220,x223); + Formula x214=x215.eq(x217); + Expression x225=x159.join(x13); + Expression x228=x157.join(x13); + Expression x229=x161.join(x11); + Expression x227=x228.difference(x229); + Expression x226=x227.union(x161); + Formula x224=x225.eq(x226); + Formula x213=x214.and(x224); + Variable x232=Variable.unary("AddStyleToNumbering_x"); + Expression x233=x32.difference(x161); + Decls x231=x232.oneOf(x233); + Expression x236=x159.join(x17); + Expression x235=x232.join(x236); + Expression x240=x12.closure(); + Expression x239=x232.join(x240); + Formula x238=x161.in(x239); + Expression x241=x232.join(x16); + Expression x243=x157.join(x17); + Expression x242=x232.join(x243); + Expression x237=x238.thenElse(x241,x242); + Formula x234=x235.eq(x237); + Formula x230=x234.forAll(x231); + Formula x212=x213.and(x230); + Formula x195=x196.and(x212); + Formula x164=x165.and(x195); + Formula x163=x164.not(); + Variable x246=Variable.unary("AddNeverReduces_y"); + Expression x247=x159.join(x13); + Decls x245=x246.oneOf(x247); + Expression x250=x159.join(x17); + Expression x249=x246.join(x250); + Expression x253=x157.join(x17); + Expression x252=x246.join(x253); + Expression x255=x15.closure(); + Expression x257=x101.product(Expression.UNIV); + Expression x256=Expression.IDEN.intersection(x257); + Expression x254=x255.union(x256); + Expression x251=x252.join(x254); + Formula x248=x249.in(x251); + Formula x244=x248.forAll(x245); + Formula x162=x163.or(x244); + Formula x154=x162.forAll(x155); + Formula x153=x154.not(); + Formula x258=x0.eq(x0); + Formula x259=x1.eq(x1); + Formula x260=x2.eq(x2); + Formula x261=x3.eq(x3); + Formula x262=x4.eq(x4); + Formula x263=x5.eq(x5); + Formula x264=x6.eq(x6); + Formula x265=x7.eq(x7); + Formula x266=x8.eq(x8); + Formula x267=x9.eq(x9); + Formula x268=x10.eq(x10); + Formula x269=x11.eq(x11); + Formula x270=x12.eq(x12); + Formula x271=x13.eq(x13); + Formula x272=x14.eq(x14); + Formula x273=x15.eq(x15); + Formula x274=x16.eq(x16); + Formula x275=x17.eq(x17); + Formula x18=Formula.compose(FormulaOperator.AND, x19, x26, x29, x35, x37, x42, x44, x64, x67, x73, x75, x81, x84, x91, x93, x110, x117, x135, x151, x152, x153, x258, x259, x260, x261, x262, x263, x264, x265, x266, x267, x268, x269, x270, x271, x272, x273, x274, x275); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x18,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/model/typography/paragraphNumberingPreserveForestCheck.java b/Source/kodkod/examples/kodkod/examples/models/model/typography/paragraphNumberingPreserveForestCheck.java new file mode 100644 index 0000000..476839b --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/model/typography/paragraphNumberingPreserveForestCheck.java @@ -0,0 +1,640 @@ +package kodkod.examples.models.model.typography; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "paragraph-numbering", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 6, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 10, + TransitiveClosure = 3, + NestedQuantifiers = 4, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 8, + OrderedRelations = 0, + Constraints = 15 +) + + +public final class paragraphNumberingPreserveForestCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/NumberedStyle"); + Relation x7 = Relation.unary("this/Style remainder"); + Relation x8 = Relation.unary("this/NumberedState"); + Relation x9 = Relation.unary("this/State remainder"); + Relation x10 = Relation.unary("this/Value"); + Relation x11 = Relation.nary("this/Style.replaces", 2); + Relation x12 = Relation.nary("this/Style.parents", 2); + Relation x13 = Relation.nary("this/State.context", 2); + Relation x14 = Relation.nary("this/State.ancestors", 3); + Relation x15 = Relation.nary("this/Value.next", 2); + Relation x16 = Relation.nary("this/NumberedStyle.initial", 2); + Relation x17 = Relation.nary("this/NumberedState.value", 3); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "State$0", + "State$1", "State$2", "State$3", "Style$0", "Style$1", "Style$2", + "Style$3", "Value$0", "Value$1", "Value$2", "Value$3" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Style$0")); + x6_upper.add(factory.tuple("Style$1")); + x6_upper.add(factory.tuple("Style$2")); + x6_upper.add(factory.tuple("Style$3")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Style$0")); + x7_upper.add(factory.tuple("Style$1")); + x7_upper.add(factory.tuple("Style$2")); + x7_upper.add(factory.tuple("Style$3")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + x8_upper.add(factory.tuple("State$3")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("State$0")); + x9_upper.add(factory.tuple("State$1")); + x9_upper.add(factory.tuple("State$2")); + x9_upper.add(factory.tuple("State$3")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Value$0")); + x10_upper.add(factory.tuple("Value$1")); + x10_upper.add(factory.tuple("Value$2")); + x10_upper.add(factory.tuple("Value$3")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$0"))); + x11_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$1"))); + x11_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$2"))); + x11_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$3"))); + x11_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$0"))); + x11_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$1"))); + x11_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$2"))); + x11_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$3"))); + x11_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$0"))); + x11_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$1"))); + x11_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$2"))); + x11_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$3"))); + x11_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$0"))); + x11_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$1"))); + x11_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$2"))); + x11_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$3"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$0"))); + x12_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$1"))); + x12_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$2"))); + x12_upper.add(factory.tuple("Style$0").product(factory.tuple("Style$3"))); + x12_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$0"))); + x12_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$1"))); + x12_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$2"))); + x12_upper.add(factory.tuple("Style$1").product(factory.tuple("Style$3"))); + x12_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$0"))); + x12_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$1"))); + x12_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$2"))); + x12_upper.add(factory.tuple("Style$2").product(factory.tuple("Style$3"))); + x12_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$0"))); + x12_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$1"))); + x12_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$2"))); + x12_upper.add(factory.tuple("Style$3").product(factory.tuple("Style$3"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(3); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Style$3"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Style$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Style$1"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Style$2"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Style$3"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("Value$0").product(factory.tuple("Value$0"))); + x15_upper.add(factory.tuple("Value$0").product(factory.tuple("Value$1"))); + x15_upper.add(factory.tuple("Value$0").product(factory.tuple("Value$2"))); + x15_upper.add(factory.tuple("Value$0").product(factory.tuple("Value$3"))); + x15_upper.add(factory.tuple("Value$1").product(factory.tuple("Value$0"))); + x15_upper.add(factory.tuple("Value$1").product(factory.tuple("Value$1"))); + x15_upper.add(factory.tuple("Value$1").product(factory.tuple("Value$2"))); + x15_upper.add(factory.tuple("Value$1").product(factory.tuple("Value$3"))); + x15_upper.add(factory.tuple("Value$2").product(factory.tuple("Value$0"))); + x15_upper.add(factory.tuple("Value$2").product(factory.tuple("Value$1"))); + x15_upper.add(factory.tuple("Value$2").product(factory.tuple("Value$2"))); + x15_upper.add(factory.tuple("Value$2").product(factory.tuple("Value$3"))); + x15_upper.add(factory.tuple("Value$3").product(factory.tuple("Value$0"))); + x15_upper.add(factory.tuple("Value$3").product(factory.tuple("Value$1"))); + x15_upper.add(factory.tuple("Value$3").product(factory.tuple("Value$2"))); + x15_upper.add(factory.tuple("Value$3").product(factory.tuple("Value$3"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Style$0").product(factory.tuple("Value$0"))); + x16_upper.add(factory.tuple("Style$0").product(factory.tuple("Value$1"))); + x16_upper.add(factory.tuple("Style$0").product(factory.tuple("Value$2"))); + x16_upper.add(factory.tuple("Style$0").product(factory.tuple("Value$3"))); + x16_upper.add(factory.tuple("Style$1").product(factory.tuple("Value$0"))); + x16_upper.add(factory.tuple("Style$1").product(factory.tuple("Value$1"))); + x16_upper.add(factory.tuple("Style$1").product(factory.tuple("Value$2"))); + x16_upper.add(factory.tuple("Style$1").product(factory.tuple("Value$3"))); + x16_upper.add(factory.tuple("Style$2").product(factory.tuple("Value$0"))); + x16_upper.add(factory.tuple("Style$2").product(factory.tuple("Value$1"))); + x16_upper.add(factory.tuple("Style$2").product(factory.tuple("Value$2"))); + x16_upper.add(factory.tuple("Style$2").product(factory.tuple("Value$3"))); + x16_upper.add(factory.tuple("Style$3").product(factory.tuple("Value$0"))); + x16_upper.add(factory.tuple("Style$3").product(factory.tuple("Value$1"))); + x16_upper.add(factory.tuple("Style$3").product(factory.tuple("Value$2"))); + x16_upper.add(factory.tuple("Style$3").product(factory.tuple("Value$3"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(3); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$0")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$1")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$2")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("Style$3")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$0")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$1")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$2")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("Style$3")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$0")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$1")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$2")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("Style$3")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$0")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$1")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$2")).product(factory.tuple("Value$3"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Value$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Value$1"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Value$2"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("Style$3")).product(factory.tuple("Value$3"))); + bounds.bound(x17, x17_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x21=Variable.unary("PreserveForest_this"); + Decls x20=x21.oneOf(x6); + Expression x24=x21.join(x16); + Formula x23=x24.one(); + Formula x25=x24.in(x10); + Formula x22=x23.and(x25); + Formula x19=x22.forAll(x20); + Expression x27=x16.join(Expression.UNIV); + Formula x26=x27.in(x6); + Variable x31=Variable.unary("PreserveForest_this"); + Expression x32=x6.union(x7); + Decls x30=x31.oneOf(x32); + Expression x34=x31.join(x11); + Formula x33=x34.in(x32); + Formula x29=x33.forAll(x30); + Expression x36=x11.join(Expression.UNIV); + Formula x35=x36.in(x32); + Variable x39=Variable.unary("PreserveForest_this"); + Decls x38=x39.oneOf(x32); + Expression x41=x39.join(x12); + Formula x40=x41.in(x32); + Formula x37=x40.forAll(x38); + Expression x43=x12.join(Expression.UNIV); + Formula x42=x43.in(x32); + Variable x46=Variable.unary("PreserveForest_this"); + Decls x45=x46.oneOf(x8); + Expression x50=x46.join(x17); + Expression x51=x32.product(x10); + Formula x49=x50.in(x51); + Variable x54=Variable.unary(""); + Decls x53=x54.oneOf(x32); + Expression x57=x54.join(x50); + Formula x56=x57.one(); + Formula x58=x57.in(x10); + Formula x55=x56.and(x58); + Formula x52=x55.forAll(x53); + Formula x48=x49.and(x52); + Variable x61=Variable.unary(""); + Decls x60=x61.oneOf(x10); + Expression x63=x50.join(x61); + Formula x62=x63.in(x32); + Formula x59=x62.forAll(x60); + Formula x47=x48.and(x59); + Formula x44=x47.forAll(x45); + Expression x66=x17.join(Expression.UNIV); + Expression x65=x66.join(Expression.UNIV); + Formula x64=x65.in(x8); + Variable x69=Variable.unary("PreserveForest_this"); + Expression x70=x8.union(x9); + Decls x68=x69.oneOf(x70); + Expression x72=x69.join(x13); + Formula x71=x72.in(x32); + Formula x67=x71.forAll(x68); + Expression x74=x13.join(Expression.UNIV); + Formula x73=x74.in(x70); + Variable x77=Variable.unary("PreserveForest_this"); + Decls x76=x77.oneOf(x70); + Expression x79=x77.join(x14); + Expression x80=x32.product(x32); + Formula x78=x79.in(x80); + Formula x75=x78.forAll(x76); + Expression x83=x14.join(Expression.UNIV); + Expression x82=x83.join(Expression.UNIV); + Formula x81=x82.in(x70); + Variable x86=Variable.unary("PreserveForest_this"); + Decls x85=x86.oneOf(x10); + Expression x89=x86.join(x15); + Formula x88=x89.one(); + Formula x90=x89.in(x10); + Formula x87=x88.and(x90); + Formula x84=x87.forAll(x85); + Expression x92=x15.join(Expression.UNIV); + Formula x91=x92.in(x10); + Expression x97=x32.product(Expression.UNIV); + Expression x104=Expression.INTS.union(x5); + Expression x103=x104.union(x32); + Expression x102=x103.union(x70); + Expression x101=x102.union(x10); + Expression x100=x101.product(Expression.UNIV); + Expression x98=Expression.IDEN.intersection(x100); + Expression x96=x97.intersection(x98); + Formula x95=x96.in(x11); + Expression x107=x11.join(x11); + Formula x106=x107.in(x11); + Formula x94=x95.and(x106); + Expression x109=x11.transpose(); + Formula x108=x109.in(x11); + Formula x93=x94.and(x108); + Variable x112=Variable.unary("acyclic_x"); + Decls x111=x112.oneOf(x32); + Expression x116=x12.closure(); + Expression x115=x112.join(x116); + Formula x114=x112.in(x115); + Formula x113=x114.not(); + Formula x110=x113.forAll(x111); + Variable x119=Variable.unary("PreserveForest_x"); + Decls x118=x119.oneOf(x32); + Expression x124=x119.join(x11); + Expression x123=x124.join(x12); + Expression x122=x123.join(x11); + Expression x125=x119.join(x12); + Formula x121=x122.eq(x125); + Variable x129=Variable.unary("PreserveForest_y"); + Expression x130=x119.join(x12); + Decls x128=x129.oneOf(x130); + Variable x132=Variable.unary("PreserveForest_z"); + Decls x131=x132.oneOf(x130); + Decls x127=x128.and(x131); + Expression x134=x132.join(x11); + Formula x133=x129.in(x134); + Formula x126=x133.forAll(x127); + Formula x120=x121.and(x126); + Formula x117=x120.forAll(x118); + Variable x138=Variable.unary("PreserveForest_s"); + Decls x137=x138.oneOf(x70); + Variable x140=Variable.unary("PreserveForest_x"); + Decls x139=x140.oneOf(x32); + Decls x136=x137.and(x139); + Expression x143=x138.join(x14); + Expression x142=x140.join(x143); + Expression x147=x12.closure(); + Expression x149=x101.product(Expression.UNIV); + Expression x148=Expression.IDEN.intersection(x149); + Expression x146=x147.union(x148); + Expression x145=x140.join(x146); + Expression x150=x138.join(x13); + Expression x144=x145.intersection(x150); + Formula x141=x142.eq(x144); + Formula x135=x141.forAll(x136); + Formula x151=x32.eq(x6); + Formula x152=x70.eq(x8); + Variable x157=Variable.unary("PreserveForest_s"); + Decls x156=x157.oneOf(x70); + Variable x159=Variable.unary("PreserveForest_s'"); + Decls x158=x159.oneOf(x70); + Variable x161=Variable.unary("PreserveForest_z"); + Decls x160=x161.oneOf(x32); + Decls x155=x156.and(x158).and(x160); + Variable x168=Variable.unary("Forest_x"); + Expression x169=x157.join(x13); + Decls x167=x168.oneOf(x169); + Variable x172=Variable.unary("Forest_root"); + Expression x174=x157.join(x14); + Expression x173=x168.join(x174); + Decls x171=x172.oneOf(x173); + Expression x177=x172.join(x12); + Formula x176=x177.no(); + Variable x180=Variable.unary("Forest_y"); + Expression x183=x157.join(x14); + Expression x182=x168.join(x183); + Expression x181=x182.difference(x172); + Decls x179=x180.oneOf(x181); + Expression x186=x180.join(x12); + Expression x187=x157.join(x13); + Expression x185=x186.intersection(x187); + Formula x184=x185.one(); + Formula x178=x184.forAll(x179); + Formula x175=x176.and(x178); + Formula x170=x175.forSome(x171); + Formula x166=x170.forAll(x167); + Variable x190=Variable.unary("Forest_x"); + Decls x189=x190.oneOf(x32); + Expression x193=x190.join(x11); + Expression x194=x157.join(x13); + Expression x192=x193.intersection(x194); + Formula x191=x192.lone(); + Formula x188=x191.forAll(x189); + Formula x165=x166.and(x188); + Variable x198=Variable.unary("AddStyleToContext_x"); + Expression x200=x12.closure(); + Expression x199=x161.join(x200); + Decls x197=x198.oneOf(x199); + Expression x203=x198.join(x11); + Expression x204=x157.join(x13); + Expression x202=x203.intersection(x204); + Formula x201=x202.some(); + Formula x196=x201.forAll(x197); + Expression x206=x159.join(x13); + Expression x209=x157.join(x13); + Expression x210=x161.join(x11); + Expression x208=x209.difference(x210); + Expression x207=x208.union(x161); + Formula x205=x206.eq(x207); + Formula x195=x196.and(x205); + Formula x164=x165.and(x195); + Formula x163=x164.not(); + Variable x214=Variable.unary("Forest_x"); + Expression x215=x159.join(x13); + Decls x213=x214.oneOf(x215); + Variable x218=Variable.unary("Forest_root"); + Expression x220=x159.join(x14); + Expression x219=x214.join(x220); + Decls x217=x218.oneOf(x219); + Expression x223=x218.join(x12); + Formula x222=x223.no(); + Variable x226=Variable.unary("Forest_y"); + Expression x229=x159.join(x14); + Expression x228=x214.join(x229); + Expression x227=x228.difference(x218); + Decls x225=x226.oneOf(x227); + Expression x232=x226.join(x12); + Expression x233=x159.join(x13); + Expression x231=x232.intersection(x233); + Formula x230=x231.one(); + Formula x224=x230.forAll(x225); + Formula x221=x222.and(x224); + Formula x216=x221.forSome(x217); + Formula x212=x216.forAll(x213); + Variable x236=Variable.unary("Forest_x"); + Decls x235=x236.oneOf(x32); + Expression x239=x236.join(x11); + Expression x240=x159.join(x13); + Expression x238=x239.intersection(x240); + Formula x237=x238.lone(); + Formula x234=x237.forAll(x235); + Formula x211=x212.and(x234); + Formula x162=x163.or(x211); + Formula x154=x162.forAll(x155); + Formula x153=x154.not(); + Formula x241=x0.eq(x0); + Formula x242=x1.eq(x1); + Formula x243=x2.eq(x2); + Formula x244=x3.eq(x3); + Formula x245=x4.eq(x4); + Formula x246=x5.eq(x5); + Formula x247=x6.eq(x6); + Formula x248=x7.eq(x7); + Formula x249=x8.eq(x8); + Formula x250=x9.eq(x9); + Formula x251=x10.eq(x10); + Formula x252=x11.eq(x11); + Formula x253=x12.eq(x12); + Formula x254=x13.eq(x13); + Formula x255=x14.eq(x14); + Formula x256=x15.eq(x15); + Formula x257=x16.eq(x16); + Formula x258=x17.eq(x17); + Formula x18=Formula.compose(FormulaOperator.AND, x19, x26, x29, x35, x37, x42, x44, x64, x67, x73, x75, x81, x84, x91, x93, x110, x117, x135, x151, x152, x153, x241, x242, x243, x244, x245, x246, x247, x248, x249, x250, x251, x252, x253, x254, x255, x256, x257, x258); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x18,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/puzzle/farmerChickenFox/farmerNoQuantumObjectCheck.java b/Source/kodkod/examples/kodkod/examples/models/puzzle/farmerChickenFox/farmerNoQuantumObjectCheck.java new file mode 100644 index 0000000..b896a61 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/puzzle/farmerChickenFox/farmerNoQuantumObjectCheck.java @@ -0,0 +1,477 @@ +package kodkod.examples.models.puzzle.farmerChickenFox; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "farmer", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =3, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 8, + OrderedRelations = 1, + Constraints = 11 +) + + +public final class farmerNoQuantumObjectCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Farmer"); + Relation x7 = Relation.unary("this/Fox"); + Relation x8 = Relation.unary("this/Chicken"); + Relation x9 = Relation.unary("this/Grain"); + Relation x10 = Relation.unary("this/State"); + Relation x11 = Relation.unary("ord/Ord"); + Relation x12 = Relation.nary("this/Object.eats", 2); + Relation x13 = Relation.nary("this/State.near", 2); + Relation x14 = Relation.nary("this/State.far", 2); + Relation x15 = Relation.unary("ord/Ord.First"); + Relation x16 = Relation.nary("ord/Ord.Next", 2); + Relation x17 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Chicken$0", + "Farmer$0", "Fox$0", "Grain$0", "State$0", "State$1", "State$2", + "State$3", "State$4", "State$5", "State$6", "State$7", "ord/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Farmer$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Fox$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Chicken$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Grain$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("State$0")); + x10_upper.add(factory.tuple("State$1")); + x10_upper.add(factory.tuple("State$2")); + x10_upper.add(factory.tuple("State$3")); + x10_upper.add(factory.tuple("State$4")); + x10_upper.add(factory.tuple("State$5")); + x10_upper.add(factory.tuple("State$6")); + x10_upper.add(factory.tuple("State$7")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("ord/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Fox$0").product(factory.tuple("Chicken$0"))); + x12_upper.add(factory.tuple("Chicken$0").product(factory.tuple("Grain$0"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$7").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$7").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$7").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$7").product(factory.tuple("Grain$0"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$7").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$7").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$7").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$7").product(factory.tuple("Grain$0"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("State$0")); + x15_upper.add(factory.tuple("State$1")); + x15_upper.add(factory.tuple("State$2")); + x15_upper.add(factory.tuple("State$3")); + x15_upper.add(factory.tuple("State$4")); + x15_upper.add(factory.tuple("State$5")); + x15_upper.add(factory.tuple("State$6")); + x15_upper.add(factory.tuple("State$7")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$7"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("State$0")); + x17_upper.add(factory.tuple("State$1")); + x17_upper.add(factory.tuple("State$2")); + x17_upper.add(factory.tuple("State$3")); + x17_upper.add(factory.tuple("State$4")); + x17_upper.add(factory.tuple("State$5")); + x17_upper.add(factory.tuple("State$6")); + x17_upper.add(factory.tuple("State$7")); + bounds.bound(x17, x17_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x20=x6.intersection(x7); + Formula x19=x20.no(); + Expression x23=x6.union(x7); + Expression x22=x23.intersection(x8); + Formula x21=x22.no(); + Expression x26=x23.union(x8); + Expression x25=x26.intersection(x9); + Formula x24=x25.no(); + Variable x29=Variable.unary("NoQuantumObjects_this"); + Expression x30=x26.union(x9); + Decls x28=x29.oneOf(x30); + Expression x32=x29.join(x12); + Formula x31=x32.in(x30); + Formula x27=x31.forAll(x28); + Expression x34=x12.join(Expression.UNIV); + Formula x33=x34.in(x30); + Variable x38=Variable.unary("NoQuantumObjects_this"); + Decls x37=x38.oneOf(x10); + Expression x40=x38.join(x13); + Formula x39=x40.in(x30); + Formula x36=x39.forAll(x37); + Expression x42=x13.join(Expression.UNIV); + Formula x41=x42.in(x10); + Variable x45=Variable.unary("NoQuantumObjects_this"); + Decls x44=x45.oneOf(x10); + Expression x47=x45.join(x14); + Formula x46=x47.in(x30); + Formula x43=x46.forAll(x44); + Expression x49=x14.join(Expression.UNIV); + Formula x48=x49.in(x10); + Expression x52=x11.product(x15); + Expression x51=x11.join(x52); + Formula x50=x51.in(x10); + Expression x55=x11.product(x16); + Expression x54=x11.join(x55); + Expression x56=x10.product(x10); + Formula x53=x54.in(x56); + Formula x57=x16.totalOrder(x10,x15,x17); + Expression x60=x7.product(x8); + Expression x61=x8.product(x9); + Expression x59=x60.union(x61); + Formula x58=x12.eq(x59); + Expression x64=x15.join(x13); + Formula x63=x64.eq(x30); + Expression x66=x15.join(x14); + Formula x65=x66.no(); + Formula x62=x63.and(x65); + Variable x70=Variable.unary("NoQuantumObjects_s"); + Decls x69=x70.oneOf(x10); + Variable x72=Variable.unary("NoQuantumObjects_s'"); + Expression x73=x70.join(x16); + Decls x71=x72.oneOf(x73); + Decls x68=x69.and(x71); + Expression x77=x70.join(x13); + Formula x76=x6.in(x77); + Expression x81=x72.join(x13); + Expression x84=x70.join(x13); + Expression x83=x84.difference(x6); + Expression x85=x81.join(x12); + Expression x82=x83.difference(x85); + Formula x80=x81.eq(x82); + Expression x87=x72.join(x14); + Expression x89=x70.join(x14); + Expression x88=x89.union(x6); + Formula x86=x87.eq(x88); + Formula x79=x80.and(x86); + Variable x93=Variable.unary("crossRiver_x"); + Expression x94=x84.difference(x6); + Decls x92=x93.oneOf(x94); + Expression x99=x84.difference(x6); + Expression x98=x99.difference(x93); + Expression x100=x81.join(x12); + Expression x97=x98.difference(x100); + Formula x96=x81.eq(x97); + Expression x103=x89.union(x6); + Expression x102=x103.union(x93); + Formula x101=x87.eq(x102); + Formula x95=x96.and(x101); + Expression x91=x95.comprehension(x92); + Formula x90=x91.one(); + Formula x78=x79.or(x90); + Formula x75=x76.implies(x78); + Formula x105=x76.not(); + Expression x109=x72.join(x14); + Expression x112=x70.join(x14); + Expression x111=x112.difference(x6); + Expression x113=x109.join(x12); + Expression x110=x111.difference(x113); + Formula x108=x109.eq(x110); + Expression x115=x72.join(x13); + Expression x117=x70.join(x13); + Expression x116=x117.union(x6); + Formula x114=x115.eq(x116); + Formula x107=x108.and(x114); + Variable x121=Variable.unary("crossRiver_x"); + Expression x122=x112.difference(x6); + Decls x120=x121.oneOf(x122); + Expression x127=x112.difference(x6); + Expression x126=x127.difference(x121); + Expression x128=x109.join(x12); + Expression x125=x126.difference(x128); + Formula x124=x109.eq(x125); + Expression x131=x117.union(x6); + Expression x130=x131.union(x121); + Formula x129=x115.eq(x130); + Formula x123=x124.and(x129); + Expression x119=x123.comprehension(x120); + Formula x118=x119.one(); + Formula x106=x107.or(x118); + Formula x104=x105.implies(x106); + Formula x74=x75.and(x104); + Formula x67=x74.forAll(x68); + Variable x135=Variable.unary("NoQuantumObjects_s"); + Decls x134=x135.oneOf(x10); + Variable x139=Variable.unary("NoQuantumObjects_x"); + Decls x138=x139.oneOf(x30); + Expression x142=x135.join(x13); + Formula x141=x139.in(x142); + Expression x144=x135.join(x14); + Formula x143=x139.in(x144); + Formula x140=x141.and(x143); + Formula x137=x140.forSome(x138); + Formula x136=x137.not(); + Formula x133=x136.forAll(x134); + Formula x132=x133.not(); + Formula x145=x0.eq(x0); + Formula x146=x1.eq(x1); + Formula x147=x2.eq(x2); + Formula x148=x3.eq(x3); + Formula x149=x4.eq(x4); + Formula x150=x5.eq(x5); + Formula x151=x6.eq(x6); + Formula x152=x7.eq(x7); + Formula x153=x8.eq(x8); + Formula x154=x9.eq(x9); + Formula x155=x10.eq(x10); + Formula x156=x11.eq(x11); + Formula x157=x12.eq(x12); + Formula x158=x13.eq(x13); + Formula x159=x14.eq(x14); + Formula x160=x15.eq(x15); + Formula x161=x16.eq(x16); + Formula x162=x17.eq(x17); + Formula x18=Formula.compose(FormulaOperator.AND, x19, x21, x24, x27, x33, x36, x41, x43, x48, x50, x53, x57, x58, x62, x67, x132, x145, x146, x147, x148, x149, x150, x151, x152, x153, x154, x155, x156, x157, x158, x159, x160, x161, x162); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x18,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/puzzle/farmerChickenFox/farmerSolvePuzzleRun.java b/Source/kodkod/examples/kodkod/examples/models/puzzle/farmerChickenFox/farmerSolvePuzzleRun.java new file mode 100644 index 0000000..f2db993 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/puzzle/farmerChickenFox/farmerSolvePuzzleRun.java @@ -0,0 +1,469 @@ +package kodkod.examples.models.puzzle.farmerChickenFox; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "farmer", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =3, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 8, + OrderedRelations = 1, + Constraints = 11 +) + + +public final class farmerSolvePuzzleRun +{ + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Farmer"); + Relation x7 = Relation.unary("this/Fox"); + Relation x8 = Relation.unary("this/Chicken"); + Relation x9 = Relation.unary("this/Grain"); + Relation x10 = Relation.unary("this/State"); + Relation x11 = Relation.unary("ord/Ord"); + Relation x12 = Relation.nary("this/Object.eats", 2); + Relation x13 = Relation.nary("this/State.near", 2); + Relation x14 = Relation.nary("this/State.far", 2); + Relation x15 = Relation.unary("ord/Ord.First"); + Relation x16 = Relation.nary("ord/Ord.Next", 2); + Relation x17 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Chicken$0", + "Farmer$0", "Fox$0", "Grain$0", "State$0", "State$1", "State$2", + "State$3", "State$4", "State$5", "State$6", "State$7", "ord/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Farmer$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Fox$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Chicken$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Grain$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("State$0")); + x10_upper.add(factory.tuple("State$1")); + x10_upper.add(factory.tuple("State$2")); + x10_upper.add(factory.tuple("State$3")); + x10_upper.add(factory.tuple("State$4")); + x10_upper.add(factory.tuple("State$5")); + x10_upper.add(factory.tuple("State$6")); + x10_upper.add(factory.tuple("State$7")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("ord/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Fox$0").product(factory.tuple("Chicken$0"))); + x12_upper.add(factory.tuple("Chicken$0").product(factory.tuple("Grain$0"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$0").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$1").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$2").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$3").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$4").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$5").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$6").product(factory.tuple("Grain$0"))); + x13_upper.add(factory.tuple("State$7").product(factory.tuple("Farmer$0"))); + x13_upper.add(factory.tuple("State$7").product(factory.tuple("Fox$0"))); + x13_upper.add(factory.tuple("State$7").product(factory.tuple("Chicken$0"))); + x13_upper.add(factory.tuple("State$7").product(factory.tuple("Grain$0"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$3").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$4").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$5").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$6").product(factory.tuple("Grain$0"))); + x14_upper.add(factory.tuple("State$7").product(factory.tuple("Farmer$0"))); + x14_upper.add(factory.tuple("State$7").product(factory.tuple("Fox$0"))); + x14_upper.add(factory.tuple("State$7").product(factory.tuple("Chicken$0"))); + x14_upper.add(factory.tuple("State$7").product(factory.tuple("Grain$0"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("State$0")); + x15_upper.add(factory.tuple("State$1")); + x15_upper.add(factory.tuple("State$2")); + x15_upper.add(factory.tuple("State$3")); + x15_upper.add(factory.tuple("State$4")); + x15_upper.add(factory.tuple("State$5")); + x15_upper.add(factory.tuple("State$6")); + x15_upper.add(factory.tuple("State$7")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$0").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$1").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$2").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$3").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$4").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$5").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$6").product(factory.tuple("State$7"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$0"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$1"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$2"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$3"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$4"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$5"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$6"))); + x16_upper.add(factory.tuple("State$7").product(factory.tuple("State$7"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("State$0")); + x17_upper.add(factory.tuple("State$1")); + x17_upper.add(factory.tuple("State$2")); + x17_upper.add(factory.tuple("State$3")); + x17_upper.add(factory.tuple("State$4")); + x17_upper.add(factory.tuple("State$5")); + x17_upper.add(factory.tuple("State$6")); + x17_upper.add(factory.tuple("State$7")); + bounds.bound(x17, x17_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x20=x6.intersection(x7); + Formula x19=x20.no(); + Expression x23=x6.union(x7); + Expression x22=x23.intersection(x8); + Formula x21=x22.no(); + Expression x26=x23.union(x8); + Expression x25=x26.intersection(x9); + Formula x24=x25.no(); + Variable x29=Variable.unary("solvePuzzle_this"); + Expression x30=x26.union(x9); + Decls x28=x29.oneOf(x30); + Expression x32=x29.join(x12); + Formula x31=x32.in(x30); + Formula x27=x31.forAll(x28); + Expression x34=x12.join(Expression.UNIV); + Formula x33=x34.in(x30); + Variable x38=Variable.unary("solvePuzzle_this"); + Decls x37=x38.oneOf(x10); + Expression x40=x38.join(x13); + Formula x39=x40.in(x30); + Formula x36=x39.forAll(x37); + Expression x42=x13.join(Expression.UNIV); + Formula x41=x42.in(x10); + Variable x45=Variable.unary("solvePuzzle_this"); + Decls x44=x45.oneOf(x10); + Expression x47=x45.join(x14); + Formula x46=x47.in(x30); + Formula x43=x46.forAll(x44); + Expression x49=x14.join(Expression.UNIV); + Formula x48=x49.in(x10); + Expression x52=x11.product(x15); + Expression x51=x11.join(x52); + Formula x50=x51.in(x10); + Expression x55=x11.product(x16); + Expression x54=x11.join(x55); + Expression x56=x10.product(x10); + Formula x53=x54.in(x56); + Formula x57=x16.totalOrder(x10,x15,x17); + Expression x60=x7.product(x8); + Expression x61=x8.product(x9); + Expression x59=x60.union(x61); + Formula x58=x12.eq(x59); + Expression x64=x15.join(x13); + Formula x63=x64.eq(x30); + Expression x66=x15.join(x14); + Formula x65=x66.no(); + Formula x62=x63.and(x65); + Variable x70=Variable.unary("solvePuzzle_s"); + Decls x69=x70.oneOf(x10); + Variable x72=Variable.unary("solvePuzzle_s'"); + Expression x73=x70.join(x16); + Decls x71=x72.oneOf(x73); + Decls x68=x69.and(x71); + Expression x77=x70.join(x13); + Formula x76=x6.in(x77); + Expression x81=x72.join(x13); + Expression x84=x70.join(x13); + Expression x83=x84.difference(x6); + Expression x85=x81.join(x12); + Expression x82=x83.difference(x85); + Formula x80=x81.eq(x82); + Expression x87=x72.join(x14); + Expression x89=x70.join(x14); + Expression x88=x89.union(x6); + Formula x86=x87.eq(x88); + Formula x79=x80.and(x86); + Variable x93=Variable.unary("crossRiver_x"); + Expression x94=x84.difference(x6); + Decls x92=x93.oneOf(x94); + Expression x99=x84.difference(x6); + Expression x98=x99.difference(x93); + Expression x100=x81.join(x12); + Expression x97=x98.difference(x100); + Formula x96=x81.eq(x97); + Expression x103=x89.union(x6); + Expression x102=x103.union(x93); + Formula x101=x87.eq(x102); + Formula x95=x96.and(x101); + Expression x91=x95.comprehension(x92); + Formula x90=x91.one(); + Formula x78=x79.or(x90); + Formula x75=x76.implies(x78); + Formula x105=x76.not(); + Expression x109=x72.join(x14); + Expression x112=x70.join(x14); + Expression x111=x112.difference(x6); + Expression x113=x109.join(x12); + Expression x110=x111.difference(x113); + Formula x108=x109.eq(x110); + Expression x115=x72.join(x13); + Expression x117=x70.join(x13); + Expression x116=x117.union(x6); + Formula x114=x115.eq(x116); + Formula x107=x108.and(x114); + Variable x121=Variable.unary("crossRiver_x"); + Expression x122=x112.difference(x6); + Decls x120=x121.oneOf(x122); + Expression x127=x112.difference(x6); + Expression x126=x127.difference(x121); + Expression x128=x109.join(x12); + Expression x125=x126.difference(x128); + Formula x124=x109.eq(x125); + Expression x131=x117.union(x6); + Expression x130=x131.union(x121); + Formula x129=x115.eq(x130); + Formula x123=x124.and(x129); + Expression x119=x123.comprehension(x120); + Formula x118=x119.one(); + Formula x106=x107.or(x118); + Formula x104=x105.implies(x106); + Formula x74=x75.and(x104); + Formula x67=x74.forAll(x68); + Expression x135=x16.join(x10); + Expression x134=x10.difference(x135); + Expression x133=x134.join(x14); + Formula x132=x133.eq(x30); + Formula x136=x0.eq(x0); + Formula x137=x1.eq(x1); + Formula x138=x2.eq(x2); + Formula x139=x3.eq(x3); + Formula x140=x4.eq(x4); + Formula x141=x5.eq(x5); + Formula x142=x6.eq(x6); + Formula x143=x7.eq(x7); + Formula x144=x8.eq(x8); + Formula x145=x9.eq(x9); + Formula x146=x10.eq(x10); + Formula x147=x11.eq(x11); + Formula x148=x12.eq(x12); + Formula x149=x13.eq(x13); + Formula x150=x14.eq(x14); + Formula x151=x15.eq(x15); + Formula x152=x16.eq(x16); + Formula x153=x17.eq(x17); + Formula x18=Formula.compose(FormulaOperator.AND, x19, x21, x24, x27, x33, x36, x41, x43, x48, x50, x53, x57, x58, x62, x67, x132, x136, x137, x138, x139, x140, x141, x142, x143, x144, x145, x146, x147, x148, x149, x150, x151, x152, x153); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x18,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP10Run.java b/Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP10Run.java new file mode 100644 index 0000000..d746a1a --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP10Run.java @@ -0,0 +1,493 @@ +package kodkod.examples.models.puzzle.halmosHandshake; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "handshake", + Note = "", + IsCheck =false, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 1, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 2, + Additions = 0, + Subtractions = 0, + Comparison = 8, + OrderedRelations = 0, + Constraints = 9 +) + + +public final class handshakeP10Run { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Jocelyn"); + Relation x7 = Relation.unary("this/Hilary"); + Relation x8 = Relation.unary("this/Person remainder"); + Relation x9 = Relation.nary("this/Person.spouse", 2); + Relation x10 = Relation.nary("this/Person.shaken", 2); + + List atomlist = Arrays.asList( + "-1", "-10", "-11", "-12", "-13", + "-14", "-15", "-16", "-2", "-3", "-4", + "-5", "-6", "-7", "-8", "-9", "0", + "1", "10", "11", "12", "13", "14", + "15", "2", "3", "4", "5", "6", + "7", "8", "9", "Hilary$0", "Jocelyn$0", "Person$0", + "Person$1", "Person$2", "Person$3", "Person$4", "Person$5", "Person$6", + "Person$7" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-16")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("15")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-16").product(factory.tuple("-15"))); + x3_upper.add(factory.tuple("-15").product(factory.tuple("-14"))); + x3_upper.add(factory.tuple("-14").product(factory.tuple("-13"))); + x3_upper.add(factory.tuple("-13").product(factory.tuple("-12"))); + x3_upper.add(factory.tuple("-12").product(factory.tuple("-11"))); + x3_upper.add(factory.tuple("-11").product(factory.tuple("-10"))); + x3_upper.add(factory.tuple("-10").product(factory.tuple("-9"))); + x3_upper.add(factory.tuple("-9").product(factory.tuple("-8"))); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + x3_upper.add(factory.tuple("7").product(factory.tuple("8"))); + x3_upper.add(factory.tuple("8").product(factory.tuple("9"))); + x3_upper.add(factory.tuple("9").product(factory.tuple("10"))); + x3_upper.add(factory.tuple("10").product(factory.tuple("11"))); + x3_upper.add(factory.tuple("11").product(factory.tuple("12"))); + x3_upper.add(factory.tuple("12").product(factory.tuple("13"))); + x3_upper.add(factory.tuple("13").product(factory.tuple("14"))); + x3_upper.add(factory.tuple("14").product(factory.tuple("15"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Jocelyn$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Hilary$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Person$0")); + x8_upper.add(factory.tuple("Person$1")); + x8_upper.add(factory.tuple("Person$2")); + x8_upper.add(factory.tuple("Person$3")); + x8_upper.add(factory.tuple("Person$4")); + x8_upper.add(factory.tuple("Person$5")); + x8_upper.add(factory.tuple("Person$6")); + x8_upper.add(factory.tuple("Person$7")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$7"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$7"))); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-16,factory.range(factory.tuple("-16"),factory.tuple("-16"))); + bounds.boundExactly(-15,factory.range(factory.tuple("-15"),factory.tuple("-15"))); + bounds.boundExactly(-14,factory.range(factory.tuple("-14"),factory.tuple("-14"))); + bounds.boundExactly(-13,factory.range(factory.tuple("-13"),factory.tuple("-13"))); + bounds.boundExactly(-12,factory.range(factory.tuple("-12"),factory.tuple("-12"))); + bounds.boundExactly(-11,factory.range(factory.tuple("-11"),factory.tuple("-11"))); + bounds.boundExactly(-10,factory.range(factory.tuple("-10"),factory.tuple("-10"))); + bounds.boundExactly(-9,factory.range(factory.tuple("-9"),factory.tuple("-9"))); + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + bounds.boundExactly(8,factory.range(factory.tuple("8"),factory.tuple("8"))); + bounds.boundExactly(9,factory.range(factory.tuple("9"),factory.tuple("9"))); + bounds.boundExactly(10,factory.range(factory.tuple("10"),factory.tuple("10"))); + bounds.boundExactly(11,factory.range(factory.tuple("11"),factory.tuple("11"))); + bounds.boundExactly(12,factory.range(factory.tuple("12"),factory.tuple("12"))); + bounds.boundExactly(13,factory.range(factory.tuple("13"),factory.tuple("13"))); + bounds.boundExactly(14,factory.range(factory.tuple("14"),factory.tuple("14"))); + bounds.boundExactly(15,factory.range(factory.tuple("15"),factory.tuple("15"))); + + Expression x13=x6.intersection(x7); + Formula x12=x13.no(); + Variable x16=Variable.unary("P10_this"); + Expression x18=x6.union(x7); + Expression x17=x18.union(x8); + Decls x15=x16.oneOf(x17); + Expression x21=x16.join(x9); + Formula x20=x21.one(); + Formula x22=x21.in(x17); + Formula x19=x20.and(x22); + Formula x14=x19.forAll(x15); + Expression x24=x9.join(Expression.UNIV); + Formula x23=x24.in(x17); + Variable x28=Variable.unary("P10_this"); + Decls x27=x28.oneOf(x17); + Expression x30=x28.join(x10); + Formula x29=x30.in(x17); + Formula x26=x29.forAll(x27); + Expression x32=x10.join(Expression.UNIV); + Formula x31=x32.in(x17); + Variable x35=Variable.unary("P10_p"); + Decls x34=x35.oneOf(x17); + Expression x39=x35.join(x9); + Expression x38=x35.union(x39); + Expression x40=x35.join(x10); + Expression x37=x38.intersection(x40); + Formula x36=x37.no(); + Formula x33=x36.forAll(x34); + Variable x44=Variable.unary("P10_p"); + Decls x43=x44.oneOf(x17); + Variable x46=Variable.unary("P10_q"); + Decls x45=x46.oneOf(x17); + Decls x42=x43.and(x45); + Expression x50=x46.join(x10); + Formula x49=x44.in(x50); + Formula x48=x49.not(); + Expression x52=x44.join(x10); + Formula x51=x46.in(x52); + Formula x47=x48.or(x51); + Formula x41=x47.forAll(x42); + Variable x56=Variable.unary("P10_p"); + Decls x55=x56.oneOf(x17); + Variable x58=Variable.unary("P10_q"); + Decls x57=x58.oneOf(x17); + Decls x54=x55.and(x57); + Formula x62=x56.eq(x58); + Formula x61=x62.not(); + Formula x60=x61.not(); + Expression x67=x56.join(x9); + Formula x66=x67.eq(x58); + Formula x65=x66.not(); + Expression x69=x58.join(x9); + Formula x68=x69.eq(x56); + Formula x64=x65.or(x68); + Expression x72=x56.join(x9); + Expression x73=x58.join(x9); + Formula x71=x72.eq(x73); + Formula x70=x71.not(); + Formula x63=x64.and(x70); + Formula x59=x60.or(x63); + Formula x53=x59.forAll(x54); + Variable x76=Variable.unary("P10_p"); + Decls x75=x76.oneOf(x17); + Expression x80=x76.join(x9); + Expression x79=x80.join(x9); + Formula x78=x79.eq(x76); + Expression x83=x76.join(x9); + Formula x82=x76.eq(x83); + Formula x81=x82.not(); + Formula x77=x78.and(x81); + Formula x74=x77.forAll(x75); + Variable x87=Variable.unary("P10_p"); + Expression x88=x17.difference(x6); + Decls x86=x87.oneOf(x88); + Variable x90=Variable.unary("P10_q"); + Decls x89=x90.oneOf(x88); + Decls x85=x86.and(x89); + Formula x94=x87.eq(x90); + Formula x93=x94.not(); + Formula x92=x93.not(); + Expression x98=x87.join(x10); + IntExpression x97=x98.count(); + Expression x100=x90.join(x10); + IntExpression x99=x100.count(); + Formula x96=x97.eq(x99); + Formula x95=x96.not(); + Formula x91=x92.or(x95); + Formula x84=x91.forAll(x85); + Expression x102=x7.join(x9); + Formula x101=x102.eq(x6); + Formula x103=x0.eq(x0); + Formula x104=x1.eq(x1); + Formula x105=x2.eq(x2); + Formula x106=x3.eq(x3); + Formula x107=x4.eq(x4); + Formula x108=x5.eq(x5); + Formula x109=x6.eq(x6); + Formula x110=x7.eq(x7); + Formula x111=x8.eq(x8); + Formula x112=x9.eq(x9); + Formula x113=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x14, x23, x26, x31, x33, x41, x53, x74, x84, x101, x103, x104, x105, x106, x107, x108, x109, x110, x111, x112, x113); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(5); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP12Run.java b/Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP12Run.java new file mode 100644 index 0000000..663c014 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP12Run.java @@ -0,0 +1,583 @@ +package kodkod.examples.models.puzzle.halmosHandshake; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "handshake", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 1, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 2, + Additions = 0, + Subtractions = 0, + Comparison = 8, + OrderedRelations = 0, + Constraints = 9 +) + + +public final class handshakeP12Run { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Jocelyn"); + Relation x7 = Relation.unary("this/Hilary"); + Relation x8 = Relation.unary("this/Person remainder"); + Relation x9 = Relation.nary("this/Person.spouse", 2); + Relation x10 = Relation.nary("this/Person.shaken", 2); + + List atomlist = Arrays.asList( + "-1", "-10", "-11", "-12", "-13", + "-14", "-15", "-16", "-2", "-3", "-4", + "-5", "-6", "-7", "-8", "-9", "0", + "1", "10", "11", "12", "13", "14", + "15", "2", "3", "4", "5", "6", + "7", "8", "9", "Hilary$0", "Jocelyn$0", "Person$0", + "Person$1", "Person$2", "Person$3", "Person$4", "Person$5", "Person$6", + "Person$7", "Person$8", "Person$9" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-16")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("15")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-16").product(factory.tuple("-15"))); + x3_upper.add(factory.tuple("-15").product(factory.tuple("-14"))); + x3_upper.add(factory.tuple("-14").product(factory.tuple("-13"))); + x3_upper.add(factory.tuple("-13").product(factory.tuple("-12"))); + x3_upper.add(factory.tuple("-12").product(factory.tuple("-11"))); + x3_upper.add(factory.tuple("-11").product(factory.tuple("-10"))); + x3_upper.add(factory.tuple("-10").product(factory.tuple("-9"))); + x3_upper.add(factory.tuple("-9").product(factory.tuple("-8"))); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + x3_upper.add(factory.tuple("7").product(factory.tuple("8"))); + x3_upper.add(factory.tuple("8").product(factory.tuple("9"))); + x3_upper.add(factory.tuple("9").product(factory.tuple("10"))); + x3_upper.add(factory.tuple("10").product(factory.tuple("11"))); + x3_upper.add(factory.tuple("11").product(factory.tuple("12"))); + x3_upper.add(factory.tuple("12").product(factory.tuple("13"))); + x3_upper.add(factory.tuple("13").product(factory.tuple("14"))); + x3_upper.add(factory.tuple("14").product(factory.tuple("15"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Jocelyn$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Hilary$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Person$0")); + x8_upper.add(factory.tuple("Person$1")); + x8_upper.add(factory.tuple("Person$2")); + x8_upper.add(factory.tuple("Person$3")); + x8_upper.add(factory.tuple("Person$4")); + x8_upper.add(factory.tuple("Person$5")); + x8_upper.add(factory.tuple("Person$6")); + x8_upper.add(factory.tuple("Person$7")); + x8_upper.add(factory.tuple("Person$8")); + x8_upper.add(factory.tuple("Person$9")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$9"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$9"))); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-16,factory.range(factory.tuple("-16"),factory.tuple("-16"))); + bounds.boundExactly(-15,factory.range(factory.tuple("-15"),factory.tuple("-15"))); + bounds.boundExactly(-14,factory.range(factory.tuple("-14"),factory.tuple("-14"))); + bounds.boundExactly(-13,factory.range(factory.tuple("-13"),factory.tuple("-13"))); + bounds.boundExactly(-12,factory.range(factory.tuple("-12"),factory.tuple("-12"))); + bounds.boundExactly(-11,factory.range(factory.tuple("-11"),factory.tuple("-11"))); + bounds.boundExactly(-10,factory.range(factory.tuple("-10"),factory.tuple("-10"))); + bounds.boundExactly(-9,factory.range(factory.tuple("-9"),factory.tuple("-9"))); + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + bounds.boundExactly(8,factory.range(factory.tuple("8"),factory.tuple("8"))); + bounds.boundExactly(9,factory.range(factory.tuple("9"),factory.tuple("9"))); + bounds.boundExactly(10,factory.range(factory.tuple("10"),factory.tuple("10"))); + bounds.boundExactly(11,factory.range(factory.tuple("11"),factory.tuple("11"))); + bounds.boundExactly(12,factory.range(factory.tuple("12"),factory.tuple("12"))); + bounds.boundExactly(13,factory.range(factory.tuple("13"),factory.tuple("13"))); + bounds.boundExactly(14,factory.range(factory.tuple("14"),factory.tuple("14"))); + bounds.boundExactly(15,factory.range(factory.tuple("15"),factory.tuple("15"))); + + Expression x13=x6.intersection(x7); + Formula x12=x13.no(); + Variable x16=Variable.unary("P12_this"); + Expression x18=x6.union(x7); + Expression x17=x18.union(x8); + Decls x15=x16.oneOf(x17); + Expression x21=x16.join(x9); + Formula x20=x21.one(); + Formula x22=x21.in(x17); + Formula x19=x20.and(x22); + Formula x14=x19.forAll(x15); + Expression x24=x9.join(Expression.UNIV); + Formula x23=x24.in(x17); + Variable x28=Variable.unary("P12_this"); + Decls x27=x28.oneOf(x17); + Expression x30=x28.join(x10); + Formula x29=x30.in(x17); + Formula x26=x29.forAll(x27); + Expression x32=x10.join(Expression.UNIV); + Formula x31=x32.in(x17); + Variable x35=Variable.unary("P12_p"); + Decls x34=x35.oneOf(x17); + Expression x39=x35.join(x9); + Expression x38=x35.union(x39); + Expression x40=x35.join(x10); + Expression x37=x38.intersection(x40); + Formula x36=x37.no(); + Formula x33=x36.forAll(x34); + Variable x44=Variable.unary("P12_p"); + Decls x43=x44.oneOf(x17); + Variable x46=Variable.unary("P12_q"); + Decls x45=x46.oneOf(x17); + Decls x42=x43.and(x45); + Expression x50=x46.join(x10); + Formula x49=x44.in(x50); + Formula x48=x49.not(); + Expression x52=x44.join(x10); + Formula x51=x46.in(x52); + Formula x47=x48.or(x51); + Formula x41=x47.forAll(x42); + Variable x56=Variable.unary("P12_p"); + Decls x55=x56.oneOf(x17); + Variable x58=Variable.unary("P12_q"); + Decls x57=x58.oneOf(x17); + Decls x54=x55.and(x57); + Formula x62=x56.eq(x58); + Formula x61=x62.not(); + Formula x60=x61.not(); + Expression x67=x56.join(x9); + Formula x66=x67.eq(x58); + Formula x65=x66.not(); + Expression x69=x58.join(x9); + Formula x68=x69.eq(x56); + Formula x64=x65.or(x68); + Expression x72=x56.join(x9); + Expression x73=x58.join(x9); + Formula x71=x72.eq(x73); + Formula x70=x71.not(); + Formula x63=x64.and(x70); + Formula x59=x60.or(x63); + Formula x53=x59.forAll(x54); + Variable x76=Variable.unary("P12_p"); + Decls x75=x76.oneOf(x17); + Expression x80=x76.join(x9); + Expression x79=x80.join(x9); + Formula x78=x79.eq(x76); + Expression x83=x76.join(x9); + Formula x82=x76.eq(x83); + Formula x81=x82.not(); + Formula x77=x78.and(x81); + Formula x74=x77.forAll(x75); + Variable x87=Variable.unary("P12_p"); + Expression x88=x17.difference(x6); + Decls x86=x87.oneOf(x88); + Variable x90=Variable.unary("P12_q"); + Decls x89=x90.oneOf(x88); + Decls x85=x86.and(x89); + Formula x94=x87.eq(x90); + Formula x93=x94.not(); + Formula x92=x93.not(); + Expression x98=x87.join(x10); + IntExpression x97=x98.count(); + Expression x100=x90.join(x10); + IntExpression x99=x100.count(); + Formula x96=x97.eq(x99); + Formula x95=x96.not(); + Formula x91=x92.or(x95); + Formula x84=x91.forAll(x85); + Expression x102=x7.join(x9); + Formula x101=x102.eq(x6); + Formula x103=x0.eq(x0); + Formula x104=x1.eq(x1); + Formula x105=x2.eq(x2); + Formula x106=x3.eq(x3); + Formula x107=x4.eq(x4); + Formula x108=x5.eq(x5); + Formula x109=x6.eq(x6); + Formula x110=x7.eq(x7); + Formula x111=x8.eq(x8); + Formula x112=x9.eq(x9); + Formula x113=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x14, x23, x26, x31, x33, x41, x53, x74, x84, x101, x103, x104, x105, x106, x107, x108, x109, x110, x111, x112, x113); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(5); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP14Run.java b/Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP14Run.java new file mode 100644 index 0000000..4b00f58 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP14Run.java @@ -0,0 +1,689 @@ +package kodkod.examples.models.puzzle.halmosHandshake; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "handshake", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 1, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 2, + Additions = 0, + Subtractions = 0, + Comparison = 8, + OrderedRelations = 0, + Constraints = 9 +) + + +public final class handshakeP14Run { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Jocelyn"); + Relation x7 = Relation.unary("this/Hilary"); + Relation x8 = Relation.unary("this/Person remainder"); + Relation x9 = Relation.nary("this/Person.spouse", 2); + Relation x10 = Relation.nary("this/Person.shaken", 2); + + List atomlist = Arrays.asList( + "-1", "-10", "-11", "-12", "-13", + "-14", "-15", "-16", "-2", "-3", "-4", + "-5", "-6", "-7", "-8", "-9", "0", + "1", "10", "11", "12", "13", "14", + "15", "2", "3", "4", "5", "6", + "7", "8", "9", "Hilary$0", "Jocelyn$0", "Person$0", + "Person$1", "Person$10", "Person$11", "Person$2", "Person$3", "Person$4", + "Person$5", "Person$6", "Person$7", "Person$8", "Person$9" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-16")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("15")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-16").product(factory.tuple("-15"))); + x3_upper.add(factory.tuple("-15").product(factory.tuple("-14"))); + x3_upper.add(factory.tuple("-14").product(factory.tuple("-13"))); + x3_upper.add(factory.tuple("-13").product(factory.tuple("-12"))); + x3_upper.add(factory.tuple("-12").product(factory.tuple("-11"))); + x3_upper.add(factory.tuple("-11").product(factory.tuple("-10"))); + x3_upper.add(factory.tuple("-10").product(factory.tuple("-9"))); + x3_upper.add(factory.tuple("-9").product(factory.tuple("-8"))); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + x3_upper.add(factory.tuple("7").product(factory.tuple("8"))); + x3_upper.add(factory.tuple("8").product(factory.tuple("9"))); + x3_upper.add(factory.tuple("9").product(factory.tuple("10"))); + x3_upper.add(factory.tuple("10").product(factory.tuple("11"))); + x3_upper.add(factory.tuple("11").product(factory.tuple("12"))); + x3_upper.add(factory.tuple("12").product(factory.tuple("13"))); + x3_upper.add(factory.tuple("13").product(factory.tuple("14"))); + x3_upper.add(factory.tuple("14").product(factory.tuple("15"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Jocelyn$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Hilary$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Person$0")); + x8_upper.add(factory.tuple("Person$1")); + x8_upper.add(factory.tuple("Person$2")); + x8_upper.add(factory.tuple("Person$3")); + x8_upper.add(factory.tuple("Person$4")); + x8_upper.add(factory.tuple("Person$5")); + x8_upper.add(factory.tuple("Person$6")); + x8_upper.add(factory.tuple("Person$7")); + x8_upper.add(factory.tuple("Person$8")); + x8_upper.add(factory.tuple("Person$9")); + x8_upper.add(factory.tuple("Person$10")); + x8_upper.add(factory.tuple("Person$11")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$11"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$11"))); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-16,factory.range(factory.tuple("-16"),factory.tuple("-16"))); + bounds.boundExactly(-15,factory.range(factory.tuple("-15"),factory.tuple("-15"))); + bounds.boundExactly(-14,factory.range(factory.tuple("-14"),factory.tuple("-14"))); + bounds.boundExactly(-13,factory.range(factory.tuple("-13"),factory.tuple("-13"))); + bounds.boundExactly(-12,factory.range(factory.tuple("-12"),factory.tuple("-12"))); + bounds.boundExactly(-11,factory.range(factory.tuple("-11"),factory.tuple("-11"))); + bounds.boundExactly(-10,factory.range(factory.tuple("-10"),factory.tuple("-10"))); + bounds.boundExactly(-9,factory.range(factory.tuple("-9"),factory.tuple("-9"))); + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + bounds.boundExactly(8,factory.range(factory.tuple("8"),factory.tuple("8"))); + bounds.boundExactly(9,factory.range(factory.tuple("9"),factory.tuple("9"))); + bounds.boundExactly(10,factory.range(factory.tuple("10"),factory.tuple("10"))); + bounds.boundExactly(11,factory.range(factory.tuple("11"),factory.tuple("11"))); + bounds.boundExactly(12,factory.range(factory.tuple("12"),factory.tuple("12"))); + bounds.boundExactly(13,factory.range(factory.tuple("13"),factory.tuple("13"))); + bounds.boundExactly(14,factory.range(factory.tuple("14"),factory.tuple("14"))); + bounds.boundExactly(15,factory.range(factory.tuple("15"),factory.tuple("15"))); + + Expression x13=x6.intersection(x7); + Formula x12=x13.no(); + Variable x16=Variable.unary("P14_this"); + Expression x18=x6.union(x7); + Expression x17=x18.union(x8); + Decls x15=x16.oneOf(x17); + Expression x21=x16.join(x9); + Formula x20=x21.one(); + Formula x22=x21.in(x17); + Formula x19=x20.and(x22); + Formula x14=x19.forAll(x15); + Expression x24=x9.join(Expression.UNIV); + Formula x23=x24.in(x17); + Variable x28=Variable.unary("P14_this"); + Decls x27=x28.oneOf(x17); + Expression x30=x28.join(x10); + Formula x29=x30.in(x17); + Formula x26=x29.forAll(x27); + Expression x32=x10.join(Expression.UNIV); + Formula x31=x32.in(x17); + Variable x35=Variable.unary("P14_p"); + Decls x34=x35.oneOf(x17); + Expression x39=x35.join(x9); + Expression x38=x35.union(x39); + Expression x40=x35.join(x10); + Expression x37=x38.intersection(x40); + Formula x36=x37.no(); + Formula x33=x36.forAll(x34); + Variable x44=Variable.unary("P14_p"); + Decls x43=x44.oneOf(x17); + Variable x46=Variable.unary("P14_q"); + Decls x45=x46.oneOf(x17); + Decls x42=x43.and(x45); + Expression x50=x46.join(x10); + Formula x49=x44.in(x50); + Formula x48=x49.not(); + Expression x52=x44.join(x10); + Formula x51=x46.in(x52); + Formula x47=x48.or(x51); + Formula x41=x47.forAll(x42); + Variable x56=Variable.unary("P14_p"); + Decls x55=x56.oneOf(x17); + Variable x58=Variable.unary("P14_q"); + Decls x57=x58.oneOf(x17); + Decls x54=x55.and(x57); + Formula x62=x56.eq(x58); + Formula x61=x62.not(); + Formula x60=x61.not(); + Expression x67=x56.join(x9); + Formula x66=x67.eq(x58); + Formula x65=x66.not(); + Expression x69=x58.join(x9); + Formula x68=x69.eq(x56); + Formula x64=x65.or(x68); + Expression x72=x56.join(x9); + Expression x73=x58.join(x9); + Formula x71=x72.eq(x73); + Formula x70=x71.not(); + Formula x63=x64.and(x70); + Formula x59=x60.or(x63); + Formula x53=x59.forAll(x54); + Variable x76=Variable.unary("P14_p"); + Decls x75=x76.oneOf(x17); + Expression x80=x76.join(x9); + Expression x79=x80.join(x9); + Formula x78=x79.eq(x76); + Expression x83=x76.join(x9); + Formula x82=x76.eq(x83); + Formula x81=x82.not(); + Formula x77=x78.and(x81); + Formula x74=x77.forAll(x75); + Variable x87=Variable.unary("P14_p"); + Expression x88=x17.difference(x6); + Decls x86=x87.oneOf(x88); + Variable x90=Variable.unary("P14_q"); + Decls x89=x90.oneOf(x88); + Decls x85=x86.and(x89); + Formula x94=x87.eq(x90); + Formula x93=x94.not(); + Formula x92=x93.not(); + Expression x98=x87.join(x10); + IntExpression x97=x98.count(); + Expression x100=x90.join(x10); + IntExpression x99=x100.count(); + Formula x96=x97.eq(x99); + Formula x95=x96.not(); + Formula x91=x92.or(x95); + Formula x84=x91.forAll(x85); + Expression x102=x7.join(x9); + Formula x101=x102.eq(x6); + Formula x103=x0.eq(x0); + Formula x104=x1.eq(x1); + Formula x105=x2.eq(x2); + Formula x106=x3.eq(x3); + Formula x107=x4.eq(x4); + Formula x108=x5.eq(x5); + Formula x109=x6.eq(x6); + Formula x110=x7.eq(x7); + Formula x111=x8.eq(x8); + Formula x112=x9.eq(x9); + Formula x113=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x14, x23, x26, x31, x33, x41, x53, x74, x84, x101, x103, x104, x105, x106, x107, x108, x109, x110, x111, x112, x113); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(5); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP16Run.java b/Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP16Run.java new file mode 100644 index 0000000..8ede2cb --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/puzzle/halmosHandshake/handshakeP16Run.java @@ -0,0 +1,881 @@ +package kodkod.examples.models.puzzle.halmosHandshake; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "handshake", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 1, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 2, + Additions = 0, + Subtractions = 0, + Comparison = 8, + OrderedRelations = 0, + Constraints = 9 +) + + +public final class handshakeP16Run { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Jocelyn"); + Relation x7 = Relation.unary("this/Hilary"); + Relation x8 = Relation.unary("this/Person remainder"); + Relation x9 = Relation.nary("this/Person.spouse", 2); + Relation x10 = Relation.nary("this/Person.shaken", 2); + + List atomlist = Arrays.asList( + "-1", "-10", "-11", "-12", "-13", + "-14", "-15", "-16", "-17", "-18", "-19", + "-2", "-20", "-21", "-22", "-23", "-24", + "-25", "-26", "-27", "-28", "-29", "-3", + "-30", "-31", "-32", "-4", "-5", "-6", + "-7", "-8", "-9", "0", "1", "10", + "11", "12", "13", "14", "15", "16", + "17", "18", "19", "2", "20", "21", + "22", "23", "24", "25", "26", "27", + "28", "29", "3", "30", "31", "4", + "5", "6", "7", "8", "9", "Hilary$0", + "Jocelyn$0", "Person$0", "Person$1", "Person$10", "Person$11", "Person$12", + "Person$13", "Person$2", "Person$3", "Person$4", "Person$5", "Person$6", + "Person$7", "Person$8", "Person$9" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-32")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("31")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-32").product(factory.tuple("-31"))); + x3_upper.add(factory.tuple("-31").product(factory.tuple("-30"))); + x3_upper.add(factory.tuple("-30").product(factory.tuple("-29"))); + x3_upper.add(factory.tuple("-29").product(factory.tuple("-28"))); + x3_upper.add(factory.tuple("-28").product(factory.tuple("-27"))); + x3_upper.add(factory.tuple("-27").product(factory.tuple("-26"))); + x3_upper.add(factory.tuple("-26").product(factory.tuple("-25"))); + x3_upper.add(factory.tuple("-25").product(factory.tuple("-24"))); + x3_upper.add(factory.tuple("-24").product(factory.tuple("-23"))); + x3_upper.add(factory.tuple("-23").product(factory.tuple("-22"))); + x3_upper.add(factory.tuple("-22").product(factory.tuple("-21"))); + x3_upper.add(factory.tuple("-21").product(factory.tuple("-20"))); + x3_upper.add(factory.tuple("-20").product(factory.tuple("-19"))); + x3_upper.add(factory.tuple("-19").product(factory.tuple("-18"))); + x3_upper.add(factory.tuple("-18").product(factory.tuple("-17"))); + x3_upper.add(factory.tuple("-17").product(factory.tuple("-16"))); + x3_upper.add(factory.tuple("-16").product(factory.tuple("-15"))); + x3_upper.add(factory.tuple("-15").product(factory.tuple("-14"))); + x3_upper.add(factory.tuple("-14").product(factory.tuple("-13"))); + x3_upper.add(factory.tuple("-13").product(factory.tuple("-12"))); + x3_upper.add(factory.tuple("-12").product(factory.tuple("-11"))); + x3_upper.add(factory.tuple("-11").product(factory.tuple("-10"))); + x3_upper.add(factory.tuple("-10").product(factory.tuple("-9"))); + x3_upper.add(factory.tuple("-9").product(factory.tuple("-8"))); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + x3_upper.add(factory.tuple("7").product(factory.tuple("8"))); + x3_upper.add(factory.tuple("8").product(factory.tuple("9"))); + x3_upper.add(factory.tuple("9").product(factory.tuple("10"))); + x3_upper.add(factory.tuple("10").product(factory.tuple("11"))); + x3_upper.add(factory.tuple("11").product(factory.tuple("12"))); + x3_upper.add(factory.tuple("12").product(factory.tuple("13"))); + x3_upper.add(factory.tuple("13").product(factory.tuple("14"))); + x3_upper.add(factory.tuple("14").product(factory.tuple("15"))); + x3_upper.add(factory.tuple("15").product(factory.tuple("16"))); + x3_upper.add(factory.tuple("16").product(factory.tuple("17"))); + x3_upper.add(factory.tuple("17").product(factory.tuple("18"))); + x3_upper.add(factory.tuple("18").product(factory.tuple("19"))); + x3_upper.add(factory.tuple("19").product(factory.tuple("20"))); + x3_upper.add(factory.tuple("20").product(factory.tuple("21"))); + x3_upper.add(factory.tuple("21").product(factory.tuple("22"))); + x3_upper.add(factory.tuple("22").product(factory.tuple("23"))); + x3_upper.add(factory.tuple("23").product(factory.tuple("24"))); + x3_upper.add(factory.tuple("24").product(factory.tuple("25"))); + x3_upper.add(factory.tuple("25").product(factory.tuple("26"))); + x3_upper.add(factory.tuple("26").product(factory.tuple("27"))); + x3_upper.add(factory.tuple("27").product(factory.tuple("28"))); + x3_upper.add(factory.tuple("28").product(factory.tuple("29"))); + x3_upper.add(factory.tuple("29").product(factory.tuple("30"))); + x3_upper.add(factory.tuple("30").product(factory.tuple("31"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Jocelyn$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Hilary$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Person$0")); + x8_upper.add(factory.tuple("Person$1")); + x8_upper.add(factory.tuple("Person$2")); + x8_upper.add(factory.tuple("Person$3")); + x8_upper.add(factory.tuple("Person$4")); + x8_upper.add(factory.tuple("Person$5")); + x8_upper.add(factory.tuple("Person$6")); + x8_upper.add(factory.tuple("Person$7")); + x8_upper.add(factory.tuple("Person$8")); + x8_upper.add(factory.tuple("Person$9")); + x8_upper.add(factory.tuple("Person$10")); + x8_upper.add(factory.tuple("Person$11")); + x8_upper.add(factory.tuple("Person$12")); + x8_upper.add(factory.tuple("Person$13")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$13"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Jocelyn$0"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Hilary$0"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$4"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$5"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$6"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$7"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$8"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$9"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$10"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$11"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$12"))); + x9_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$13"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Jocelyn$0").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Hilary$0").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$4").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$5").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$6").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$7").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$8").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$9").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$10").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$11").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$12").product(factory.tuple("Person$13"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Jocelyn$0"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Hilary$0"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$4"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$5"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$6"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$7"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$8"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$9"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$10"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$11"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$12"))); + x10_upper.add(factory.tuple("Person$13").product(factory.tuple("Person$13"))); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-32,factory.range(factory.tuple("-32"),factory.tuple("-32"))); + bounds.boundExactly(-31,factory.range(factory.tuple("-31"),factory.tuple("-31"))); + bounds.boundExactly(-30,factory.range(factory.tuple("-30"),factory.tuple("-30"))); + bounds.boundExactly(-29,factory.range(factory.tuple("-29"),factory.tuple("-29"))); + bounds.boundExactly(-28,factory.range(factory.tuple("-28"),factory.tuple("-28"))); + bounds.boundExactly(-27,factory.range(factory.tuple("-27"),factory.tuple("-27"))); + bounds.boundExactly(-26,factory.range(factory.tuple("-26"),factory.tuple("-26"))); + bounds.boundExactly(-25,factory.range(factory.tuple("-25"),factory.tuple("-25"))); + bounds.boundExactly(-24,factory.range(factory.tuple("-24"),factory.tuple("-24"))); + bounds.boundExactly(-23,factory.range(factory.tuple("-23"),factory.tuple("-23"))); + bounds.boundExactly(-22,factory.range(factory.tuple("-22"),factory.tuple("-22"))); + bounds.boundExactly(-21,factory.range(factory.tuple("-21"),factory.tuple("-21"))); + bounds.boundExactly(-20,factory.range(factory.tuple("-20"),factory.tuple("-20"))); + bounds.boundExactly(-19,factory.range(factory.tuple("-19"),factory.tuple("-19"))); + bounds.boundExactly(-18,factory.range(factory.tuple("-18"),factory.tuple("-18"))); + bounds.boundExactly(-17,factory.range(factory.tuple("-17"),factory.tuple("-17"))); + bounds.boundExactly(-16,factory.range(factory.tuple("-16"),factory.tuple("-16"))); + bounds.boundExactly(-15,factory.range(factory.tuple("-15"),factory.tuple("-15"))); + bounds.boundExactly(-14,factory.range(factory.tuple("-14"),factory.tuple("-14"))); + bounds.boundExactly(-13,factory.range(factory.tuple("-13"),factory.tuple("-13"))); + bounds.boundExactly(-12,factory.range(factory.tuple("-12"),factory.tuple("-12"))); + bounds.boundExactly(-11,factory.range(factory.tuple("-11"),factory.tuple("-11"))); + bounds.boundExactly(-10,factory.range(factory.tuple("-10"),factory.tuple("-10"))); + bounds.boundExactly(-9,factory.range(factory.tuple("-9"),factory.tuple("-9"))); + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + bounds.boundExactly(8,factory.range(factory.tuple("8"),factory.tuple("8"))); + bounds.boundExactly(9,factory.range(factory.tuple("9"),factory.tuple("9"))); + bounds.boundExactly(10,factory.range(factory.tuple("10"),factory.tuple("10"))); + bounds.boundExactly(11,factory.range(factory.tuple("11"),factory.tuple("11"))); + bounds.boundExactly(12,factory.range(factory.tuple("12"),factory.tuple("12"))); + bounds.boundExactly(13,factory.range(factory.tuple("13"),factory.tuple("13"))); + bounds.boundExactly(14,factory.range(factory.tuple("14"),factory.tuple("14"))); + bounds.boundExactly(15,factory.range(factory.tuple("15"),factory.tuple("15"))); + bounds.boundExactly(16,factory.range(factory.tuple("16"),factory.tuple("16"))); + bounds.boundExactly(17,factory.range(factory.tuple("17"),factory.tuple("17"))); + bounds.boundExactly(18,factory.range(factory.tuple("18"),factory.tuple("18"))); + bounds.boundExactly(19,factory.range(factory.tuple("19"),factory.tuple("19"))); + bounds.boundExactly(20,factory.range(factory.tuple("20"),factory.tuple("20"))); + bounds.boundExactly(21,factory.range(factory.tuple("21"),factory.tuple("21"))); + bounds.boundExactly(22,factory.range(factory.tuple("22"),factory.tuple("22"))); + bounds.boundExactly(23,factory.range(factory.tuple("23"),factory.tuple("23"))); + bounds.boundExactly(24,factory.range(factory.tuple("24"),factory.tuple("24"))); + bounds.boundExactly(25,factory.range(factory.tuple("25"),factory.tuple("25"))); + bounds.boundExactly(26,factory.range(factory.tuple("26"),factory.tuple("26"))); + bounds.boundExactly(27,factory.range(factory.tuple("27"),factory.tuple("27"))); + bounds.boundExactly(28,factory.range(factory.tuple("28"),factory.tuple("28"))); + bounds.boundExactly(29,factory.range(factory.tuple("29"),factory.tuple("29"))); + bounds.boundExactly(30,factory.range(factory.tuple("30"),factory.tuple("30"))); + bounds.boundExactly(31,factory.range(factory.tuple("31"),factory.tuple("31"))); + + Expression x13=x6.intersection(x7); + Formula x12=x13.no(); + Variable x16=Variable.unary("P16_this"); + Expression x18=x6.union(x7); + Expression x17=x18.union(x8); + Decls x15=x16.oneOf(x17); + Expression x21=x16.join(x9); + Formula x20=x21.one(); + Formula x22=x21.in(x17); + Formula x19=x20.and(x22); + Formula x14=x19.forAll(x15); + Expression x24=x9.join(Expression.UNIV); + Formula x23=x24.in(x17); + Variable x28=Variable.unary("P16_this"); + Decls x27=x28.oneOf(x17); + Expression x30=x28.join(x10); + Formula x29=x30.in(x17); + Formula x26=x29.forAll(x27); + Expression x32=x10.join(Expression.UNIV); + Formula x31=x32.in(x17); + Variable x35=Variable.unary("P16_p"); + Decls x34=x35.oneOf(x17); + Expression x39=x35.join(x9); + Expression x38=x35.union(x39); + Expression x40=x35.join(x10); + Expression x37=x38.intersection(x40); + Formula x36=x37.no(); + Formula x33=x36.forAll(x34); + Variable x44=Variable.unary("P16_p"); + Decls x43=x44.oneOf(x17); + Variable x46=Variable.unary("P16_q"); + Decls x45=x46.oneOf(x17); + Decls x42=x43.and(x45); + Expression x50=x46.join(x10); + Formula x49=x44.in(x50); + Formula x48=x49.not(); + Expression x52=x44.join(x10); + Formula x51=x46.in(x52); + Formula x47=x48.or(x51); + Formula x41=x47.forAll(x42); + Variable x56=Variable.unary("P16_p"); + Decls x55=x56.oneOf(x17); + Variable x58=Variable.unary("P16_q"); + Decls x57=x58.oneOf(x17); + Decls x54=x55.and(x57); + Formula x62=x56.eq(x58); + Formula x61=x62.not(); + Formula x60=x61.not(); + Expression x67=x56.join(x9); + Formula x66=x67.eq(x58); + Formula x65=x66.not(); + Expression x69=x58.join(x9); + Formula x68=x69.eq(x56); + Formula x64=x65.or(x68); + Expression x72=x56.join(x9); + Expression x73=x58.join(x9); + Formula x71=x72.eq(x73); + Formula x70=x71.not(); + Formula x63=x64.and(x70); + Formula x59=x60.or(x63); + Formula x53=x59.forAll(x54); + Variable x76=Variable.unary("P16_p"); + Decls x75=x76.oneOf(x17); + Expression x80=x76.join(x9); + Expression x79=x80.join(x9); + Formula x78=x79.eq(x76); + Expression x83=x76.join(x9); + Formula x82=x76.eq(x83); + Formula x81=x82.not(); + Formula x77=x78.and(x81); + Formula x74=x77.forAll(x75); + Variable x87=Variable.unary("P16_p"); + Expression x88=x17.difference(x6); + Decls x86=x87.oneOf(x88); + Variable x90=Variable.unary("P16_q"); + Decls x89=x90.oneOf(x88); + Decls x85=x86.and(x89); + Formula x94=x87.eq(x90); + Formula x93=x94.not(); + Formula x92=x93.not(); + Expression x98=x87.join(x10); + IntExpression x97=x98.count(); + Expression x100=x90.join(x10); + IntExpression x99=x100.count(); + Formula x96=x97.eq(x99); + Formula x95=x96.not(); + Formula x91=x92.or(x95); + Formula x84=x91.forAll(x85); + Expression x102=x7.join(x9); + Formula x101=x102.eq(x6); + Formula x103=x0.eq(x0); + Formula x104=x1.eq(x1); + Formula x105=x2.eq(x2); + Formula x106=x3.eq(x3); + Formula x107=x4.eq(x4); + Formula x108=x5.eq(x5); + Formula x109=x6.eq(x6); + Formula x110=x7.eq(x7); + Formula x111=x8.eq(x8); + Formula x112=x9.eq(x9); + Formula x113=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x14, x23, x26, x31, x33, x41, x53, x74, x84, x101, x103, x104, x105, x106, x107, x108, x109, x110, x111, x112, x113); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(6); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerCountInvariantCheck.java b/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerCountInvariantCheck.java new file mode 100644 index 0000000..ff86c89 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerCountInvariantCheck.java @@ -0,0 +1,1311 @@ +package kodkod.examples.models.puzzle.prisonerRoomVisit; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "prisoner", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes =8, + NestedRelationalJoins = 28, + TransitiveClosure = 0, + NestedQuantifiers = 2, + SetCardinality = 4, + Additions = 11, + Subtractions = 0, + Comparison = 51, + OrderedRelations = 1, + Constraints = 55 +) + + +public final class prisonerCountInvariantCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/OtherPrisoner"); + Relation x7 = Relation.unary("this/CounterPrisoner"); + Relation x8 = Relation.unary("this/NULL"); + Relation x9 = Relation.unary("this/True"); + Relation x10 = Relation.unary("this/False"); + Relation x11 = Relation.unary("this/SwitcheA"); + Relation x12 = Relation.unary("this/SwitcheB"); + Relation x13 = Relation.unary("this/Up"); + Relation x14 = Relation.unary("this/Down"); + Relation x15 = Relation.unary("this/State"); + Relation x16 = Relation.unary("ordering/Ord"); + Relation x17 = Relation.nary("this/State.announced", 2); + Relation x18 = Relation.nary("this/State.SwitchesStatus", 3); + Relation x19 = Relation.nary("this/State.count", 2); + Relation x20 = Relation.nary("this/State.timesSwitched", 3); + Relation x21 = Relation.nary("this/State.currentPrisoner", 2); + Relation x22 = Relation.unary("ordering/Ord.First"); + Relation x23 = Relation.nary("ordering/Ord.Next", 2); + Relation x24 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "CounterPrisoner$0", + "Down$0", "False$0", "NULL$0", "Prisoner$0", "Prisoner$1", "State$0", + "State$1", "State$2", "State$3", "State$4", "State$5", "State$6", + "State$7", "State$8", "State$9", "SwitcheA$0", "SwitcheB$0", "True$0", + "Up$0", "ordering/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Prisoner$0")); + x6_upper.add(factory.tuple("Prisoner$1")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("CounterPrisoner$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("NULL$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("True$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("False$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("SwitcheA$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("SwitcheB$0")); + bounds.boundExactly(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Up$0")); + bounds.boundExactly(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("Down$0")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("State$0")); + x15_upper.add(factory.tuple("State$1")); + x15_upper.add(factory.tuple("State$2")); + x15_upper.add(factory.tuple("State$3")); + x15_upper.add(factory.tuple("State$4")); + x15_upper.add(factory.tuple("State$5")); + x15_upper.add(factory.tuple("State$6")); + x15_upper.add(factory.tuple("State$7")); + x15_upper.add(factory.tuple("State$8")); + x15_upper.add(factory.tuple("State$9")); + bounds.boundExactly(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("ordering/Ord$0")); + bounds.boundExactly(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("False$0"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("7"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(3); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("NULL$0"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("State$0")); + x22_upper.add(factory.tuple("State$1")); + x22_upper.add(factory.tuple("State$2")); + x22_upper.add(factory.tuple("State$3")); + x22_upper.add(factory.tuple("State$4")); + x22_upper.add(factory.tuple("State$5")); + x22_upper.add(factory.tuple("State$6")); + x22_upper.add(factory.tuple("State$7")); + x22_upper.add(factory.tuple("State$8")); + x22_upper.add(factory.tuple("State$9")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$9"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("State$0")); + x24_upper.add(factory.tuple("State$1")); + x24_upper.add(factory.tuple("State$2")); + x24_upper.add(factory.tuple("State$3")); + x24_upper.add(factory.tuple("State$4")); + x24_upper.add(factory.tuple("State$5")); + x24_upper.add(factory.tuple("State$6")); + x24_upper.add(factory.tuple("State$7")); + x24_upper.add(factory.tuple("State$8")); + x24_upper.add(factory.tuple("State$9")); + bounds.bound(x24, x24_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x27=x6.intersection(x7); + Formula x26=x27.no(); + Expression x29=x9.intersection(x10); + Formula x28=x29.no(); + Expression x31=x11.intersection(x12); + Formula x30=x31.no(); + Expression x33=x13.intersection(x14); + Formula x32=x33.no(); + Variable x36=Variable.unary("CountInvariant_this"); + Decls x35=x36.oneOf(x15); + Expression x39=x36.join(x17); + Formula x38=x39.one(); + Expression x41=x9.union(x10); + Formula x40=x39.in(x41); + Formula x37=x38.and(x40); + Formula x34=x37.forAll(x35); + Expression x43=x17.join(Expression.UNIV); + Formula x42=x43.in(x15); + Variable x47=Variable.unary("CountInvariant_this"); + Decls x46=x47.oneOf(x15); + Expression x51=x47.join(x18); + Expression x53=x11.union(x12); + Expression x54=x13.union(x14); + Expression x52=x53.product(x54); + Formula x50=x51.in(x52); + Variable x57=Variable.unary(""); + Decls x56=x57.oneOf(x53); + Expression x60=x57.join(x51); + Formula x59=x60.one(); + Formula x61=x60.in(x54); + Formula x58=x59.and(x61); + Formula x55=x58.forAll(x56); + Formula x49=x50.and(x55); + Variable x64=Variable.unary(""); + Decls x63=x64.oneOf(x54); + Expression x66=x51.join(x64); + Formula x65=x66.in(x53); + Formula x62=x65.forAll(x63); + Formula x48=x49.and(x62); + Formula x45=x48.forAll(x46); + Expression x69=x18.join(Expression.UNIV); + Expression x68=x69.join(Expression.UNIV); + Formula x67=x68.in(x15); + Variable x72=Variable.unary("CountInvariant_this"); + Decls x71=x72.oneOf(x15); + Expression x75=x72.join(x19); + Formula x74=x75.one(); + Formula x76=x75.in(Expression.INTS); + Formula x73=x74.and(x76); + Formula x70=x73.forAll(x71); + Expression x79=x19.join(Expression.UNIV); + Formula x78=x79.in(x15); + Variable x82=Variable.unary("CountInvariant_this"); + Decls x81=x82.oneOf(x15); + Expression x86=x82.join(x20); + Expression x87=x6.product(Expression.INTS); + Formula x85=x86.in(x87); + Variable x90=Variable.unary(""); + Decls x89=x90.oneOf(x6); + Expression x93=x90.join(x86); + Formula x92=x93.one(); + Formula x94=x93.in(Expression.INTS); + Formula x91=x92.and(x94); + Formula x88=x91.forAll(x89); + Formula x84=x85.and(x88); + Variable x97=Variable.unary(""); + Decls x96=x97.oneOf(Expression.INTS); + Expression x99=x86.join(x97); + Formula x98=x99.in(x6); + Formula x95=x98.forAll(x96); + Formula x83=x84.and(x95); + Formula x80=x83.forAll(x81); + Expression x102=x20.join(Expression.UNIV); + Expression x101=x102.join(Expression.UNIV); + Formula x100=x101.in(x15); + Variable x105=Variable.unary("CountInvariant_this"); + Decls x104=x105.oneOf(x15); + Expression x108=x105.join(x21); + Formula x107=x108.one(); + Expression x111=x6.union(x7); + Expression x110=x111.union(x8); + Formula x109=x108.in(x110); + Formula x106=x107.and(x109); + Formula x103=x106.forAll(x104); + Expression x113=x21.join(Expression.UNIV); + Formula x112=x113.in(x15); + Expression x116=x16.product(x22); + Expression x115=x16.join(x116); + Formula x114=x115.in(x15); + Expression x119=x16.product(x23); + Expression x118=x16.join(x119); + Expression x120=x15.product(x15); + Formula x117=x118.in(x120); + Formula x121=x23.totalOrder(x15,x22,x24); + Expression x123=x6.union(x7); + Formula x122=x111.eq(x123); + IntExpression x125=x111.count(); + IntExpression x126=IntConstant.constant(1); + Formula x124=x125.gt(x126); + Expression x128=x11.union(x12); + Formula x127=x53.eq(x128); + Variable x131=Variable.unary("TineSwichedSetToZero_p"); + Decls x130=x131.oneOf(x6); + IntExpression x135=IntConstant.constant(0); + Expression x134=x135.toExpression(); + Expression x133=x131.product(x134); + Expression x136=x22.join(x20); + Formula x132=x133.in(x136); + Formula x129=x132.forAll(x130); + Expression x139=x22.join(x19); + IntExpression x138=x139.sum(); + IntExpression x140=IntConstant.constant(0); + Formula x137=x138.eq(x140); + Variable x143=Variable.unary("SwitchesInBoolean_s"); + Decls x142=x143.oneOf(x53); + Expression x146=x143.product(x14); + Expression x147=x22.join(x18); + Formula x145=x146.in(x147); + Expression x149=x143.product(x13); + Expression x150=x22.join(x18); + Formula x148=x149.in(x150); + Formula x144=x145.or(x148); + Formula x141=x144.forAll(x142); + Expression x152=x22.join(x17); + Formula x151=x152.eq(x10); + Expression x154=x22.join(x21); + Formula x153=x154.eq(x8); + Variable x158=Variable.unary("CountInvariant_s"); + Decls x157=x158.oneOf(x15); + Variable x160=Variable.unary("CountInvariant_s'"); + Expression x161=x158.join(x23); + Decls x159=x160.oneOf(x161); + Decls x156=x157.and(x159); + Variable x166=Variable.unary("CountInvariant_p"); + Decls x165=x166.oneOf(x6); + Formula x169=x166.in(x6); + Expression x173=x160.join(x21); + Formula x172=x173.eq(x166); + Expression x175=x160.join(x19); + Expression x176=x158.join(x19); + Formula x174=x175.eq(x176); + Formula x171=x172.and(x174); + Expression x180=x158.join(x17); + Formula x179=x180.eq(x9); + Expression x183=x160.join(x18); + Expression x184=x158.join(x18); + Formula x182=x183.eq(x184); + Expression x186=x160.join(x20); + Expression x187=x158.join(x20); + Formula x185=x186.eq(x187); + Formula x181=x182.and(x185); + Formula x178=x179.implies(x181); + Formula x189=x179.not(); + Expression x195=x158.join(x18); + Expression x194=x11.join(x195); + Formula x193=x194.eq(x14); + Expression x199=x158.join(x20); + Expression x198=x166.join(x199); + IntExpression x197=x198.sum(); + IntExpression x200=IntConstant.constant(2); + Formula x196=x197.lt(x200); + Formula x192=x193.and(x196); + Expression x205=x160.join(x18); + Expression x204=x11.join(x205); + Formula x203=x204.eq(x13); + Expression x208=x160.join(x18); + Expression x207=x12.join(x208); + Expression x210=x158.join(x18); + Expression x209=x12.join(x210); + Formula x206=x207.eq(x209); + Formula x202=x203.and(x206); + Expression x212=x160.join(x20); + Expression x215=x158.join(x20); + Expression x218=x158.join(x20); + Expression x217=x166.join(x218); + Expression x216=x166.product(x217); + Expression x214=x215.difference(x216); + Expression x224=x158.join(x20); + Expression x223=x166.join(x224); + IntExpression x222=x223.sum(); + IntExpression x225=IntConstant.constant(1); + IntExpression x221=x222.plus(x225); + Expression x220=x221.toExpression(); + Expression x219=x166.product(x220); + Expression x213=x214.union(x219); + Formula x211=x212.eq(x213); + Formula x201=x202.and(x211); + Formula x191=x192.implies(x201); + Formula x227=x192.not(); + Expression x231=x160.join(x20); + Expression x232=x158.join(x20); + Formula x230=x231.eq(x232); + Expression x235=x160.join(x18); + Expression x234=x11.join(x235); + Expression x237=x158.join(x18); + Expression x236=x11.join(x237); + Formula x233=x234.eq(x236); + Formula x229=x230.and(x233); + Expression x242=x158.join(x18); + Expression x241=x12.join(x242); + Formula x240=x241.eq(x13); + Expression x245=x160.join(x18); + Expression x244=x12.join(x245); + Formula x243=x244.eq(x14); + Formula x239=x240.implies(x243); + Formula x247=x240.not(); + Expression x250=x160.join(x18); + Expression x249=x12.join(x250); + Formula x248=x249.eq(x13); + Formula x246=x247.implies(x248); + Formula x238=x239.and(x246); + Formula x228=x229.and(x238); + Formula x226=x227.implies(x228); + Formula x190=x191.and(x226); + Formula x188=x189.implies(x190); + Formula x177=x178.and(x188); + Formula x170=x171.and(x177); + Formula x168=x169.and(x170); + Expression x252=x160.join(x17); + Expression x253=x158.join(x17); + Formula x251=x252.eq(x253); + Formula x167=x168.and(x251); + Expression x164=x167.comprehension(x165); + Formula x163=x164.one(); + Variable x257=Variable.unary("CountInvariant_p"); + Decls x256=x257.oneOf(x7); + Formula x260=x257.eq(x7); + Expression x263=x160.join(x21); + Formula x262=x263.eq(x257); + Expression x267=x158.join(x17); + Formula x266=x267.eq(x9); + Expression x271=x160.join(x18); + Expression x272=x158.join(x18); + Formula x270=x271.eq(x272); + Expression x274=x160.join(x17); + Expression x275=x158.join(x17); + Formula x273=x274.eq(x275); + Formula x269=x270.and(x273); + Expression x277=x160.join(x19); + Expression x278=x158.join(x19); + Formula x276=x277.eq(x278); + Formula x268=x269.and(x276); + Formula x265=x266.implies(x268); + Formula x280=x266.not(); + Expression x285=x158.join(x18); + Expression x284=x11.join(x285); + Formula x283=x284.eq(x13); + Expression x290=x160.join(x18); + Expression x289=x11.join(x290); + Formula x288=x289.eq(x14); + Expression x294=x160.join(x18); + Expression x293=x12.join(x294); + Expression x296=x158.join(x18); + Expression x295=x12.join(x296); + Formula x292=x293.eq(x295); + Expression x300=x160.join(x19); + IntExpression x303=IntConstant.constant(2); + IntExpression x305=x111.count(); + IntExpression x306=IntConstant.constant(1); + IntExpression x304=x305.minus(x306); + IntExpression x302=x303.multiply(x304); + Expression x301=x302.toExpression(); + Formula x299=x300.eq(x301); + Expression x308=x160.join(x17); + Formula x307=x308.eq(x9); + Formula x298=x299.implies(x307); + Formula x310=x299.not(); + Expression x312=x160.join(x17); + Expression x313=x158.join(x17); + Formula x311=x312.eq(x313); + Formula x309=x310.implies(x311); + Formula x297=x298.and(x309); + Formula x291=x292.and(x297); + Formula x287=x288.and(x291); + Expression x316=x160.join(x19); + IntExpression x315=x316.sum(); + Expression x319=x158.join(x19); + IntExpression x318=x319.sum(); + IntExpression x320=IntConstant.constant(1); + IntExpression x317=x318.plus(x320); + Formula x314=x315.eq(x317); + Formula x286=x287.and(x314); + Formula x282=x283.implies(x286); + Formula x322=x283.not(); + Expression x326=x160.join(x19); + Expression x327=x158.join(x19); + Formula x325=x326.eq(x327); + Expression x330=x160.join(x17); + Expression x331=x158.join(x17); + Formula x329=x330.eq(x331); + Expression x336=x158.join(x18); + Expression x335=x12.join(x336); + Formula x334=x335.eq(x13); + Expression x339=x160.join(x18); + Expression x338=x12.join(x339); + Formula x337=x338.eq(x14); + Formula x333=x334.implies(x337); + Formula x341=x334.not(); + Expression x344=x160.join(x18); + Expression x343=x12.join(x344); + Formula x342=x343.eq(x13); + Formula x340=x341.implies(x342); + Formula x332=x333.and(x340); + Formula x328=x329.and(x332); + Formula x324=x325.and(x328); + Expression x347=x160.join(x18); + Expression x346=x11.join(x347); + Expression x349=x158.join(x18); + Expression x348=x11.join(x349); + Formula x345=x346.eq(x348); + Formula x323=x324.and(x345); + Formula x321=x322.implies(x323); + Formula x281=x282.and(x321); + Formula x279=x280.implies(x281); + Formula x264=x265.and(x279); + Formula x261=x262.and(x264); + Formula x259=x260.and(x261); + Expression x351=x160.join(x20); + Expression x352=x158.join(x20); + Formula x350=x351.eq(x352); + Formula x258=x259.and(x350); + Expression x255=x258.comprehension(x256); + Formula x254=x255.one(); + Formula x162=x163.or(x254); + Formula x155=x162.forAll(x156); + Variable x356=Variable.unary("CountInvariant_s"); + Decls x355=x356.oneOf(x15); + Expression x361=x356.join(x18); + Expression x360=x11.join(x361); + Formula x359=x360.eq(x13); + Expression x365=x356.join(x19); + IntExpression x364=x365.sum(); + Variable x369=Variable.unary("CountInvariant_p"); + Decls x368=x369.oneOf(x6); + Expression x372=x356.join(x20); + Expression x371=x369.join(x372); + IntExpression x370=x371.sum(); + IntExpression x367=x370.sum(x368); + IntExpression x373=IntConstant.constant(1); + IntExpression x366=x367.minus(x373); + Formula x363=x364.eq(x366); + Expression x376=x356.join(x19); + IntExpression x375=x376.sum(); + Formula x374=x375.eq(x367); + Formula x362=x363.or(x374); + Formula x358=x359.implies(x362); + Formula x378=x359.not(); + Expression x382=x356.join(x19); + IntExpression x381=x382.sum(); + Formula x380=x381.eq(x367); + Expression x385=x356.join(x19); + IntExpression x384=x385.sum(); + IntExpression x387=IntConstant.constant(1); + IntExpression x386=x367.plus(x387); + Formula x383=x384.eq(x386); + Formula x379=x380.or(x383); + Formula x377=x378.implies(x379); + Formula x357=x358.and(x377); + Formula x354=x357.forAll(x355); + Formula x353=x354.not(); + Formula x388=x0.eq(x0); + Formula x389=x1.eq(x1); + Formula x390=x2.eq(x2); + Formula x391=x3.eq(x3); + Formula x392=x4.eq(x4); + Formula x393=x5.eq(x5); + Formula x394=x6.eq(x6); + Formula x395=x7.eq(x7); + Formula x396=x8.eq(x8); + Formula x397=x9.eq(x9); + Formula x398=x10.eq(x10); + Formula x399=x11.eq(x11); + Formula x400=x12.eq(x12); + Formula x401=x13.eq(x13); + Formula x402=x14.eq(x14); + Formula x403=x15.eq(x15); + Formula x404=x16.eq(x16); + Formula x405=x17.eq(x17); + Formula x406=x18.eq(x18); + Formula x407=x19.eq(x19); + Formula x408=x20.eq(x20); + Formula x409=x21.eq(x21); + Formula x410=x22.eq(x22); + Formula x411=x23.eq(x23); + Formula x412=x24.eq(x24); + Formula x25=Formula.compose(FormulaOperator.AND, x26, x28, x30, x32, x34, x42, x45, x67, x70, x78, x80, x100, x103, x112, x114, x117, x121, x122, x124, x127, x129, x137, x141, x151, x153, x155, x353, x388, x389, x390, x391, x392, x393, x394, x395, x396, x397, x398, x399, x400, x401, x402, x403, x404, x405, x406, x407, x408, x409, x410, x411, x412); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x25,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerRun.java b/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerRun.java new file mode 100644 index 0000000..c725d4c --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerRun.java @@ -0,0 +1,1460 @@ +package kodkod.examples.models.puzzle.prisonerRoomVisit; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "prisoner", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes =8, + NestedRelationalJoins = 28, + TransitiveClosure = 0, + NestedQuantifiers = 2, + SetCardinality = 2, + Additions = 5, + Subtractions = 0, + Comparison = 51, + OrderedRelations = 1, + Constraints = 55 +) + + +public final class prisonerRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/OtherPrisoner"); + Relation x7 = Relation.unary("this/CounterPrisoner"); + Relation x8 = Relation.unary("this/NULL"); + Relation x9 = Relation.unary("this/True"); + Relation x10 = Relation.unary("this/False"); + Relation x11 = Relation.unary("this/SwitcheA"); + Relation x12 = Relation.unary("this/SwitcheB"); + Relation x13 = Relation.unary("this/Up"); + Relation x14 = Relation.unary("this/Down"); + Relation x15 = Relation.unary("this/State"); + Relation x16 = Relation.unary("ordering/Ord"); + Relation x17 = Relation.nary("this/State.announced", 2); + Relation x18 = Relation.nary("this/State.SwitchesStatus", 3); + Relation x19 = Relation.nary("this/State.count", 2); + Relation x20 = Relation.nary("this/State.timesSwitched", 3); + Relation x21 = Relation.nary("this/State.currentPrisoner", 2); + Relation x22 = Relation.unary("ordering/Ord.First"); + Relation x23 = Relation.nary("ordering/Ord.Next", 2); + Relation x24 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "CounterPrisoner$0", + "Down$0", "False$0", "NULL$0", "Prisoner$0", "Prisoner$1", "State$0", + "State$1", "State$10", "State$11", "State$2", "State$3", "State$4", + "State$5", "State$6", "State$7", "State$8", "State$9", "SwitcheA$0", + "SwitcheB$0", "True$0", "Up$0", "ordering/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Prisoner$0")); + x6_upper.add(factory.tuple("Prisoner$1")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("CounterPrisoner$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("NULL$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("True$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("False$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("SwitcheA$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("SwitcheB$0")); + bounds.boundExactly(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Up$0")); + bounds.boundExactly(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("Down$0")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("State$0")); + x15_upper.add(factory.tuple("State$1")); + x15_upper.add(factory.tuple("State$2")); + x15_upper.add(factory.tuple("State$3")); + x15_upper.add(factory.tuple("State$4")); + x15_upper.add(factory.tuple("State$5")); + x15_upper.add(factory.tuple("State$6")); + x15_upper.add(factory.tuple("State$7")); + x15_upper.add(factory.tuple("State$8")); + x15_upper.add(factory.tuple("State$9")); + x15_upper.add(factory.tuple("State$10")); + x15_upper.add(factory.tuple("State$11")); + bounds.boundExactly(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("ordering/Ord$0")); + bounds.boundExactly(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("False$0"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("7"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(3); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$10").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$10").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$11").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$11").product(factory.tuple("NULL$0"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("State$0")); + x22_upper.add(factory.tuple("State$1")); + x22_upper.add(factory.tuple("State$2")); + x22_upper.add(factory.tuple("State$3")); + x22_upper.add(factory.tuple("State$4")); + x22_upper.add(factory.tuple("State$5")); + x22_upper.add(factory.tuple("State$6")); + x22_upper.add(factory.tuple("State$7")); + x22_upper.add(factory.tuple("State$8")); + x22_upper.add(factory.tuple("State$9")); + x22_upper.add(factory.tuple("State$10")); + x22_upper.add(factory.tuple("State$11")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$11"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("State$0")); + x24_upper.add(factory.tuple("State$1")); + x24_upper.add(factory.tuple("State$2")); + x24_upper.add(factory.tuple("State$3")); + x24_upper.add(factory.tuple("State$4")); + x24_upper.add(factory.tuple("State$5")); + x24_upper.add(factory.tuple("State$6")); + x24_upper.add(factory.tuple("State$7")); + x24_upper.add(factory.tuple("State$8")); + x24_upper.add(factory.tuple("State$9")); + x24_upper.add(factory.tuple("State$10")); + x24_upper.add(factory.tuple("State$11")); + bounds.bound(x24, x24_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x27=x6.intersection(x7); + Formula x26=x27.no(); + Expression x29=x9.intersection(x10); + Formula x28=x29.no(); + Expression x31=x11.intersection(x12); + Formula x30=x31.no(); + Expression x33=x13.intersection(x14); + Formula x32=x33.no(); + Variable x37=Variable.unary(""); + Expression x38=x6.union(x7); + Decls x36=x37.oneOf(x38); + Variable x40=Variable.unary(""); + Decls x39=x40.oneOf(x38); + Variable x42=Variable.unary(""); + Decls x41=x42.oneOf(x38); + Decls x35=x36.and(x39).and(x41); + Expression x46=x40.union(x42); + Expression x45=x37.union(x46); + Formula x44=x45.eq(x38); + Expression x49=x37.intersection(x46); + Formula x48=x49.no(); + Expression x52=x40.intersection(x42); + Formula x51=x52.no(); + Formula x50=x51.and(Formula.TRUE); + Formula x47=x48.and(x50); + Formula x43=x44.and(x47); + Formula x34=x43.forSome(x35); + Variable x56=Variable.unary("this"); + Decls x55=x56.oneOf(x15); + Expression x59=x56.join(x17); + Formula x58=x59.one(); + Expression x61=x9.union(x10); + Formula x60=x59.in(x61); + Formula x57=x58.and(x60); + Formula x54=x57.forAll(x55); + Expression x63=x17.join(Expression.UNIV); + Formula x62=x63.in(x15); + Variable x67=Variable.unary("this"); + Decls x66=x67.oneOf(x15); + Expression x71=x67.join(x18); + Expression x73=x11.union(x12); + Expression x74=x13.union(x14); + Expression x72=x73.product(x74); + Formula x70=x71.in(x72); + Variable x77=Variable.unary(""); + Decls x76=x77.oneOf(x73); + Expression x80=x77.join(x71); + Formula x79=x80.one(); + Formula x81=x80.in(x74); + Formula x78=x79.and(x81); + Formula x75=x78.forAll(x76); + Formula x69=x70.and(x75); + Variable x84=Variable.unary(""); + Decls x83=x84.oneOf(x74); + Expression x86=x71.join(x84); + Formula x85=x86.in(x73); + Formula x82=x85.forAll(x83); + Formula x68=x69.and(x82); + Formula x65=x68.forAll(x66); + Expression x89=x18.join(Expression.UNIV); + Expression x88=x89.join(Expression.UNIV); + Formula x87=x88.in(x15); + Variable x92=Variable.unary("this"); + Decls x91=x92.oneOf(x15); + Expression x95=x92.join(x19); + Formula x94=x95.one(); + Formula x96=x95.in(Expression.INTS); + Formula x93=x94.and(x96); + Formula x90=x93.forAll(x91); + Expression x99=x19.join(Expression.UNIV); + Formula x98=x99.in(x15); + Variable x102=Variable.unary("this"); + Decls x101=x102.oneOf(x15); + Expression x106=x102.join(x20); + Expression x107=x6.product(Expression.INTS); + Formula x105=x106.in(x107); + Variable x110=Variable.unary(""); + Decls x109=x110.oneOf(x6); + Expression x113=x110.join(x106); + Formula x112=x113.one(); + Formula x114=x113.in(Expression.INTS); + Formula x111=x112.and(x114); + Formula x108=x111.forAll(x109); + Formula x104=x105.and(x108); + Variable x117=Variable.unary(""); + Decls x116=x117.oneOf(Expression.INTS); + Expression x119=x106.join(x117); + Formula x118=x119.in(x6); + Formula x115=x118.forAll(x116); + Formula x103=x104.and(x115); + Formula x100=x103.forAll(x101); + Expression x122=x20.join(Expression.UNIV); + Expression x121=x122.join(Expression.UNIV); + Formula x120=x121.in(x15); + Variable x125=Variable.unary("this"); + Decls x124=x125.oneOf(x15); + Expression x128=x125.join(x21); + Formula x127=x128.one(); + Expression x130=x38.union(x8); + Formula x129=x128.in(x130); + Formula x126=x127.and(x129); + Formula x123=x126.forAll(x124); + Expression x132=x21.join(Expression.UNIV); + Formula x131=x132.in(x15); + Expression x135=x16.product(x22); + Expression x134=x16.join(x135); + Formula x133=x134.in(x15); + Expression x138=x16.product(x23); + Expression x137=x16.join(x138); + Expression x139=x15.product(x15); + Formula x136=x137.in(x139); + Formula x140=x23.totalOrder(x15,x22,x24); + Expression x142=x6.union(x7); + Formula x141=x38.eq(x142); + IntExpression x144=x38.count(); + IntExpression x145=IntConstant.constant(1); + Formula x143=x144.gt(x145); + Expression x147=x11.union(x12); + Formula x146=x73.eq(x147); + Variable x150=Variable.unary("TineSwichedSetToZero_p"); + Decls x149=x150.oneOf(x6); + IntExpression x154=IntConstant.constant(0); + Expression x153=x154.toExpression(); + Expression x152=x150.product(x153); + Expression x155=x22.join(x20); + Formula x151=x152.in(x155); + Formula x148=x151.forAll(x149); + Expression x158=x22.join(x19); + IntExpression x157=x158.sum(); + IntExpression x159=IntConstant.constant(0); + Formula x156=x157.eq(x159); + Variable x162=Variable.unary("SwitchesInBoolean_s"); + Decls x161=x162.oneOf(x73); + Expression x165=x162.product(x14); + Expression x166=x22.join(x18); + Formula x164=x165.in(x166); + Expression x168=x162.product(x13); + Expression x169=x22.join(x18); + Formula x167=x168.in(x169); + Formula x163=x164.or(x167); + Formula x160=x163.forAll(x161); + Expression x171=x22.join(x17); + Formula x170=x171.eq(x10); + Expression x173=x22.join(x21); + Formula x172=x173.eq(x8); + Variable x177=Variable.unary("s"); + Decls x176=x177.oneOf(x15); + Variable x179=Variable.unary("s'"); + Expression x180=x177.join(x23); + Decls x178=x179.oneOf(x180); + Decls x175=x176.and(x178); + Variable x185=Variable.unary("p"); + Decls x184=x185.oneOf(x6); + Formula x188=x185.in(x6); + Expression x192=x179.join(x21); + Formula x191=x192.eq(x185); + Expression x194=x179.join(x19); + Expression x195=x177.join(x19); + Formula x193=x194.eq(x195); + Formula x190=x191.and(x193); + Expression x199=x177.join(x17); + Formula x198=x199.eq(x9); + Expression x202=x179.join(x18); + Expression x203=x177.join(x18); + Formula x201=x202.eq(x203); + Expression x205=x179.join(x20); + Expression x206=x177.join(x20); + Formula x204=x205.eq(x206); + Formula x200=x201.and(x204); + Formula x197=x198.implies(x200); + Formula x208=x198.not(); + Expression x214=x177.join(x18); + Expression x213=x11.join(x214); + Formula x212=x213.eq(x14); + Expression x218=x177.join(x20); + Expression x217=x185.join(x218); + IntExpression x216=x217.sum(); + IntExpression x219=IntConstant.constant(2); + Formula x215=x216.lt(x219); + Formula x211=x212.and(x215); + Expression x224=x179.join(x18); + Expression x223=x11.join(x224); + Formula x222=x223.eq(x13); + Expression x227=x179.join(x18); + Expression x226=x12.join(x227); + Expression x229=x177.join(x18); + Expression x228=x12.join(x229); + Formula x225=x226.eq(x228); + Formula x221=x222.and(x225); + Expression x231=x179.join(x20); + Expression x234=x177.join(x20); + Expression x237=x177.join(x20); + Expression x236=x185.join(x237); + Expression x235=x185.product(x236); + Expression x233=x234.difference(x235); + Expression x243=x177.join(x20); + Expression x242=x185.join(x243); + IntExpression x241=x242.sum(); + IntExpression x244=IntConstant.constant(1); + IntExpression x240=x241.plus(x244); + Expression x239=x240.toExpression(); + Expression x238=x185.product(x239); + Expression x232=x233.union(x238); + Formula x230=x231.eq(x232); + Formula x220=x221.and(x230); + Formula x210=x211.implies(x220); + Formula x246=x211.not(); + Expression x250=x179.join(x20); + Expression x251=x177.join(x20); + Formula x249=x250.eq(x251); + Expression x254=x179.join(x18); + Expression x253=x11.join(x254); + Expression x256=x177.join(x18); + Expression x255=x11.join(x256); + Formula x252=x253.eq(x255); + Formula x248=x249.and(x252); + Expression x261=x177.join(x18); + Expression x260=x12.join(x261); + Formula x259=x260.eq(x13); + Expression x264=x179.join(x18); + Expression x263=x12.join(x264); + Formula x262=x263.eq(x14); + Formula x258=x259.implies(x262); + Formula x266=x259.not(); + Expression x269=x179.join(x18); + Expression x268=x12.join(x269); + Formula x267=x268.eq(x13); + Formula x265=x266.implies(x267); + Formula x257=x258.and(x265); + Formula x247=x248.and(x257); + Formula x245=x246.implies(x247); + Formula x209=x210.and(x245); + Formula x207=x208.implies(x209); + Formula x196=x197.and(x207); + Formula x189=x190.and(x196); + Formula x187=x188.and(x189); + Expression x271=x179.join(x17); + Expression x272=x177.join(x17); + Formula x270=x271.eq(x272); + Formula x186=x187.and(x270); + Expression x183=x186.comprehension(x184); + Formula x182=x183.one(); + Variable x276=Variable.unary("p"); + Decls x275=x276.oneOf(x7); + Formula x279=x276.eq(x7); + Expression x282=x179.join(x21); + Formula x281=x282.eq(x276); + Expression x286=x177.join(x17); + Formula x285=x286.eq(x9); + Expression x290=x179.join(x18); + Expression x291=x177.join(x18); + Formula x289=x290.eq(x291); + Expression x293=x179.join(x17); + Expression x294=x177.join(x17); + Formula x292=x293.eq(x294); + Formula x288=x289.and(x292); + Expression x296=x179.join(x19); + Expression x297=x177.join(x19); + Formula x295=x296.eq(x297); + Formula x287=x288.and(x295); + Formula x284=x285.implies(x287); + Formula x299=x285.not(); + Expression x304=x177.join(x18); + Expression x303=x11.join(x304); + Formula x302=x303.eq(x13); + Expression x309=x179.join(x18); + Expression x308=x11.join(x309); + Formula x307=x308.eq(x14); + Expression x313=x179.join(x18); + Expression x312=x12.join(x313); + Expression x315=x177.join(x18); + Expression x314=x12.join(x315); + Formula x311=x312.eq(x314); + Expression x319=x179.join(x19); + IntExpression x322=IntConstant.constant(2); + IntExpression x324=x38.count(); + IntExpression x325=IntConstant.constant(1); + IntExpression x323=x324.minus(x325); + IntExpression x321=x322.multiply(x323); + Expression x320=x321.toExpression(); + Formula x318=x319.eq(x320); + Expression x327=x179.join(x17); + Formula x326=x327.eq(x9); + Formula x317=x318.implies(x326); + Formula x329=x318.not(); + Expression x331=x179.join(x17); + Expression x332=x177.join(x17); + Formula x330=x331.eq(x332); + Formula x328=x329.implies(x330); + Formula x316=x317.and(x328); + Formula x310=x311.and(x316); + Formula x306=x307.and(x310); + Expression x335=x179.join(x19); + IntExpression x334=x335.sum(); + Expression x338=x177.join(x19); + IntExpression x337=x338.sum(); + IntExpression x339=IntConstant.constant(1); + IntExpression x336=x337.plus(x339); + Formula x333=x334.eq(x336); + Formula x305=x306.and(x333); + Formula x301=x302.implies(x305); + Formula x341=x302.not(); + Expression x345=x179.join(x19); + Expression x346=x177.join(x19); + Formula x344=x345.eq(x346); + Expression x349=x179.join(x17); + Expression x350=x177.join(x17); + Formula x348=x349.eq(x350); + Expression x355=x177.join(x18); + Expression x354=x12.join(x355); + Formula x353=x354.eq(x13); + Expression x358=x179.join(x18); + Expression x357=x12.join(x358); + Formula x356=x357.eq(x14); + Formula x352=x353.implies(x356); + Formula x360=x353.not(); + Expression x363=x179.join(x18); + Expression x362=x12.join(x363); + Formula x361=x362.eq(x13); + Formula x359=x360.implies(x361); + Formula x351=x352.and(x359); + Formula x347=x348.and(x351); + Formula x343=x344.and(x347); + Expression x366=x179.join(x18); + Expression x365=x11.join(x366); + Expression x368=x177.join(x18); + Expression x367=x11.join(x368); + Formula x364=x365.eq(x367); + Formula x342=x343.and(x364); + Formula x340=x341.implies(x342); + Formula x300=x301.and(x340); + Formula x298=x299.implies(x300); + Formula x283=x284.and(x298); + Formula x280=x281.and(x283); + Formula x278=x279.and(x280); + Expression x370=x179.join(x20); + Expression x371=x177.join(x20); + Formula x369=x370.eq(x371); + Formula x277=x278.and(x369); + Expression x274=x277.comprehension(x275); + Formula x273=x274.one(); + Formula x181=x182.or(x273); + Formula x174=x181.forAll(x175); + Formula x372=x0.eq(x0); + Formula x373=x1.eq(x1); + Formula x374=x2.eq(x2); + Formula x375=x3.eq(x3); + Formula x376=x4.eq(x4); + Formula x377=x5.eq(x5); + Formula x378=x6.eq(x6); + Formula x379=x7.eq(x7); + Formula x380=x8.eq(x8); + Formula x381=x9.eq(x9); + Formula x382=x10.eq(x10); + Formula x383=x11.eq(x11); + Formula x384=x12.eq(x12); + Formula x385=x13.eq(x13); + Formula x386=x14.eq(x14); + Formula x387=x15.eq(x15); + Formula x388=x16.eq(x16); + Formula x389=x17.eq(x17); + Formula x390=x18.eq(x18); + Formula x391=x19.eq(x19); + Formula x392=x20.eq(x20); + Formula x393=x21.eq(x21); + Formula x394=x22.eq(x22); + Formula x395=x23.eq(x23); + Formula x396=x24.eq(x24); + Formula x25=Formula.compose(FormulaOperator.AND, x26, x28, x30, x32, x34, x54, x62, x65, x87, x90, x98, x100, x120, x123, x131, x133, x136, x140, x141, x143, x146, x148, x156, x160, x170, x172, x174, x372, x373, x374, x375, x376, x377, x378, x379, x380, x381, x382, x383, x384, x385, x386, x387, x388, x389, x390, x391, x392, x393, x394, x395, x396); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x25,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerSafetyCheck.java b/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerSafetyCheck.java new file mode 100644 index 0000000..d4e8be7 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerSafetyCheck.java @@ -0,0 +1,1310 @@ +package kodkod.examples.models.puzzle.prisonerRoomVisit; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "prisoner", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes =8, + NestedRelationalJoins = 28, + TransitiveClosure = 0, + NestedQuantifiers = 2, + SetCardinality = 4, + Additions = 6, + Subtractions = 0, + Comparison = 51, + OrderedRelations = 1, + Constraints = 55 +) + + +public final class prisonerSafetyCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/OtherPrisoner"); + Relation x7 = Relation.unary("this/CounterPrisoner"); + Relation x8 = Relation.unary("this/NULL"); + Relation x9 = Relation.unary("this/True"); + Relation x10 = Relation.unary("this/False"); + Relation x11 = Relation.unary("this/SwitcheA"); + Relation x12 = Relation.unary("this/SwitcheB"); + Relation x13 = Relation.unary("this/Up"); + Relation x14 = Relation.unary("this/Down"); + Relation x15 = Relation.unary("this/State"); + Relation x16 = Relation.unary("ordering/Ord"); + Relation x17 = Relation.nary("this/State.announced", 2); + Relation x18 = Relation.nary("this/State.SwitchesStatus", 3); + Relation x19 = Relation.nary("this/State.count", 2); + Relation x20 = Relation.nary("this/State.timesSwitched", 3); + Relation x21 = Relation.nary("this/State.currentPrisoner", 2); + Relation x22 = Relation.unary("ordering/Ord.First"); + Relation x23 = Relation.nary("ordering/Ord.Next", 2); + Relation x24 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "CounterPrisoner$0", + "Down$0", "False$0", "NULL$0", "Prisoner$0", "Prisoner$1", "State$0", + "State$1", "State$2", "State$3", "State$4", "State$5", "State$6", + "State$7", "State$8", "State$9", "SwitcheA$0", "SwitcheB$0", "True$0", + "Up$0", "ordering/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Prisoner$0")); + x6_upper.add(factory.tuple("Prisoner$1")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("CounterPrisoner$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("NULL$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("True$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("False$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("SwitcheA$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("SwitcheB$0")); + bounds.boundExactly(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Up$0")); + bounds.boundExactly(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("Down$0")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("State$0")); + x15_upper.add(factory.tuple("State$1")); + x15_upper.add(factory.tuple("State$2")); + x15_upper.add(factory.tuple("State$3")); + x15_upper.add(factory.tuple("State$4")); + x15_upper.add(factory.tuple("State$5")); + x15_upper.add(factory.tuple("State$6")); + x15_upper.add(factory.tuple("State$7")); + x15_upper.add(factory.tuple("State$8")); + x15_upper.add(factory.tuple("State$9")); + bounds.boundExactly(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("ordering/Ord$0")); + bounds.boundExactly(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("False$0"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("7"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(3); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("NULL$0"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("State$0")); + x22_upper.add(factory.tuple("State$1")); + x22_upper.add(factory.tuple("State$2")); + x22_upper.add(factory.tuple("State$3")); + x22_upper.add(factory.tuple("State$4")); + x22_upper.add(factory.tuple("State$5")); + x22_upper.add(factory.tuple("State$6")); + x22_upper.add(factory.tuple("State$7")); + x22_upper.add(factory.tuple("State$8")); + x22_upper.add(factory.tuple("State$9")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$9"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("State$0")); + x24_upper.add(factory.tuple("State$1")); + x24_upper.add(factory.tuple("State$2")); + x24_upper.add(factory.tuple("State$3")); + x24_upper.add(factory.tuple("State$4")); + x24_upper.add(factory.tuple("State$5")); + x24_upper.add(factory.tuple("State$6")); + x24_upper.add(factory.tuple("State$7")); + x24_upper.add(factory.tuple("State$8")); + x24_upper.add(factory.tuple("State$9")); + bounds.bound(x24, x24_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x27=x6.intersection(x7); + Formula x26=x27.no(); + Expression x29=x9.intersection(x10); + Formula x28=x29.no(); + Expression x31=x11.intersection(x12); + Formula x30=x31.no(); + Expression x33=x13.intersection(x14); + Formula x32=x33.no(); + Variable x36=Variable.unary("Safety_this"); + Decls x35=x36.oneOf(x15); + Expression x39=x36.join(x17); + Formula x38=x39.one(); + Expression x41=x9.union(x10); + Formula x40=x39.in(x41); + Formula x37=x38.and(x40); + Formula x34=x37.forAll(x35); + Expression x43=x17.join(Expression.UNIV); + Formula x42=x43.in(x15); + Variable x47=Variable.unary("Safety_this"); + Decls x46=x47.oneOf(x15); + Expression x51=x47.join(x18); + Expression x53=x11.union(x12); + Expression x54=x13.union(x14); + Expression x52=x53.product(x54); + Formula x50=x51.in(x52); + Variable x57=Variable.unary(""); + Decls x56=x57.oneOf(x53); + Expression x60=x57.join(x51); + Formula x59=x60.one(); + Formula x61=x60.in(x54); + Formula x58=x59.and(x61); + Formula x55=x58.forAll(x56); + Formula x49=x50.and(x55); + Variable x64=Variable.unary(""); + Decls x63=x64.oneOf(x54); + Expression x66=x51.join(x64); + Formula x65=x66.in(x53); + Formula x62=x65.forAll(x63); + Formula x48=x49.and(x62); + Formula x45=x48.forAll(x46); + Expression x69=x18.join(Expression.UNIV); + Expression x68=x69.join(Expression.UNIV); + Formula x67=x68.in(x15); + Variable x72=Variable.unary("Safety_this"); + Decls x71=x72.oneOf(x15); + Expression x75=x72.join(x19); + Formula x74=x75.one(); + Formula x76=x75.in(Expression.INTS); + Formula x73=x74.and(x76); + Formula x70=x73.forAll(x71); + Expression x79=x19.join(Expression.UNIV); + Formula x78=x79.in(x15); + Variable x82=Variable.unary("Safety_this"); + Decls x81=x82.oneOf(x15); + Expression x86=x82.join(x20); + Expression x87=x6.product(Expression.INTS); + Formula x85=x86.in(x87); + Variable x90=Variable.unary(""); + Decls x89=x90.oneOf(x6); + Expression x93=x90.join(x86); + Formula x92=x93.one(); + Formula x94=x93.in(Expression.INTS); + Formula x91=x92.and(x94); + Formula x88=x91.forAll(x89); + Formula x84=x85.and(x88); + Variable x97=Variable.unary(""); + Decls x96=x97.oneOf(Expression.INTS); + Expression x99=x86.join(x97); + Formula x98=x99.in(x6); + Formula x95=x98.forAll(x96); + Formula x83=x84.and(x95); + Formula x80=x83.forAll(x81); + Expression x102=x20.join(Expression.UNIV); + Expression x101=x102.join(Expression.UNIV); + Formula x100=x101.in(x15); + Variable x105=Variable.unary("Safety_this"); + Decls x104=x105.oneOf(x15); + Expression x108=x105.join(x21); + Formula x107=x108.one(); + Expression x111=x6.union(x7); + Expression x110=x111.union(x8); + Formula x109=x108.in(x110); + Formula x106=x107.and(x109); + Formula x103=x106.forAll(x104); + Expression x113=x21.join(Expression.UNIV); + Formula x112=x113.in(x15); + Expression x116=x16.product(x22); + Expression x115=x16.join(x116); + Formula x114=x115.in(x15); + Expression x119=x16.product(x23); + Expression x118=x16.join(x119); + Expression x120=x15.product(x15); + Formula x117=x118.in(x120); + Formula x121=x23.totalOrder(x15,x22,x24); + Expression x123=x6.union(x7); + Formula x122=x111.eq(x123); + IntExpression x125=x111.count(); + IntExpression x126=IntConstant.constant(1); + Formula x124=x125.gt(x126); + Expression x128=x11.union(x12); + Formula x127=x53.eq(x128); + Variable x131=Variable.unary("TineSwichedSetToZero_p"); + Decls x130=x131.oneOf(x6); + IntExpression x135=IntConstant.constant(0); + Expression x134=x135.toExpression(); + Expression x133=x131.product(x134); + Expression x136=x22.join(x20); + Formula x132=x133.in(x136); + Formula x129=x132.forAll(x130); + Expression x139=x22.join(x19); + IntExpression x138=x139.sum(); + IntExpression x140=IntConstant.constant(0); + Formula x137=x138.eq(x140); + Variable x143=Variable.unary("SwitchesInBoolean_s"); + Decls x142=x143.oneOf(x53); + Expression x146=x143.product(x14); + Expression x147=x22.join(x18); + Formula x145=x146.in(x147); + Expression x149=x143.product(x13); + Expression x150=x22.join(x18); + Formula x148=x149.in(x150); + Formula x144=x145.or(x148); + Formula x141=x144.forAll(x142); + Expression x152=x22.join(x17); + Formula x151=x152.eq(x10); + Expression x154=x22.join(x21); + Formula x153=x154.eq(x8); + Variable x158=Variable.unary("Safety_s"); + Decls x157=x158.oneOf(x15); + Variable x160=Variable.unary("Safety_s'"); + Expression x161=x158.join(x23); + Decls x159=x160.oneOf(x161); + Decls x156=x157.and(x159); + Variable x166=Variable.unary("Safety_p"); + Decls x165=x166.oneOf(x6); + Formula x169=x166.in(x6); + Expression x173=x160.join(x21); + Formula x172=x173.eq(x166); + Expression x175=x160.join(x19); + Expression x176=x158.join(x19); + Formula x174=x175.eq(x176); + Formula x171=x172.and(x174); + Expression x180=x158.join(x17); + Formula x179=x180.eq(x9); + Expression x183=x160.join(x18); + Expression x184=x158.join(x18); + Formula x182=x183.eq(x184); + Expression x186=x160.join(x20); + Expression x187=x158.join(x20); + Formula x185=x186.eq(x187); + Formula x181=x182.and(x185); + Formula x178=x179.implies(x181); + Formula x189=x179.not(); + Expression x195=x158.join(x18); + Expression x194=x11.join(x195); + Formula x193=x194.eq(x14); + Expression x199=x158.join(x20); + Expression x198=x166.join(x199); + IntExpression x197=x198.sum(); + IntExpression x200=IntConstant.constant(2); + Formula x196=x197.lt(x200); + Formula x192=x193.and(x196); + Expression x205=x160.join(x18); + Expression x204=x11.join(x205); + Formula x203=x204.eq(x13); + Expression x208=x160.join(x18); + Expression x207=x12.join(x208); + Expression x210=x158.join(x18); + Expression x209=x12.join(x210); + Formula x206=x207.eq(x209); + Formula x202=x203.and(x206); + Expression x212=x160.join(x20); + Expression x215=x158.join(x20); + Expression x218=x158.join(x20); + Expression x217=x166.join(x218); + Expression x216=x166.product(x217); + Expression x214=x215.difference(x216); + Expression x224=x158.join(x20); + Expression x223=x166.join(x224); + IntExpression x222=x223.sum(); + IntExpression x225=IntConstant.constant(1); + IntExpression x221=x222.plus(x225); + Expression x220=x221.toExpression(); + Expression x219=x166.product(x220); + Expression x213=x214.union(x219); + Formula x211=x212.eq(x213); + Formula x201=x202.and(x211); + Formula x191=x192.implies(x201); + Formula x227=x192.not(); + Expression x231=x160.join(x20); + Expression x232=x158.join(x20); + Formula x230=x231.eq(x232); + Expression x235=x160.join(x18); + Expression x234=x11.join(x235); + Expression x237=x158.join(x18); + Expression x236=x11.join(x237); + Formula x233=x234.eq(x236); + Formula x229=x230.and(x233); + Expression x242=x158.join(x18); + Expression x241=x12.join(x242); + Formula x240=x241.eq(x13); + Expression x245=x160.join(x18); + Expression x244=x12.join(x245); + Formula x243=x244.eq(x14); + Formula x239=x240.implies(x243); + Formula x247=x240.not(); + Expression x250=x160.join(x18); + Expression x249=x12.join(x250); + Formula x248=x249.eq(x13); + Formula x246=x247.implies(x248); + Formula x238=x239.and(x246); + Formula x228=x229.and(x238); + Formula x226=x227.implies(x228); + Formula x190=x191.and(x226); + Formula x188=x189.implies(x190); + Formula x177=x178.and(x188); + Formula x170=x171.and(x177); + Formula x168=x169.and(x170); + Expression x252=x160.join(x17); + Expression x253=x158.join(x17); + Formula x251=x252.eq(x253); + Formula x167=x168.and(x251); + Expression x164=x167.comprehension(x165); + Formula x163=x164.one(); + Variable x257=Variable.unary("Safety_p"); + Decls x256=x257.oneOf(x7); + Formula x260=x257.eq(x7); + Expression x263=x160.join(x21); + Formula x262=x263.eq(x257); + Expression x267=x158.join(x17); + Formula x266=x267.eq(x9); + Expression x271=x160.join(x18); + Expression x272=x158.join(x18); + Formula x270=x271.eq(x272); + Expression x274=x160.join(x17); + Expression x275=x158.join(x17); + Formula x273=x274.eq(x275); + Formula x269=x270.and(x273); + Expression x277=x160.join(x19); + Expression x278=x158.join(x19); + Formula x276=x277.eq(x278); + Formula x268=x269.and(x276); + Formula x265=x266.implies(x268); + Formula x280=x266.not(); + Expression x285=x158.join(x18); + Expression x284=x11.join(x285); + Formula x283=x284.eq(x13); + Expression x290=x160.join(x18); + Expression x289=x11.join(x290); + Formula x288=x289.eq(x14); + Expression x294=x160.join(x18); + Expression x293=x12.join(x294); + Expression x296=x158.join(x18); + Expression x295=x12.join(x296); + Formula x292=x293.eq(x295); + Expression x300=x160.join(x19); + IntExpression x303=IntConstant.constant(2); + IntExpression x305=x111.count(); + IntExpression x306=IntConstant.constant(1); + IntExpression x304=x305.minus(x306); + IntExpression x302=x303.multiply(x304); + Expression x301=x302.toExpression(); + Formula x299=x300.eq(x301); + Expression x308=x160.join(x17); + Formula x307=x308.eq(x9); + Formula x298=x299.implies(x307); + Formula x310=x299.not(); + Expression x312=x160.join(x17); + Expression x313=x158.join(x17); + Formula x311=x312.eq(x313); + Formula x309=x310.implies(x311); + Formula x297=x298.and(x309); + Formula x291=x292.and(x297); + Formula x287=x288.and(x291); + Expression x316=x160.join(x19); + IntExpression x315=x316.sum(); + Expression x319=x158.join(x19); + IntExpression x318=x319.sum(); + IntExpression x320=IntConstant.constant(1); + IntExpression x317=x318.plus(x320); + Formula x314=x315.eq(x317); + Formula x286=x287.and(x314); + Formula x282=x283.implies(x286); + Formula x322=x283.not(); + Expression x326=x160.join(x19); + Expression x327=x158.join(x19); + Formula x325=x326.eq(x327); + Expression x330=x160.join(x17); + Expression x331=x158.join(x17); + Formula x329=x330.eq(x331); + Expression x336=x158.join(x18); + Expression x335=x12.join(x336); + Formula x334=x335.eq(x13); + Expression x339=x160.join(x18); + Expression x338=x12.join(x339); + Formula x337=x338.eq(x14); + Formula x333=x334.implies(x337); + Formula x341=x334.not(); + Expression x344=x160.join(x18); + Expression x343=x12.join(x344); + Formula x342=x343.eq(x13); + Formula x340=x341.implies(x342); + Formula x332=x333.and(x340); + Formula x328=x329.and(x332); + Formula x324=x325.and(x328); + Expression x347=x160.join(x18); + Expression x346=x11.join(x347); + Expression x349=x158.join(x18); + Expression x348=x11.join(x349); + Formula x345=x346.eq(x348); + Formula x323=x324.and(x345); + Formula x321=x322.implies(x323); + Formula x281=x282.and(x321); + Formula x279=x280.implies(x281); + Formula x264=x265.and(x279); + Formula x261=x262.and(x264); + Formula x259=x260.and(x261); + Expression x351=x160.join(x20); + Expression x352=x158.join(x20); + Formula x350=x351.eq(x352); + Formula x258=x259.and(x350); + Expression x255=x258.comprehension(x256); + Formula x254=x255.one(); + Formula x162=x163.or(x254); + Formula x155=x162.forAll(x156); + Variable x356=Variable.unary("Safety_s"); + Decls x355=x356.oneOf(x15); + Expression x361=x356.join(x19); + IntExpression x364=IntConstant.constant(2); + IntExpression x366=x111.count(); + IntExpression x367=IntConstant.constant(1); + IntExpression x365=x366.minus(x367); + IntExpression x363=x364.multiply(x365); + Expression x362=x363.toExpression(); + Formula x360=x361.eq(x362); + Formula x359=x360.not(); + Variable x370=Variable.unary("Safety_p"); + Decls x369=x370.oneOf(x6); + Expression x374=x356.join(x20); + Expression x373=x370.join(x374); + IntExpression x372=x373.sum(); + IntExpression x375=IntConstant.constant(0); + Formula x371=x372.gt(x375); + Formula x368=x371.forAll(x369); + Formula x358=x359.or(x368); + Expression x378=x356.join(x17); + Formula x377=x378.eq(x9); + Expression x380=x356.join(x19); + IntExpression x383=IntConstant.constant(2); + IntExpression x385=x111.count(); + IntExpression x386=IntConstant.constant(1); + IntExpression x384=x385.minus(x386); + IntExpression x382=x383.multiply(x384); + Expression x381=x382.toExpression(); + Formula x379=x380.eq(x381); + Formula x376=x377.iff(x379); + Formula x357=x358.and(x376); + Formula x354=x357.forAll(x355); + Formula x353=x354.not(); + Formula x387=x0.eq(x0); + Formula x388=x1.eq(x1); + Formula x389=x2.eq(x2); + Formula x390=x3.eq(x3); + Formula x391=x4.eq(x4); + Formula x392=x5.eq(x5); + Formula x393=x6.eq(x6); + Formula x394=x7.eq(x7); + Formula x395=x8.eq(x8); + Formula x396=x9.eq(x9); + Formula x397=x10.eq(x10); + Formula x398=x11.eq(x11); + Formula x399=x12.eq(x12); + Formula x400=x13.eq(x13); + Formula x401=x14.eq(x14); + Formula x402=x15.eq(x15); + Formula x403=x16.eq(x16); + Formula x404=x17.eq(x17); + Formula x405=x18.eq(x18); + Formula x406=x19.eq(x19); + Formula x407=x20.eq(x20); + Formula x408=x21.eq(x21); + Formula x409=x22.eq(x22); + Formula x410=x23.eq(x23); + Formula x411=x24.eq(x24); + Formula x25=Formula.compose(FormulaOperator.AND, x26, x28, x30, x32, x34, x42, x45, x67, x70, x78, x80, x100, x103, x112, x114, x117, x121, x122, x124, x127, x129, x137, x141, x151, x153, x155, x353, x387, x388, x389, x390, x391, x392, x393, x394, x395, x396, x397, x398, x399, x400, x401, x402, x403, x404, x405, x406, x407, x408, x409, x410, x411); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x25,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerTheoremCheck.java b/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerTheoremCheck.java new file mode 100644 index 0000000..2143543 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerTheoremCheck.java @@ -0,0 +1,1491 @@ +package kodkod.examples.models.puzzle.prisonerRoomVisit; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "prisoner", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes =8, + NestedRelationalJoins = 28, + TransitiveClosure = 2, + NestedQuantifiers = 2, + SetCardinality = 2, + Additions = 5, + Subtractions = 0, + Comparison = 51, + OrderedRelations = 1, + Constraints = 55 +) + + +public final class prisonerTheoremCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/OtherPrisoner"); + Relation x7 = Relation.unary("this/CounterPrisoner"); + Relation x8 = Relation.unary("this/NULL"); + Relation x9 = Relation.unary("this/True"); + Relation x10 = Relation.unary("this/False"); + Relation x11 = Relation.unary("this/SwitcheA"); + Relation x12 = Relation.unary("this/SwitcheB"); + Relation x13 = Relation.unary("this/Up"); + Relation x14 = Relation.unary("this/Down"); + Relation x15 = Relation.unary("this/State"); + Relation x16 = Relation.unary("ordering/Ord"); + Relation x17 = Relation.nary("this/State.announced", 2); + Relation x18 = Relation.nary("this/State.SwitchesStatus", 3); + Relation x19 = Relation.nary("this/State.count", 2); + Relation x20 = Relation.nary("this/State.timesSwitched", 3); + Relation x21 = Relation.nary("this/State.currentPrisoner", 2); + Relation x22 = Relation.unary("ordering/Ord.First"); + Relation x23 = Relation.nary("ordering/Ord.Next", 2); + Relation x24 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "CounterPrisoner$0", + "Down$0", "False$0", "NULL$0", "Prisoner$0", "Prisoner$1", "State$0", + "State$1", "State$10", "State$11", "State$2", "State$3", "State$4", + "State$5", "State$6", "State$7", "State$8", "State$9", "SwitcheA$0", + "SwitcheB$0", "True$0", "Up$0", "ordering/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Prisoner$0")); + x6_upper.add(factory.tuple("Prisoner$1")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("CounterPrisoner$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("NULL$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("True$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("False$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("SwitcheA$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("SwitcheB$0")); + bounds.boundExactly(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Up$0")); + bounds.boundExactly(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("Down$0")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("State$0")); + x15_upper.add(factory.tuple("State$1")); + x15_upper.add(factory.tuple("State$2")); + x15_upper.add(factory.tuple("State$3")); + x15_upper.add(factory.tuple("State$4")); + x15_upper.add(factory.tuple("State$5")); + x15_upper.add(factory.tuple("State$6")); + x15_upper.add(factory.tuple("State$7")); + x15_upper.add(factory.tuple("State$8")); + x15_upper.add(factory.tuple("State$9")); + x15_upper.add(factory.tuple("State$10")); + x15_upper.add(factory.tuple("State$11")); + bounds.boundExactly(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("ordering/Ord$0")); + bounds.boundExactly(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("False$0"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("7"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(3); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$10").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$10").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$11").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$11").product(factory.tuple("NULL$0"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("State$0")); + x22_upper.add(factory.tuple("State$1")); + x22_upper.add(factory.tuple("State$2")); + x22_upper.add(factory.tuple("State$3")); + x22_upper.add(factory.tuple("State$4")); + x22_upper.add(factory.tuple("State$5")); + x22_upper.add(factory.tuple("State$6")); + x22_upper.add(factory.tuple("State$7")); + x22_upper.add(factory.tuple("State$8")); + x22_upper.add(factory.tuple("State$9")); + x22_upper.add(factory.tuple("State$10")); + x22_upper.add(factory.tuple("State$11")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$11"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("State$0")); + x24_upper.add(factory.tuple("State$1")); + x24_upper.add(factory.tuple("State$2")); + x24_upper.add(factory.tuple("State$3")); + x24_upper.add(factory.tuple("State$4")); + x24_upper.add(factory.tuple("State$5")); + x24_upper.add(factory.tuple("State$6")); + x24_upper.add(factory.tuple("State$7")); + x24_upper.add(factory.tuple("State$8")); + x24_upper.add(factory.tuple("State$9")); + x24_upper.add(factory.tuple("State$10")); + x24_upper.add(factory.tuple("State$11")); + bounds.bound(x24, x24_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x27=x6.intersection(x7); + Formula x26=x27.no(); + Expression x29=x9.intersection(x10); + Formula x28=x29.no(); + Expression x31=x11.intersection(x12); + Formula x30=x31.no(); + Expression x33=x13.intersection(x14); + Formula x32=x33.no(); + Variable x36=Variable.unary("Theorem_this"); + Decls x35=x36.oneOf(x15); + Expression x39=x36.join(x17); + Formula x38=x39.one(); + Expression x41=x9.union(x10); + Formula x40=x39.in(x41); + Formula x37=x38.and(x40); + Formula x34=x37.forAll(x35); + Expression x43=x17.join(Expression.UNIV); + Formula x42=x43.in(x15); + Variable x47=Variable.unary("Theorem_this"); + Decls x46=x47.oneOf(x15); + Expression x51=x47.join(x18); + Expression x53=x11.union(x12); + Expression x54=x13.union(x14); + Expression x52=x53.product(x54); + Formula x50=x51.in(x52); + Variable x57=Variable.unary(""); + Decls x56=x57.oneOf(x53); + Expression x60=x57.join(x51); + Formula x59=x60.one(); + Formula x61=x60.in(x54); + Formula x58=x59.and(x61); + Formula x55=x58.forAll(x56); + Formula x49=x50.and(x55); + Variable x64=Variable.unary(""); + Decls x63=x64.oneOf(x54); + Expression x66=x51.join(x64); + Formula x65=x66.in(x53); + Formula x62=x65.forAll(x63); + Formula x48=x49.and(x62); + Formula x45=x48.forAll(x46); + Expression x69=x18.join(Expression.UNIV); + Expression x68=x69.join(Expression.UNIV); + Formula x67=x68.in(x15); + Variable x72=Variable.unary("Theorem_this"); + Decls x71=x72.oneOf(x15); + Expression x75=x72.join(x19); + Formula x74=x75.one(); + Formula x76=x75.in(Expression.INTS); + Formula x73=x74.and(x76); + Formula x70=x73.forAll(x71); + Expression x79=x19.join(Expression.UNIV); + Formula x78=x79.in(x15); + Variable x82=Variable.unary("Theorem_this"); + Decls x81=x82.oneOf(x15); + Expression x86=x82.join(x20); + Expression x87=x6.product(Expression.INTS); + Formula x85=x86.in(x87); + Variable x90=Variable.unary(""); + Decls x89=x90.oneOf(x6); + Expression x93=x90.join(x86); + Formula x92=x93.one(); + Formula x94=x93.in(Expression.INTS); + Formula x91=x92.and(x94); + Formula x88=x91.forAll(x89); + Formula x84=x85.and(x88); + Variable x97=Variable.unary(""); + Decls x96=x97.oneOf(Expression.INTS); + Expression x99=x86.join(x97); + Formula x98=x99.in(x6); + Formula x95=x98.forAll(x96); + Formula x83=x84.and(x95); + Formula x80=x83.forAll(x81); + Expression x102=x20.join(Expression.UNIV); + Expression x101=x102.join(Expression.UNIV); + Formula x100=x101.in(x15); + Variable x105=Variable.unary("Theorem_this"); + Decls x104=x105.oneOf(x15); + Expression x108=x105.join(x21); + Formula x107=x108.one(); + Expression x111=x6.union(x7); + Expression x110=x111.union(x8); + Formula x109=x108.in(x110); + Formula x106=x107.and(x109); + Formula x103=x106.forAll(x104); + Expression x113=x21.join(Expression.UNIV); + Formula x112=x113.in(x15); + Expression x116=x16.product(x22); + Expression x115=x16.join(x116); + Formula x114=x115.in(x15); + Expression x119=x16.product(x23); + Expression x118=x16.join(x119); + Expression x120=x15.product(x15); + Formula x117=x118.in(x120); + Formula x121=x23.totalOrder(x15,x22,x24); + Expression x123=x6.union(x7); + Formula x122=x111.eq(x123); + IntExpression x125=x111.count(); + IntExpression x126=IntConstant.constant(1); + Formula x124=x125.gt(x126); + Expression x128=x11.union(x12); + Formula x127=x53.eq(x128); + Variable x131=Variable.unary("TineSwichedSetToZero_p"); + Decls x130=x131.oneOf(x6); + IntExpression x135=IntConstant.constant(0); + Expression x134=x135.toExpression(); + Expression x133=x131.product(x134); + Expression x136=x22.join(x20); + Formula x132=x133.in(x136); + Formula x129=x132.forAll(x130); + Expression x139=x22.join(x19); + IntExpression x138=x139.sum(); + IntExpression x140=IntConstant.constant(0); + Formula x137=x138.eq(x140); + Variable x143=Variable.unary("SwitchesInBoolean_s"); + Decls x142=x143.oneOf(x53); + Expression x146=x143.product(x14); + Expression x147=x22.join(x18); + Formula x145=x146.in(x147); + Expression x149=x143.product(x13); + Expression x150=x22.join(x18); + Formula x148=x149.in(x150); + Formula x144=x145.or(x148); + Formula x141=x144.forAll(x142); + Expression x152=x22.join(x17); + Formula x151=x152.eq(x10); + Expression x154=x22.join(x21); + Formula x153=x154.eq(x8); + Variable x158=Variable.unary("Theorem_s"); + Decls x157=x158.oneOf(x15); + Variable x160=Variable.unary("Theorem_s'"); + Expression x161=x158.join(x23); + Decls x159=x160.oneOf(x161); + Decls x156=x157.and(x159); + Variable x166=Variable.unary("Theorem_p"); + Decls x165=x166.oneOf(x6); + Formula x169=x166.in(x6); + Expression x173=x160.join(x21); + Formula x172=x173.eq(x166); + Expression x175=x160.join(x19); + Expression x176=x158.join(x19); + Formula x174=x175.eq(x176); + Formula x171=x172.and(x174); + Expression x180=x158.join(x17); + Formula x179=x180.eq(x9); + Expression x183=x160.join(x18); + Expression x184=x158.join(x18); + Formula x182=x183.eq(x184); + Expression x186=x160.join(x20); + Expression x187=x158.join(x20); + Formula x185=x186.eq(x187); + Formula x181=x182.and(x185); + Formula x178=x179.implies(x181); + Formula x189=x179.not(); + Expression x195=x158.join(x18); + Expression x194=x11.join(x195); + Formula x193=x194.eq(x14); + Expression x199=x158.join(x20); + Expression x198=x166.join(x199); + IntExpression x197=x198.sum(); + IntExpression x200=IntConstant.constant(2); + Formula x196=x197.lt(x200); + Formula x192=x193.and(x196); + Expression x205=x160.join(x18); + Expression x204=x11.join(x205); + Formula x203=x204.eq(x13); + Expression x208=x160.join(x18); + Expression x207=x12.join(x208); + Expression x210=x158.join(x18); + Expression x209=x12.join(x210); + Formula x206=x207.eq(x209); + Formula x202=x203.and(x206); + Expression x212=x160.join(x20); + Expression x215=x158.join(x20); + Expression x218=x158.join(x20); + Expression x217=x166.join(x218); + Expression x216=x166.product(x217); + Expression x214=x215.difference(x216); + Expression x224=x158.join(x20); + Expression x223=x166.join(x224); + IntExpression x222=x223.sum(); + IntExpression x225=IntConstant.constant(1); + IntExpression x221=x222.plus(x225); + Expression x220=x221.toExpression(); + Expression x219=x166.product(x220); + Expression x213=x214.union(x219); + Formula x211=x212.eq(x213); + Formula x201=x202.and(x211); + Formula x191=x192.implies(x201); + Formula x227=x192.not(); + Expression x231=x160.join(x20); + Expression x232=x158.join(x20); + Formula x230=x231.eq(x232); + Expression x235=x160.join(x18); + Expression x234=x11.join(x235); + Expression x237=x158.join(x18); + Expression x236=x11.join(x237); + Formula x233=x234.eq(x236); + Formula x229=x230.and(x233); + Expression x242=x158.join(x18); + Expression x241=x12.join(x242); + Formula x240=x241.eq(x13); + Expression x245=x160.join(x18); + Expression x244=x12.join(x245); + Formula x243=x244.eq(x14); + Formula x239=x240.implies(x243); + Formula x247=x240.not(); + Expression x250=x160.join(x18); + Expression x249=x12.join(x250); + Formula x248=x249.eq(x13); + Formula x246=x247.implies(x248); + Formula x238=x239.and(x246); + Formula x228=x229.and(x238); + Formula x226=x227.implies(x228); + Formula x190=x191.and(x226); + Formula x188=x189.implies(x190); + Formula x177=x178.and(x188); + Formula x170=x171.and(x177); + Formula x168=x169.and(x170); + Expression x252=x160.join(x17); + Expression x253=x158.join(x17); + Formula x251=x252.eq(x253); + Formula x167=x168.and(x251); + Expression x164=x167.comprehension(x165); + Formula x163=x164.one(); + Variable x257=Variable.unary("Theorem_p"); + Decls x256=x257.oneOf(x7); + Formula x260=x257.eq(x7); + Expression x263=x160.join(x21); + Formula x262=x263.eq(x257); + Expression x267=x158.join(x17); + Formula x266=x267.eq(x9); + Expression x271=x160.join(x18); + Expression x272=x158.join(x18); + Formula x270=x271.eq(x272); + Expression x274=x160.join(x17); + Expression x275=x158.join(x17); + Formula x273=x274.eq(x275); + Formula x269=x270.and(x273); + Expression x277=x160.join(x19); + Expression x278=x158.join(x19); + Formula x276=x277.eq(x278); + Formula x268=x269.and(x276); + Formula x265=x266.implies(x268); + Formula x280=x266.not(); + Expression x285=x158.join(x18); + Expression x284=x11.join(x285); + Formula x283=x284.eq(x13); + Expression x290=x160.join(x18); + Expression x289=x11.join(x290); + Formula x288=x289.eq(x14); + Expression x294=x160.join(x18); + Expression x293=x12.join(x294); + Expression x296=x158.join(x18); + Expression x295=x12.join(x296); + Formula x292=x293.eq(x295); + Expression x300=x160.join(x19); + IntExpression x303=IntConstant.constant(2); + IntExpression x305=x111.count(); + IntExpression x306=IntConstant.constant(1); + IntExpression x304=x305.minus(x306); + IntExpression x302=x303.multiply(x304); + Expression x301=x302.toExpression(); + Formula x299=x300.eq(x301); + Expression x308=x160.join(x17); + Formula x307=x308.eq(x9); + Formula x298=x299.implies(x307); + Formula x310=x299.not(); + Expression x312=x160.join(x17); + Expression x313=x158.join(x17); + Formula x311=x312.eq(x313); + Formula x309=x310.implies(x311); + Formula x297=x298.and(x309); + Formula x291=x292.and(x297); + Formula x287=x288.and(x291); + Expression x316=x160.join(x19); + IntExpression x315=x316.sum(); + Expression x319=x158.join(x19); + IntExpression x318=x319.sum(); + IntExpression x320=IntConstant.constant(1); + IntExpression x317=x318.plus(x320); + Formula x314=x315.eq(x317); + Formula x286=x287.and(x314); + Formula x282=x283.implies(x286); + Formula x322=x283.not(); + Expression x326=x160.join(x19); + Expression x327=x158.join(x19); + Formula x325=x326.eq(x327); + Expression x330=x160.join(x17); + Expression x331=x158.join(x17); + Formula x329=x330.eq(x331); + Expression x336=x158.join(x18); + Expression x335=x12.join(x336); + Formula x334=x335.eq(x13); + Expression x339=x160.join(x18); + Expression x338=x12.join(x339); + Formula x337=x338.eq(x14); + Formula x333=x334.implies(x337); + Formula x341=x334.not(); + Expression x344=x160.join(x18); + Expression x343=x12.join(x344); + Formula x342=x343.eq(x13); + Formula x340=x341.implies(x342); + Formula x332=x333.and(x340); + Formula x328=x329.and(x332); + Formula x324=x325.and(x328); + Expression x347=x160.join(x18); + Expression x346=x11.join(x347); + Expression x349=x158.join(x18); + Expression x348=x11.join(x349); + Formula x345=x346.eq(x348); + Formula x323=x324.and(x345); + Formula x321=x322.implies(x323); + Formula x281=x282.and(x321); + Formula x279=x280.implies(x281); + Formula x264=x265.and(x279); + Formula x261=x262.and(x264); + Formula x259=x260.and(x261); + Expression x351=x160.join(x20); + Expression x352=x158.join(x20); + Formula x350=x351.eq(x352); + Formula x258=x259.and(x350); + Expression x255=x258.comprehension(x256); + Formula x254=x255.one(); + Formula x162=x163.or(x254); + Formula x155=x162.forAll(x156); + Variable x359=Variable.unary("Fairness_p"); + Decls x358=x359.oneOf(x6); + Variable x363=Variable.unary("Fairness_s"); + Decls x362=x363.oneOf(x15); + Variable x365=Variable.unary("Fairness_s'"); + Decls x364=x365.oneOf(x15); + Decls x361=x362.and(x364); + Expression x370=x23.closure(); + Expression x369=x363.join(x370); + Formula x368=x365.in(x369); + Expression x373=x363.join(x21); + Formula x372=x373.eq(x7); + Expression x376=x363.join(x23); + Expression x375=x376.join(x21); + Formula x374=x375.eq(x359); + Formula x371=x372.and(x374); + Formula x367=x368.and(x371); + Expression x379=x365.join(x21); + Formula x378=x379.eq(x7); + Expression x382=x365.join(x23); + Expression x381=x382.join(x21); + Formula x380=x381.eq(x359); + Formula x377=x378.and(x380); + Formula x366=x367.and(x377); + Formula x360=x366.forSome(x361); + Formula x357=x360.forAll(x358); + Variable x385=Variable.unary("AfterNonCounterPlayerEventaullyCounterPlayertEnterTheRoom_s"); + Decls x384=x385.oneOf(x15); + Expression x389=x385.join(x21); + Formula x388=x389.in(x6); + Formula x387=x388.not(); + Variable x392=Variable.unary("AfterNonCounterPlayerEventaullyCounterPlayertEnterTheRoom_s'"); + Expression x394=x23.closure(); + Expression x393=x385.join(x394); + Decls x391=x392.oneOf(x393); + Expression x396=x392.join(x21); + Formula x395=x396.eq(x7); + Formula x390=x395.forSome(x391); + Formula x386=x387.or(x390); + Formula x383=x386.forAll(x384); + Formula x356=x357.and(x383); + Formula x355=x356.not(); + Variable x399=Variable.unary("Done_s"); + Decls x398=x399.oneOf(x15); + Expression x401=x399.join(x17); + Formula x400=x401.eq(x9); + Formula x397=x400.forSome(x398); + Formula x354=x355.or(x397); + Formula x353=x354.not(); + Formula x402=x0.eq(x0); + Formula x403=x1.eq(x1); + Formula x404=x2.eq(x2); + Formula x405=x3.eq(x3); + Formula x406=x4.eq(x4); + Formula x407=x5.eq(x5); + Formula x408=x6.eq(x6); + Formula x409=x7.eq(x7); + Formula x410=x8.eq(x8); + Formula x411=x9.eq(x9); + Formula x412=x10.eq(x10); + Formula x413=x11.eq(x11); + Formula x414=x12.eq(x12); + Formula x415=x13.eq(x13); + Formula x416=x14.eq(x14); + Formula x417=x15.eq(x15); + Formula x418=x16.eq(x16); + Formula x419=x17.eq(x17); + Formula x420=x18.eq(x18); + Formula x421=x19.eq(x19); + Formula x422=x20.eq(x20); + Formula x423=x21.eq(x21); + Formula x424=x22.eq(x22); + Formula x425=x23.eq(x23); + Formula x426=x24.eq(x24); + Formula x25=Formula.compose(FormulaOperator.AND, x26, x28, x30, x32, x34, x42, x45, x67, x70, x78, x80, x100, x103, x112, x114, x117, x121, x122, x124, x127, x129, x137, x141, x151, x153, x155, x353, x402, x403, x404, x405, x406, x407, x408, x409, x410, x411, x412, x413, x414, x415, x416, x417, x418, x419, x420, x421, x422, x423, x424, x425, x426); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x25,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerTypeOKCheck.java b/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerTypeOKCheck.java new file mode 100644 index 0000000..621ed85 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/puzzle/prisonerRoomVisit/prisonerTypeOKCheck.java @@ -0,0 +1,1468 @@ +package kodkod.examples.models.puzzle.prisonerRoomVisit; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "prisoner", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes =8, + NestedRelationalJoins = 28, + TransitiveClosure = 0, + NestedQuantifiers = 2, + SetCardinality = 3, + Additions = 8, + Subtractions = 0, + Comparison = 51, + OrderedRelations = 1, + Constraints = 55 +) + + +public final class prisonerTypeOKCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/OtherPrisoner"); + Relation x7 = Relation.unary("this/CounterPrisoner"); + Relation x8 = Relation.unary("this/NULL"); + Relation x9 = Relation.unary("this/True"); + Relation x10 = Relation.unary("this/False"); + Relation x11 = Relation.unary("this/SwitcheA"); + Relation x12 = Relation.unary("this/SwitcheB"); + Relation x13 = Relation.unary("this/Up"); + Relation x14 = Relation.unary("this/Down"); + Relation x15 = Relation.unary("this/State"); + Relation x16 = Relation.unary("ordering/Ord"); + Relation x17 = Relation.nary("this/State.announced", 2); + Relation x18 = Relation.nary("this/State.SwitchesStatus", 3); + Relation x19 = Relation.nary("this/State.count", 2); + Relation x20 = Relation.nary("this/State.timesSwitched", 3); + Relation x21 = Relation.nary("this/State.currentPrisoner", 2); + Relation x22 = Relation.unary("ordering/Ord.First"); + Relation x23 = Relation.nary("ordering/Ord.Next", 2); + Relation x24 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "CounterPrisoner$0", + "Down$0", "False$0", "NULL$0", "Prisoner$0", "Prisoner$1", "State$0", + "State$1", "State$10", "State$11", "State$2", "State$3", "State$4", + "State$5", "State$6", "State$7", "State$8", "State$9", "SwitcheA$0", + "SwitcheB$0", "True$0", "Up$0", "ordering/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Prisoner$0")); + x6_upper.add(factory.tuple("Prisoner$1")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("CounterPrisoner$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("NULL$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("True$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("False$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("SwitcheA$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("SwitcheB$0")); + bounds.boundExactly(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Up$0")); + bounds.boundExactly(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("Down$0")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("State$0")); + x15_upper.add(factory.tuple("State$1")); + x15_upper.add(factory.tuple("State$2")); + x15_upper.add(factory.tuple("State$3")); + x15_upper.add(factory.tuple("State$4")); + x15_upper.add(factory.tuple("State$5")); + x15_upper.add(factory.tuple("State$6")); + x15_upper.add(factory.tuple("State$7")); + x15_upper.add(factory.tuple("State$8")); + x15_upper.add(factory.tuple("State$9")); + x15_upper.add(factory.tuple("State$10")); + x15_upper.add(factory.tuple("State$11")); + bounds.boundExactly(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("ordering/Ord$0")); + bounds.boundExactly(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$0").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$1").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$2").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$3").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$4").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$5").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$6").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$7").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$8").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$9").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$10").product(factory.tuple("False$0"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("True$0"))); + x17_upper.add(factory.tuple("State$11").product(factory.tuple("False$0"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$0").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$1").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$2").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$3").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$4").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$5").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$6").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$7").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$8").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$9").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$10").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("SwitcheA$0")).product(factory.tuple("Down$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Up$0"))); + x18_upper.add(factory.tuple("State$11").product(factory.tuple("SwitcheB$0")).product(factory.tuple("Down$0"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$0").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$1").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$2").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$3").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$4").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$5").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$6").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$7").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$8").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$9").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$10").product(factory.tuple("7"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-8"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-7"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-6"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-5"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-4"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-3"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-2"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("-1"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("0"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("1"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("2"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("3"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("4"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("5"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("6"))); + x19_upper.add(factory.tuple("State$11").product(factory.tuple("7"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(3); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0")).product(factory.tuple("7"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-8"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-7"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-6"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-5"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-4"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-3"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-2"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("-1"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("0"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("1"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("2"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("3"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("4"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("5"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("6"))); + x20_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1")).product(factory.tuple("7"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$0").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$1").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$2").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$3").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$4").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$5").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$6").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$7").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$8").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$9").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$10").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$10").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$10").product(factory.tuple("NULL$0"))); + x21_upper.add(factory.tuple("State$11").product(factory.tuple("CounterPrisoner$0"))); + x21_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$0"))); + x21_upper.add(factory.tuple("State$11").product(factory.tuple("Prisoner$1"))); + x21_upper.add(factory.tuple("State$11").product(factory.tuple("NULL$0"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("State$0")); + x22_upper.add(factory.tuple("State$1")); + x22_upper.add(factory.tuple("State$2")); + x22_upper.add(factory.tuple("State$3")); + x22_upper.add(factory.tuple("State$4")); + x22_upper.add(factory.tuple("State$5")); + x22_upper.add(factory.tuple("State$6")); + x22_upper.add(factory.tuple("State$7")); + x22_upper.add(factory.tuple("State$8")); + x22_upper.add(factory.tuple("State$9")); + x22_upper.add(factory.tuple("State$10")); + x22_upper.add(factory.tuple("State$11")); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$0").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$1").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$2").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$3").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$4").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$5").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$6").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$7").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$8").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$9").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$10").product(factory.tuple("State$11"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$0"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$1"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$2"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$3"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$4"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$5"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$6"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$7"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$8"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$9"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$10"))); + x23_upper.add(factory.tuple("State$11").product(factory.tuple("State$11"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(1); + x24_upper.add(factory.tuple("State$0")); + x24_upper.add(factory.tuple("State$1")); + x24_upper.add(factory.tuple("State$2")); + x24_upper.add(factory.tuple("State$3")); + x24_upper.add(factory.tuple("State$4")); + x24_upper.add(factory.tuple("State$5")); + x24_upper.add(factory.tuple("State$6")); + x24_upper.add(factory.tuple("State$7")); + x24_upper.add(factory.tuple("State$8")); + x24_upper.add(factory.tuple("State$9")); + x24_upper.add(factory.tuple("State$10")); + x24_upper.add(factory.tuple("State$11")); + bounds.bound(x24, x24_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x27=x6.intersection(x7); + Formula x26=x27.no(); + Expression x29=x9.intersection(x10); + Formula x28=x29.no(); + Expression x31=x11.intersection(x12); + Formula x30=x31.no(); + Expression x33=x13.intersection(x14); + Formula x32=x33.no(); + Variable x36=Variable.unary("TypeOK_this"); + Decls x35=x36.oneOf(x15); + Expression x39=x36.join(x17); + Formula x38=x39.one(); + Expression x41=x9.union(x10); + Formula x40=x39.in(x41); + Formula x37=x38.and(x40); + Formula x34=x37.forAll(x35); + Expression x43=x17.join(Expression.UNIV); + Formula x42=x43.in(x15); + Variable x47=Variable.unary("TypeOK_this"); + Decls x46=x47.oneOf(x15); + Expression x51=x47.join(x18); + Expression x53=x11.union(x12); + Expression x54=x13.union(x14); + Expression x52=x53.product(x54); + Formula x50=x51.in(x52); + Variable x57=Variable.unary(""); + Decls x56=x57.oneOf(x53); + Expression x60=x57.join(x51); + Formula x59=x60.one(); + Formula x61=x60.in(x54); + Formula x58=x59.and(x61); + Formula x55=x58.forAll(x56); + Formula x49=x50.and(x55); + Variable x64=Variable.unary(""); + Decls x63=x64.oneOf(x54); + Expression x66=x51.join(x64); + Formula x65=x66.in(x53); + Formula x62=x65.forAll(x63); + Formula x48=x49.and(x62); + Formula x45=x48.forAll(x46); + Expression x69=x18.join(Expression.UNIV); + Expression x68=x69.join(Expression.UNIV); + Formula x67=x68.in(x15); + Variable x72=Variable.unary("TypeOK_this"); + Decls x71=x72.oneOf(x15); + Expression x75=x72.join(x19); + Formula x74=x75.one(); + Formula x76=x75.in(Expression.INTS); + Formula x73=x74.and(x76); + Formula x70=x73.forAll(x71); + Expression x79=x19.join(Expression.UNIV); + Formula x78=x79.in(x15); + Variable x82=Variable.unary("TypeOK_this"); + Decls x81=x82.oneOf(x15); + Expression x86=x82.join(x20); + Expression x87=x6.product(Expression.INTS); + Formula x85=x86.in(x87); + Variable x90=Variable.unary(""); + Decls x89=x90.oneOf(x6); + Expression x93=x90.join(x86); + Formula x92=x93.one(); + Formula x94=x93.in(Expression.INTS); + Formula x91=x92.and(x94); + Formula x88=x91.forAll(x89); + Formula x84=x85.and(x88); + Variable x97=Variable.unary(""); + Decls x96=x97.oneOf(Expression.INTS); + Expression x99=x86.join(x97); + Formula x98=x99.in(x6); + Formula x95=x98.forAll(x96); + Formula x83=x84.and(x95); + Formula x80=x83.forAll(x81); + Expression x102=x20.join(Expression.UNIV); + Expression x101=x102.join(Expression.UNIV); + Formula x100=x101.in(x15); + Variable x105=Variable.unary("TypeOK_this"); + Decls x104=x105.oneOf(x15); + Expression x108=x105.join(x21); + Formula x107=x108.one(); + Expression x111=x6.union(x7); + Expression x110=x111.union(x8); + Formula x109=x108.in(x110); + Formula x106=x107.and(x109); + Formula x103=x106.forAll(x104); + Expression x113=x21.join(Expression.UNIV); + Formula x112=x113.in(x15); + Expression x116=x16.product(x22); + Expression x115=x16.join(x116); + Formula x114=x115.in(x15); + Expression x119=x16.product(x23); + Expression x118=x16.join(x119); + Expression x120=x15.product(x15); + Formula x117=x118.in(x120); + Formula x121=x23.totalOrder(x15,x22,x24); + Expression x123=x6.union(x7); + Formula x122=x111.eq(x123); + IntExpression x125=x111.count(); + IntExpression x126=IntConstant.constant(1); + Formula x124=x125.gt(x126); + Expression x128=x11.union(x12); + Formula x127=x53.eq(x128); + Variable x131=Variable.unary("TineSwichedSetToZero_p"); + Decls x130=x131.oneOf(x6); + IntExpression x135=IntConstant.constant(0); + Expression x134=x135.toExpression(); + Expression x133=x131.product(x134); + Expression x136=x22.join(x20); + Formula x132=x133.in(x136); + Formula x129=x132.forAll(x130); + Expression x139=x22.join(x19); + IntExpression x138=x139.sum(); + IntExpression x140=IntConstant.constant(0); + Formula x137=x138.eq(x140); + Variable x143=Variable.unary("SwitchesInBoolean_s"); + Decls x142=x143.oneOf(x53); + Expression x146=x143.product(x14); + Expression x147=x22.join(x18); + Formula x145=x146.in(x147); + Expression x149=x143.product(x13); + Expression x150=x22.join(x18); + Formula x148=x149.in(x150); + Formula x144=x145.or(x148); + Formula x141=x144.forAll(x142); + Expression x152=x22.join(x17); + Formula x151=x152.eq(x10); + Expression x154=x22.join(x21); + Formula x153=x154.eq(x8); + Variable x158=Variable.unary("TypeOK_s"); + Decls x157=x158.oneOf(x15); + Variable x160=Variable.unary("TypeOK_s'"); + Expression x161=x158.join(x23); + Decls x159=x160.oneOf(x161); + Decls x156=x157.and(x159); + Variable x166=Variable.unary("TypeOK_p"); + Decls x165=x166.oneOf(x6); + Formula x169=x166.in(x6); + Expression x173=x160.join(x21); + Formula x172=x173.eq(x166); + Expression x175=x160.join(x19); + Expression x176=x158.join(x19); + Formula x174=x175.eq(x176); + Formula x171=x172.and(x174); + Expression x180=x158.join(x17); + Formula x179=x180.eq(x9); + Expression x183=x160.join(x18); + Expression x184=x158.join(x18); + Formula x182=x183.eq(x184); + Expression x186=x160.join(x20); + Expression x187=x158.join(x20); + Formula x185=x186.eq(x187); + Formula x181=x182.and(x185); + Formula x178=x179.implies(x181); + Formula x189=x179.not(); + Expression x195=x158.join(x18); + Expression x194=x11.join(x195); + Formula x193=x194.eq(x14); + Expression x199=x158.join(x20); + Expression x198=x166.join(x199); + IntExpression x197=x198.sum(); + IntExpression x200=IntConstant.constant(2); + Formula x196=x197.lt(x200); + Formula x192=x193.and(x196); + Expression x205=x160.join(x18); + Expression x204=x11.join(x205); + Formula x203=x204.eq(x13); + Expression x208=x160.join(x18); + Expression x207=x12.join(x208); + Expression x210=x158.join(x18); + Expression x209=x12.join(x210); + Formula x206=x207.eq(x209); + Formula x202=x203.and(x206); + Expression x212=x160.join(x20); + Expression x215=x158.join(x20); + Expression x218=x158.join(x20); + Expression x217=x166.join(x218); + Expression x216=x166.product(x217); + Expression x214=x215.difference(x216); + Expression x224=x158.join(x20); + Expression x223=x166.join(x224); + IntExpression x222=x223.sum(); + IntExpression x225=IntConstant.constant(1); + IntExpression x221=x222.plus(x225); + Expression x220=x221.toExpression(); + Expression x219=x166.product(x220); + Expression x213=x214.union(x219); + Formula x211=x212.eq(x213); + Formula x201=x202.and(x211); + Formula x191=x192.implies(x201); + Formula x227=x192.not(); + Expression x231=x160.join(x20); + Expression x232=x158.join(x20); + Formula x230=x231.eq(x232); + Expression x235=x160.join(x18); + Expression x234=x11.join(x235); + Expression x237=x158.join(x18); + Expression x236=x11.join(x237); + Formula x233=x234.eq(x236); + Formula x229=x230.and(x233); + Expression x242=x158.join(x18); + Expression x241=x12.join(x242); + Formula x240=x241.eq(x13); + Expression x245=x160.join(x18); + Expression x244=x12.join(x245); + Formula x243=x244.eq(x14); + Formula x239=x240.implies(x243); + Formula x247=x240.not(); + Expression x250=x160.join(x18); + Expression x249=x12.join(x250); + Formula x248=x249.eq(x13); + Formula x246=x247.implies(x248); + Formula x238=x239.and(x246); + Formula x228=x229.and(x238); + Formula x226=x227.implies(x228); + Formula x190=x191.and(x226); + Formula x188=x189.implies(x190); + Formula x177=x178.and(x188); + Formula x170=x171.and(x177); + Formula x168=x169.and(x170); + Expression x252=x160.join(x17); + Expression x253=x158.join(x17); + Formula x251=x252.eq(x253); + Formula x167=x168.and(x251); + Expression x164=x167.comprehension(x165); + Formula x163=x164.one(); + Variable x257=Variable.unary("TypeOK_p"); + Decls x256=x257.oneOf(x7); + Formula x260=x257.eq(x7); + Expression x263=x160.join(x21); + Formula x262=x263.eq(x257); + Expression x267=x158.join(x17); + Formula x266=x267.eq(x9); + Expression x271=x160.join(x18); + Expression x272=x158.join(x18); + Formula x270=x271.eq(x272); + Expression x274=x160.join(x17); + Expression x275=x158.join(x17); + Formula x273=x274.eq(x275); + Formula x269=x270.and(x273); + Expression x277=x160.join(x19); + Expression x278=x158.join(x19); + Formula x276=x277.eq(x278); + Formula x268=x269.and(x276); + Formula x265=x266.implies(x268); + Formula x280=x266.not(); + Expression x285=x158.join(x18); + Expression x284=x11.join(x285); + Formula x283=x284.eq(x13); + Expression x290=x160.join(x18); + Expression x289=x11.join(x290); + Formula x288=x289.eq(x14); + Expression x294=x160.join(x18); + Expression x293=x12.join(x294); + Expression x296=x158.join(x18); + Expression x295=x12.join(x296); + Formula x292=x293.eq(x295); + Expression x300=x160.join(x19); + IntExpression x303=IntConstant.constant(2); + IntExpression x305=x111.count(); + IntExpression x306=IntConstant.constant(1); + IntExpression x304=x305.minus(x306); + IntExpression x302=x303.multiply(x304); + Expression x301=x302.toExpression(); + Formula x299=x300.eq(x301); + Expression x308=x160.join(x17); + Formula x307=x308.eq(x9); + Formula x298=x299.implies(x307); + Formula x310=x299.not(); + Expression x312=x160.join(x17); + Expression x313=x158.join(x17); + Formula x311=x312.eq(x313); + Formula x309=x310.implies(x311); + Formula x297=x298.and(x309); + Formula x291=x292.and(x297); + Formula x287=x288.and(x291); + Expression x316=x160.join(x19); + IntExpression x315=x316.sum(); + Expression x319=x158.join(x19); + IntExpression x318=x319.sum(); + IntExpression x320=IntConstant.constant(1); + IntExpression x317=x318.plus(x320); + Formula x314=x315.eq(x317); + Formula x286=x287.and(x314); + Formula x282=x283.implies(x286); + Formula x322=x283.not(); + Expression x326=x160.join(x19); + Expression x327=x158.join(x19); + Formula x325=x326.eq(x327); + Expression x330=x160.join(x17); + Expression x331=x158.join(x17); + Formula x329=x330.eq(x331); + Expression x336=x158.join(x18); + Expression x335=x12.join(x336); + Formula x334=x335.eq(x13); + Expression x339=x160.join(x18); + Expression x338=x12.join(x339); + Formula x337=x338.eq(x14); + Formula x333=x334.implies(x337); + Formula x341=x334.not(); + Expression x344=x160.join(x18); + Expression x343=x12.join(x344); + Formula x342=x343.eq(x13); + Formula x340=x341.implies(x342); + Formula x332=x333.and(x340); + Formula x328=x329.and(x332); + Formula x324=x325.and(x328); + Expression x347=x160.join(x18); + Expression x346=x11.join(x347); + Expression x349=x158.join(x18); + Expression x348=x11.join(x349); + Formula x345=x346.eq(x348); + Formula x323=x324.and(x345); + Formula x321=x322.implies(x323); + Formula x281=x282.and(x321); + Formula x279=x280.implies(x281); + Formula x264=x265.and(x279); + Formula x261=x262.and(x264); + Formula x259=x260.and(x261); + Expression x351=x160.join(x20); + Expression x352=x158.join(x20); + Formula x350=x351.eq(x352); + Formula x258=x259.and(x350); + Expression x255=x258.comprehension(x256); + Formula x254=x255.one(); + Formula x162=x163.or(x254); + Formula x155=x162.forAll(x156); + Variable x356=Variable.unary("TypeOK_s"); + Decls x355=x356.oneOf(x15); + Expression x361=x356.join(x19); + IntExpression x360=x361.sum(); + IntExpression x362=IntConstant.constant(0); + Formula x359=x360.gte(x362); + Expression x365=x356.join(x19); + IntExpression x364=x365.sum(); + IntExpression x367=IntConstant.constant(2); + IntExpression x369=x111.count(); + IntExpression x370=IntConstant.constant(1); + IntExpression x368=x369.minus(x370); + IntExpression x366=x367.multiply(x368); + Formula x363=x364.lte(x366); + Formula x358=x359.and(x363); + Variable x373=Variable.unary("TypeOK_p"); + Decls x372=x373.oneOf(x6); + Expression x377=x356.join(x20); + Expression x376=x373.join(x377); + IntExpression x375=x376.sum(); + IntExpression x378=IntConstant.constant(2); + Formula x374=x375.lte(x378); + Formula x371=x374.forAll(x372); + Formula x357=x358.and(x371); + Formula x354=x357.forAll(x355); + Formula x353=x354.not(); + Formula x379=x0.eq(x0); + Formula x380=x1.eq(x1); + Formula x381=x2.eq(x2); + Formula x382=x3.eq(x3); + Formula x383=x4.eq(x4); + Formula x384=x5.eq(x5); + Formula x385=x6.eq(x6); + Formula x386=x7.eq(x7); + Formula x387=x8.eq(x8); + Formula x388=x9.eq(x9); + Formula x389=x10.eq(x10); + Formula x390=x11.eq(x11); + Formula x391=x12.eq(x12); + Formula x392=x13.eq(x13); + Formula x393=x14.eq(x14); + Formula x394=x15.eq(x15); + Formula x395=x16.eq(x16); + Formula x396=x17.eq(x17); + Formula x397=x18.eq(x18); + Formula x398=x19.eq(x19); + Formula x399=x20.eq(x20); + Formula x400=x21.eq(x21); + Formula x401=x22.eq(x22); + Formula x402=x23.eq(x23); + Formula x403=x24.eq(x24); + Formula x25=Formula.compose(FormulaOperator.AND, x26, x28, x30, x32, x34, x42, x45, x67, x70, x78, x80, x100, x103, x112, x114, x117, x121, x122, x124, x127, x129, x137, x141, x151, x153, x155, x353, x379, x380, x381, x382, x383, x384, x385, x386, x387, x388, x389, x390, x391, x392, x393, x394, x395, x396, x397, x398, x399, x400, x401, x402, x403); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x25,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/book/birthdayAddWorksCheck.java b/Source/kodkod/examples/kodkod/examples/models/simple/book/birthdayAddWorksCheck.java new file mode 100644 index 0000000..8dbff43 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/book/birthdayAddWorksCheck.java @@ -0,0 +1,247 @@ +package kodkod.examples.models.simple.book; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "birthday", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 6, + OrderedRelations = 0, + Constraints = 11 +) + + + +public final class birthdayAddWorksCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Name"); + Relation x7 = Relation.unary("this/Date"); + Relation x8 = Relation.unary("this/BirthdayBook"); + Relation x9 = Relation.nary("this/BirthdayBook.known", 2); + Relation x10 = Relation.nary("this/BirthdayBook.date", 3); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "BirthdayBook$0", + "BirthdayBook$1", "Date$0", "Date$1", "Date$2", "Name$0", "Name$1", + "Name$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Name$0")); + x6_upper.add(factory.tuple("Name$1")); + x6_upper.add(factory.tuple("Name$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Date$0")); + x7_upper.add(factory.tuple("Date$1")); + x7_upper.add(factory.tuple("Date$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("BirthdayBook$0")); + x8_upper.add(factory.tuple("BirthdayBook$1")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$0"))); + x9_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$1"))); + x9_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$2"))); + x9_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$0"))); + x9_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$1"))); + x9_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$2"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(3); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$0")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$0")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$0")).product(factory.tuple("Date$2"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$1")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$1")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$1")).product(factory.tuple("Date$2"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$2")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$2")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$2")).product(factory.tuple("Date$2"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$0")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$0")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$0")).product(factory.tuple("Date$2"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$1")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$1")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$1")).product(factory.tuple("Date$2"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$2")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$2")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$2")).product(factory.tuple("Date$2"))); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x14=Variable.unary("AddWorks_this"); + Decls x13=x14.oneOf(x8); + Expression x16=x14.join(x9); + Formula x15=x16.in(x6); + Formula x12=x15.forAll(x13); + Expression x18=x9.join(Expression.UNIV); + Formula x17=x18.in(x8); + Variable x22=Variable.unary("AddWorks_this"); + Decls x21=x22.oneOf(x8); + Expression x26=x22.join(x10); + Expression x28=x22.join(x9); + Expression x27=x28.product(x7); + Formula x25=x26.in(x27); + Variable x31=Variable.unary(""); + Decls x30=x31.oneOf(x28); + Expression x34=x31.join(x26); + Formula x33=x34.one(); + Formula x35=x34.in(x7); + Formula x32=x33.and(x35); + Formula x29=x32.forAll(x30); + Formula x24=x25.and(x29); + Variable x38=Variable.unary(""); + Decls x37=x38.oneOf(x7); + Expression x40=x26.join(x38); + Expression x41=x22.join(x9); + Formula x39=x40.in(x41); + Formula x36=x39.forAll(x37); + Formula x23=x24.and(x36); + Formula x20=x23.forAll(x21); + Expression x44=x10.join(Expression.UNIV); + Expression x43=x44.join(Expression.UNIV); + Formula x42=x43.in(x8); + Variable x49=Variable.unary("AddWorks_bb"); + Decls x48=x49.oneOf(x8); + Variable x51=Variable.unary("AddWorks_bb'"); + Decls x50=x51.oneOf(x8); + Variable x53=Variable.unary("AddWorks_n"); + Decls x52=x53.oneOf(x6); + Variable x55=Variable.unary("AddWorks_d"); + Decls x54=x55.oneOf(x7); + Variable x57=Variable.unary("AddWorks_d'"); + Decls x56=x57.loneOf(x7); + Decls x47=x48.and(x50).and(x52).and(x54).and(x56); + Expression x62=x51.join(x10); + Expression x64=x49.join(x10); + Expression x65=x53.product(x55); + Expression x63=x64.override(x65); + Formula x61=x62.eq(x63); + Expression x68=x51.join(x10); + Expression x67=x53.join(x68); + Formula x66=x57.eq(x67); + Formula x60=x61.and(x66); + Formula x59=x60.not(); + Formula x69=x55.eq(x57); + Formula x58=x59.or(x69); + Formula x46=x58.forAll(x47); + Formula x45=x46.not(); + Formula x70=x0.eq(x0); + Formula x71=x1.eq(x1); + Formula x72=x2.eq(x2); + Formula x73=x3.eq(x3); + Formula x74=x4.eq(x4); + Formula x75=x5.eq(x5); + Formula x76=x6.eq(x6); + Formula x77=x7.eq(x7); + Formula x78=x8.eq(x8); + Formula x79=x9.eq(x9); + Formula x80=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x17, x20, x42, x45, x70, x71, x72, x73, x74, x75, x76, x77, x78, x79, x80); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/book/birthdayBusyDayRun.java b/Source/kodkod/examples/kodkod/examples/models/simple/book/birthdayBusyDayRun.java new file mode 100644 index 0000000..daf121f --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/book/birthdayBusyDayRun.java @@ -0,0 +1,223 @@ +package kodkod.examples.models.simple.book; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "birthday", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 6, + OrderedRelations = 0, + Constraints = 11 +) + + + +public final class birthdayBusyDayRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Name"); + Relation x7 = Relation.unary("this/Date"); + Relation x8 = Relation.unary("this/BirthdayBook"); + Relation x9 = Relation.nary("this/BirthdayBook.known", 2); + Relation x10 = Relation.nary("this/BirthdayBook.date", 3); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "BirthdayBook$0", + "Date$0", "Date$1", "Date$2", "Name$0", "Name$1", "Name$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Name$0")); + x6_upper.add(factory.tuple("Name$1")); + x6_upper.add(factory.tuple("Name$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Date$0")); + x7_upper.add(factory.tuple("Date$1")); + x7_upper.add(factory.tuple("Date$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("BirthdayBook$0")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$0"))); + x9_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$1"))); + x9_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$2"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(3); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$0")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$0")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$0")).product(factory.tuple("Date$2"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$1")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$1")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$1")).product(factory.tuple("Date$2"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$2")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$2")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$2")).product(factory.tuple("Date$2"))); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x14=Variable.unary("BusyDay_this"); + Decls x13=x14.oneOf(x8); + Expression x16=x14.join(x9); + Formula x15=x16.in(x6); + Formula x12=x15.forAll(x13); + Expression x18=x9.join(Expression.UNIV); + Formula x17=x18.in(x8); + Variable x22=Variable.unary("BusyDay_this"); + Decls x21=x22.oneOf(x8); + Expression x26=x22.join(x10); + Expression x28=x22.join(x9); + Expression x27=x28.product(x7); + Formula x25=x26.in(x27); + Variable x31=Variable.unary(""); + Decls x30=x31.oneOf(x28); + Expression x34=x31.join(x26); + Formula x33=x34.one(); + Formula x35=x34.in(x7); + Formula x32=x33.and(x35); + Formula x29=x32.forAll(x30); + Formula x24=x25.and(x29); + Variable x38=Variable.unary(""); + Decls x37=x38.oneOf(x7); + Expression x40=x26.join(x38); + Expression x41=x22.join(x9); + Formula x39=x40.in(x41); + Formula x36=x39.forAll(x37); + Formula x23=x24.and(x36); + Formula x20=x23.forAll(x21); + Expression x44=x10.join(Expression.UNIV); + Expression x43=x44.join(Expression.UNIV); + Formula x42=x43.in(x8); + Variable x48=Variable.unary("BusyDay_bb"); + Decls x47=x48.oneOf(x8); + Variable x50=Variable.unary("BusyDay_d"); + Decls x49=x50.oneOf(x7); + Decls x46=x47.and(x49); + Variable x53=Variable.unary("BusyDay_cards"); + Decls x52=x53.setOf(x6); + Expression x57=x48.join(x10); + Expression x56=x57.join(x50); + Formula x55=x53.eq(x56); + Formula x59=x53.lone(); + Formula x58=x59.not(); + Formula x54=x55.and(x58); + Formula x51=x54.forSome(x52); + Formula x45=x51.forSome(x46); + Formula x60=x0.eq(x0); + Formula x61=x1.eq(x1); + Formula x62=x2.eq(x2); + Formula x63=x3.eq(x3); + Formula x64=x4.eq(x4); + Formula x65=x5.eq(x5); + Formula x66=x6.eq(x6); + Formula x67=x7.eq(x7); + Formula x68=x8.eq(x8); + Formula x69=x9.eq(x9); + Formula x70=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x17, x20, x42, x45, x60, x61, x62, x63, x64, x65, x66, x67, x68, x69, x70); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/book/birthdayDellsUndoCheck.java b/Source/kodkod/examples/kodkod/examples/models/simple/book/birthdayDellsUndoCheck.java new file mode 100644 index 0000000..e70a58d --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/book/birthdayDellsUndoCheck.java @@ -0,0 +1,251 @@ +package kodkod.examples.models.simple.book; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "birthday", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 6, + OrderedRelations = 0, + Constraints = 11 +) + + + +public final class birthdayDellsUndoCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Name"); + Relation x7 = Relation.unary("this/Date"); + Relation x8 = Relation.unary("this/BirthdayBook"); + Relation x9 = Relation.nary("this/BirthdayBook.known", 2); + Relation x10 = Relation.nary("this/BirthdayBook.date", 3); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "BirthdayBook$0", + "BirthdayBook$1", "Date$0", "Date$1", "Date$2", "Name$0", "Name$1", + "Name$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Name$0")); + x6_upper.add(factory.tuple("Name$1")); + x6_upper.add(factory.tuple("Name$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Date$0")); + x7_upper.add(factory.tuple("Date$1")); + x7_upper.add(factory.tuple("Date$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("BirthdayBook$0")); + x8_upper.add(factory.tuple("BirthdayBook$1")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$0"))); + x9_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$1"))); + x9_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$2"))); + x9_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$0"))); + x9_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$1"))); + x9_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$2"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(3); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$0")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$0")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$0")).product(factory.tuple("Date$2"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$1")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$1")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$1")).product(factory.tuple("Date$2"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$2")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$2")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$0").product(factory.tuple("Name$2")).product(factory.tuple("Date$2"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$0")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$0")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$0")).product(factory.tuple("Date$2"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$1")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$1")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$1")).product(factory.tuple("Date$2"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$2")).product(factory.tuple("Date$0"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$2")).product(factory.tuple("Date$1"))); + x10_upper.add(factory.tuple("BirthdayBook$1").product(factory.tuple("Name$2")).product(factory.tuple("Date$2"))); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x14=Variable.unary("DelIsUndo_this"); + Decls x13=x14.oneOf(x8); + Expression x16=x14.join(x9); + Formula x15=x16.in(x6); + Formula x12=x15.forAll(x13); + Expression x18=x9.join(Expression.UNIV); + Formula x17=x18.in(x8); + Variable x22=Variable.unary("DelIsUndo_this"); + Decls x21=x22.oneOf(x8); + Expression x26=x22.join(x10); + Expression x28=x22.join(x9); + Expression x27=x28.product(x7); + Formula x25=x26.in(x27); + Variable x31=Variable.unary(""); + Decls x30=x31.oneOf(x28); + Expression x34=x31.join(x26); + Formula x33=x34.one(); + Formula x35=x34.in(x7); + Formula x32=x33.and(x35); + Formula x29=x32.forAll(x30); + Formula x24=x25.and(x29); + Variable x38=Variable.unary(""); + Decls x37=x38.oneOf(x7); + Expression x40=x26.join(x38); + Expression x41=x22.join(x9); + Formula x39=x40.in(x41); + Formula x36=x39.forAll(x37); + Formula x23=x24.and(x36); + Formula x20=x23.forAll(x21); + Expression x44=x10.join(Expression.UNIV); + Expression x43=x44.join(Expression.UNIV); + Formula x42=x43.in(x8); + Variable x49=Variable.unary("DelIsUndo_bb1"); + Decls x48=x49.oneOf(x8); + Variable x51=Variable.unary("DelIsUndo_bb2"); + Decls x50=x51.oneOf(x8); + Variable x53=Variable.unary("DelIsUndo_bb3"); + Decls x52=x53.oneOf(x8); + Variable x55=Variable.unary("DelIsUndo_n"); + Decls x54=x55.oneOf(x6); + Variable x57=Variable.unary("DelIsUndo_d"); + Decls x56=x57.oneOf(x7); + Decls x47=x48.and(x50).and(x52).and(x54).and(x56); + Expression x62=x51.join(x10); + Expression x64=x49.join(x10); + Expression x65=x55.product(x57); + Expression x63=x64.override(x65); + Formula x61=x62.eq(x63); + Expression x67=x53.join(x10); + Expression x69=x51.join(x10); + Expression x70=x55.product(x7); + Expression x68=x69.difference(x70); + Formula x66=x67.eq(x68); + Formula x60=x61.and(x66); + Formula x59=x60.not(); + Expression x72=x49.join(x10); + Expression x73=x53.join(x10); + Formula x71=x72.eq(x73); + Formula x58=x59.or(x71); + Formula x46=x58.forAll(x47); + Formula x45=x46.not(); + Formula x74=x0.eq(x0); + Formula x75=x1.eq(x1); + Formula x76=x2.eq(x2); + Formula x77=x3.eq(x3); + Formula x78=x4.eq(x4); + Formula x79=x5.eq(x5); + Formula x80=x6.eq(x6); + Formula x81=x7.eq(x7); + Formula x82=x8.eq(x8); + Formula x83=x9.eq(x9); + Formula x84=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x17, x20, x42, x45, x74, x75, x76, x77, x78, x79, x80, x81, x82, x83, x84); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/games/lifeInterestingRun.java b/Source/kodkod/examples/kodkod/examples/models/simple/games/lifeInterestingRun.java new file mode 100644 index 0000000..ca7e61c --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/games/lifeInterestingRun.java @@ -0,0 +1,469 @@ +package kodkod.examples.models.simple.games; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "life", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =1, + NestedRelationalJoins = 7, + TransitiveClosure = 4, + NestedQuantifiers = 1, + SetCardinality = 5, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 1, + Constraints = 18 +) + + + +public final class lifeInterestingRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Root"); + Relation x7 = Relation.unary("this/Point remainder"); + Relation x8 = Relation.unary("this/State"); + Relation x9 = Relation.unary("ord/Ord"); + Relation x10 = Relation.nary("this/Point.right", 2); + Relation x11 = Relation.nary("this/Point.below", 2); + Relation x12 = Relation.nary("this/State.live", 2); + Relation x13 = Relation.unary("ord/Ord.First"); + Relation x14 = Relation.nary("ord/Ord.Next", 2); + Relation x15 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Point$0", + "Point$1", "Point$2", "Point$3", "Point$4", "Root$0", "State$0", + "State$1", "State$2", "ord/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Root$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Point$0")); + x7_upper.add(factory.tuple("Point$1")); + x7_upper.add(factory.tuple("Point$2")); + x7_upper.add(factory.tuple("Point$3")); + x7_upper.add(factory.tuple("Point$4")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("ord/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$4"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$4"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$1"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$2"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$3"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$4"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$1"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$2"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$3"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$4"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$1"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$2"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$3"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$4"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("State$0")); + x13_upper.add(factory.tuple("State$1")); + x13_upper.add(factory.tuple("State$2")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("State$0")); + x15_upper.add(factory.tuple("State$1")); + x15_upper.add(factory.tuple("State$2")); + bounds.bound(x15, x15_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x19=Variable.unary("interesting_this"); + Expression x20=x6.union(x7); + Decls x18=x19.oneOf(x20); + Expression x23=x19.join(x10); + Formula x22=x23.lone(); + Formula x24=x23.in(x20); + Formula x21=x22.and(x24); + Formula x17=x21.forAll(x18); + Expression x26=x10.join(Expression.UNIV); + Formula x25=x26.in(x20); + Variable x30=Variable.unary("interesting_this"); + Decls x29=x30.oneOf(x20); + Expression x33=x30.join(x11); + Formula x32=x33.lone(); + Formula x34=x33.in(x20); + Formula x31=x32.and(x34); + Formula x28=x31.forAll(x29); + Expression x36=x11.join(Expression.UNIV); + Formula x35=x36.in(x20); + Variable x39=Variable.unary("interesting_this"); + Decls x38=x39.oneOf(x8); + Expression x41=x39.join(x12); + Formula x40=x41.in(x20); + Formula x37=x40.forAll(x38); + Expression x43=x12.join(Expression.UNIV); + Formula x42=x43.in(x8); + Expression x46=x9.product(x13); + Expression x45=x9.join(x46); + Formula x44=x45.in(x8); + Expression x49=x9.product(x14); + Expression x48=x9.join(x49); + Expression x50=x8.product(x8); + Formula x47=x48.in(x50); + Formula x51=x14.totalOrder(x8,x13,x15); + Variable x54=Variable.unary("interesting_p"); + Decls x53=x54.oneOf(x20); + Expression x59=x10.union(x11); + Expression x58=x59.closure(); + Expression x57=x54.join(x58); + Formula x56=x54.in(x57); + Formula x55=x56.not(); + Formula x52=x55.forAll(x53); + Variable x62=Variable.unary("interesting_p"); + Decls x61=x62.oneOf(x20); + Expression x66=x62.join(x11); + Expression x65=x66.join(x10); + Expression x68=x62.join(x10); + Expression x67=x68.join(x11); + Formula x64=x65.eq(x67); + Expression x73=x62.join(x11); + Formula x72=x73.some(); + Expression x75=x62.join(x10); + Formula x74=x75.some(); + Formula x71=x72.and(x74); + Formula x70=x71.not(); + Expression x78=x62.join(x11); + Expression x77=x78.join(x10); + Formula x76=x77.some(); + Formula x69=x70.or(x76); + Formula x63=x64.and(x69); + Formula x60=x63.forAll(x61); + Variable x81=Variable.unary("interesting_p"); + Expression x82=x20.difference(x6); + Decls x80=x81.oneOf(x82); + Expression x87=x11.transpose(); + Expression x86=x81.join(x87); + Formula x85=x86.no(); + Formula x84=x85.not(); + Expression x92=x11.closure(); + Expression x99=Expression.INTS.union(x5); + Expression x98=x99.union(x20); + Expression x97=x98.union(x8); + Expression x96=x97.union(x9); + Expression x95=x96.product(Expression.UNIV); + Expression x93=Expression.IDEN.intersection(x95); + Expression x91=x92.union(x93); + Expression x90=x81.join(x91); + IntExpression x89=x90.count(); + Expression x104=x11.closure(); + Expression x106=x96.product(Expression.UNIV); + Expression x105=Expression.IDEN.intersection(x106); + Expression x103=x104.union(x105); + Expression x102=x6.join(x103); + IntExpression x101=x102.count(); + Formula x88=x89.eq(x101); + Formula x83=x84.or(x88); + Formula x79=x83.forAll(x80); + Expression x111=x10.union(x11); + Expression x110=x111.closure(); + Expression x113=x96.product(Expression.UNIV); + Expression x112=Expression.IDEN.intersection(x113); + Expression x109=x110.union(x112); + Expression x108=x6.join(x109); + Formula x107=x108.eq(x20); + Variable x116=Variable.unary("interesting_pre"); + Expression x119=x14.join(x8); + Expression x118=x8.difference(x119); + Expression x117=x8.difference(x118); + Decls x115=x116.oneOf(x117); + Variable x122=Variable.unary("interesting_p"); + Decls x121=x122.oneOf(x20); + Expression x128=x116.join(x12); + Formula x127=x122.in(x128); + Formula x126=x127.not(); + Expression x139=x122.join(x10); + Expression x141=x122.join(x10); + Expression x140=x141.join(x11); + Expression x138=x139.union(x140); + Expression x142=x122.join(x11); + Expression x137=x138.union(x142); + Expression x144=x122.join(x11); + Expression x145=x10.transpose(); + Expression x143=x144.join(x145); + Expression x136=x137.union(x143); + Expression x147=x10.transpose(); + Expression x146=x122.join(x147); + Expression x135=x136.union(x146); + Expression x150=x10.transpose(); + Expression x149=x122.join(x150); + Expression x151=x11.transpose(); + Expression x148=x149.join(x151); + Expression x134=x135.union(x148); + Expression x153=x11.transpose(); + Expression x152=x122.join(x153); + Expression x133=x134.union(x152); + Expression x156=x11.transpose(); + Expression x155=x122.join(x156); + Expression x154=x155.join(x10); + Expression x132=x133.union(x154); + Expression x157=x116.join(x12); + Expression x131=x132.intersection(x157); + IntExpression x130=x131.count(); + IntExpression x158=IntConstant.constant(3); + Formula x129=x130.eq(x158); + Formula x125=x126.and(x129); + Expression x161=x116.join(x14); + Expression x160=x161.join(x12); + Formula x159=x122.in(x160); + Formula x124=x125.implies(x159); + Formula x163=x125.not(); + Expression x168=x116.join(x12); + Formula x167=x122.in(x168); + IntExpression x171=x131.count(); + IntExpression x172=IntConstant.constant(2); + Formula x170=x171.eq(x172); + IntExpression x174=x131.count(); + IntExpression x175=IntConstant.constant(3); + Formula x173=x174.eq(x175); + Formula x169=x170.or(x173); + Formula x166=x167.and(x169); + Expression x177=x161.join(x12); + Formula x176=x122.in(x177); + Formula x165=x166.implies(x176); + Formula x179=x166.not(); + Expression x182=x161.join(x12); + Formula x181=x122.in(x182); + Formula x180=x181.not(); + Formula x178=x179.implies(x180); + Formula x164=x165.and(x178); + Formula x162=x163.implies(x164); + Formula x123=x124.and(x162); + Formula x120=x123.forAll(x121); + Formula x114=x120.forAll(x115); + Expression x184=x8.join(x12); + Formula x183=x184.some(); + Expression x187=x8.join(x12); + Expression x186=x20.difference(x187); + Formula x185=x186.some(); + Formula x188=x10.some(); + Formula x189=x11.some(); + Formula x190=x0.eq(x0); + Formula x191=x1.eq(x1); + Formula x192=x2.eq(x2); + Formula x193=x3.eq(x3); + Formula x194=x4.eq(x4); + Formula x195=x5.eq(x5); + Formula x196=x6.eq(x6); + Formula x197=x7.eq(x7); + Formula x198=x8.eq(x8); + Formula x199=x9.eq(x9); + Formula x200=x10.eq(x10); + Formula x201=x11.eq(x11); + Formula x202=x12.eq(x12); + Formula x203=x13.eq(x13); + Formula x204=x14.eq(x14); + Formula x205=x15.eq(x15); + Formula x16=Formula.compose(FormulaOperator.AND, x17, x25, x28, x35, x37, x42, x44, x47, x51, x52, x60, x79, x107, x114, x183, x185, x188, x189, x190, x191, x192, x193, x194, x195, x196, x197, x198, x199, x200, x201, x202, x203, x204, x205); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x16,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/games/lifeShowRun.java b/Source/kodkod/examples/kodkod/examples/models/simple/games/lifeShowRun.java new file mode 100644 index 0000000..8575726 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/games/lifeShowRun.java @@ -0,0 +1,702 @@ +package kodkod.examples.models.simple.games; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "life", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =1, + NestedRelationalJoins = 7, + TransitiveClosure = 4, + NestedQuantifiers = 1, + SetCardinality = 5, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 1, + Constraints = 18 +) + + +public final class lifeShowRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Root"); + Relation x7 = Relation.unary("this/Point remainder"); + Relation x8 = Relation.unary("this/State"); + Relation x9 = Relation.unary("ord/Ord"); + Relation x10 = Relation.nary("this/Point.right", 2); + Relation x11 = Relation.nary("this/Point.below", 2); + Relation x12 = Relation.nary("this/State.live", 2); + Relation x13 = Relation.unary("ord/Ord.First"); + Relation x14 = Relation.nary("ord/Ord.Next", 2); + Relation x15 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Point$0", + "Point$1", "Point$10", "Point$2", "Point$3", "Point$4", "Point$5", + "Point$6", "Point$7", "Point$8", "Point$9", "Root$0", "State$0", + "State$1", "State$2", "ord/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Root$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Point$0")); + x7_upper.add(factory.tuple("Point$1")); + x7_upper.add(factory.tuple("Point$2")); + x7_upper.add(factory.tuple("Point$3")); + x7_upper.add(factory.tuple("Point$4")); + x7_upper.add(factory.tuple("Point$5")); + x7_upper.add(factory.tuple("Point$6")); + x7_upper.add(factory.tuple("Point$7")); + x7_upper.add(factory.tuple("Point$8")); + x7_upper.add(factory.tuple("Point$9")); + x7_upper.add(factory.tuple("Point$10")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("ord/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$5"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$6"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$7"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$8"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$9"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$10"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$5"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$6"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$7"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$8"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$9"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$10"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$5"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$6"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$7"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$8"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$9"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$10"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$5"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$6"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$7"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$8"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$9"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$10"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$5"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$6"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$7"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$8"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$9"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$10"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$5"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$6"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$7"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$8"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$9"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$10"))); + x10_upper.add(factory.tuple("Point$5").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$5"))); + x10_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$6"))); + x10_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$7"))); + x10_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$8"))); + x10_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$9"))); + x10_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$10"))); + x10_upper.add(factory.tuple("Point$6").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$5"))); + x10_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$6"))); + x10_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$7"))); + x10_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$8"))); + x10_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$9"))); + x10_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$10"))); + x10_upper.add(factory.tuple("Point$7").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$5"))); + x10_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$6"))); + x10_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$7"))); + x10_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$8"))); + x10_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$9"))); + x10_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$10"))); + x10_upper.add(factory.tuple("Point$8").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$5"))); + x10_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$6"))); + x10_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$7"))); + x10_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$8"))); + x10_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$9"))); + x10_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$10"))); + x10_upper.add(factory.tuple("Point$9").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$5"))); + x10_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$6"))); + x10_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$7"))); + x10_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$8"))); + x10_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$9"))); + x10_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$10"))); + x10_upper.add(factory.tuple("Point$10").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$5"))); + x10_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$6"))); + x10_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$7"))); + x10_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$8"))); + x10_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$9"))); + x10_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$10"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$5"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$6"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$7"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$8"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$9"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$10"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$5"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$6"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$7"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$8"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$9"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$10"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$5"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$6"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$7"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$8"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$9"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$10"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$5"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$6"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$7"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$8"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$9"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$10"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$5"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$6"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$7"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$8"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$9"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$10"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$5"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$6"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$7"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$8"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$9"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$10"))); + x11_upper.add(factory.tuple("Point$5").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$5"))); + x11_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$6"))); + x11_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$7"))); + x11_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$8"))); + x11_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$9"))); + x11_upper.add(factory.tuple("Point$5").product(factory.tuple("Point$10"))); + x11_upper.add(factory.tuple("Point$6").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$5"))); + x11_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$6"))); + x11_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$7"))); + x11_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$8"))); + x11_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$9"))); + x11_upper.add(factory.tuple("Point$6").product(factory.tuple("Point$10"))); + x11_upper.add(factory.tuple("Point$7").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$5"))); + x11_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$6"))); + x11_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$7"))); + x11_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$8"))); + x11_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$9"))); + x11_upper.add(factory.tuple("Point$7").product(factory.tuple("Point$10"))); + x11_upper.add(factory.tuple("Point$8").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$5"))); + x11_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$6"))); + x11_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$7"))); + x11_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$8"))); + x11_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$9"))); + x11_upper.add(factory.tuple("Point$8").product(factory.tuple("Point$10"))); + x11_upper.add(factory.tuple("Point$9").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$5"))); + x11_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$6"))); + x11_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$7"))); + x11_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$8"))); + x11_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$9"))); + x11_upper.add(factory.tuple("Point$9").product(factory.tuple("Point$10"))); + x11_upper.add(factory.tuple("Point$10").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$5"))); + x11_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$6"))); + x11_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$7"))); + x11_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$8"))); + x11_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$9"))); + x11_upper.add(factory.tuple("Point$10").product(factory.tuple("Point$10"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$1"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$2"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$3"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$4"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$5"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$6"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$7"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$8"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$9"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$10"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$1"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$2"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$3"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$4"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$5"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$6"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$7"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$8"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$9"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$10"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$1"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$2"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$3"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$4"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$5"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$6"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$7"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$8"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$9"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$10"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("State$0")); + x13_upper.add(factory.tuple("State$1")); + x13_upper.add(factory.tuple("State$2")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("State$0")); + x15_upper.add(factory.tuple("State$1")); + x15_upper.add(factory.tuple("State$2")); + bounds.bound(x15, x15_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x19=Variable.unary("Show_this"); + Expression x20=x6.union(x7); + Decls x18=x19.oneOf(x20); + Expression x23=x19.join(x10); + Formula x22=x23.lone(); + Formula x24=x23.in(x20); + Formula x21=x22.and(x24); + Formula x17=x21.forAll(x18); + Expression x26=x10.join(Expression.UNIV); + Formula x25=x26.in(x20); + Variable x30=Variable.unary("Show_this"); + Decls x29=x30.oneOf(x20); + Expression x33=x30.join(x11); + Formula x32=x33.lone(); + Formula x34=x33.in(x20); + Formula x31=x32.and(x34); + Formula x28=x31.forAll(x29); + Expression x36=x11.join(Expression.UNIV); + Formula x35=x36.in(x20); + Variable x39=Variable.unary("Show_this"); + Decls x38=x39.oneOf(x8); + Expression x41=x39.join(x12); + Formula x40=x41.in(x20); + Formula x37=x40.forAll(x38); + Expression x43=x12.join(Expression.UNIV); + Formula x42=x43.in(x8); + Expression x46=x9.product(x13); + Expression x45=x9.join(x46); + Formula x44=x45.in(x8); + Expression x49=x9.product(x14); + Expression x48=x9.join(x49); + Expression x50=x8.product(x8); + Formula x47=x48.in(x50); + Formula x51=x14.totalOrder(x8,x13,x15); + Variable x54=Variable.unary("Show_p"); + Decls x53=x54.oneOf(x20); + Expression x59=x10.union(x11); + Expression x58=x59.closure(); + Expression x57=x54.join(x58); + Formula x56=x54.in(x57); + Formula x55=x56.not(); + Formula x52=x55.forAll(x53); + Variable x62=Variable.unary("Show_p"); + Decls x61=x62.oneOf(x20); + Expression x66=x62.join(x11); + Expression x65=x66.join(x10); + Expression x68=x62.join(x10); + Expression x67=x68.join(x11); + Formula x64=x65.eq(x67); + Expression x73=x62.join(x11); + Formula x72=x73.some(); + Expression x75=x62.join(x10); + Formula x74=x75.some(); + Formula x71=x72.and(x74); + Formula x70=x71.not(); + Expression x78=x62.join(x11); + Expression x77=x78.join(x10); + Formula x76=x77.some(); + Formula x69=x70.or(x76); + Formula x63=x64.and(x69); + Formula x60=x63.forAll(x61); + Variable x81=Variable.unary("Show_p"); + Expression x82=x20.difference(x6); + Decls x80=x81.oneOf(x82); + Expression x87=x11.transpose(); + Expression x86=x81.join(x87); + Formula x85=x86.no(); + Formula x84=x85.not(); + Expression x92=x11.closure(); + Expression x99=Expression.INTS.union(x5); + Expression x98=x99.union(x20); + Expression x97=x98.union(x8); + Expression x96=x97.union(x9); + Expression x95=x96.product(Expression.UNIV); + Expression x93=Expression.IDEN.intersection(x95); + Expression x91=x92.union(x93); + Expression x90=x81.join(x91); + IntExpression x89=x90.count(); + Expression x104=x11.closure(); + Expression x106=x96.product(Expression.UNIV); + Expression x105=Expression.IDEN.intersection(x106); + Expression x103=x104.union(x105); + Expression x102=x6.join(x103); + IntExpression x101=x102.count(); + Formula x88=x89.eq(x101); + Formula x83=x84.or(x88); + Formula x79=x83.forAll(x80); + Expression x111=x10.union(x11); + Expression x110=x111.closure(); + Expression x113=x96.product(Expression.UNIV); + Expression x112=Expression.IDEN.intersection(x113); + Expression x109=x110.union(x112); + Expression x108=x6.join(x109); + Formula x107=x108.eq(x20); + Variable x116=Variable.unary("Show_pre"); + Expression x119=x14.join(x8); + Expression x118=x8.difference(x119); + Expression x117=x8.difference(x118); + Decls x115=x116.oneOf(x117); + Variable x122=Variable.unary("Show_p"); + Decls x121=x122.oneOf(x20); + Expression x128=x116.join(x12); + Formula x127=x122.in(x128); + Formula x126=x127.not(); + Expression x139=x122.join(x10); + Expression x141=x122.join(x10); + Expression x140=x141.join(x11); + Expression x138=x139.union(x140); + Expression x142=x122.join(x11); + Expression x137=x138.union(x142); + Expression x144=x122.join(x11); + Expression x145=x10.transpose(); + Expression x143=x144.join(x145); + Expression x136=x137.union(x143); + Expression x147=x10.transpose(); + Expression x146=x122.join(x147); + Expression x135=x136.union(x146); + Expression x150=x10.transpose(); + Expression x149=x122.join(x150); + Expression x151=x11.transpose(); + Expression x148=x149.join(x151); + Expression x134=x135.union(x148); + Expression x153=x11.transpose(); + Expression x152=x122.join(x153); + Expression x133=x134.union(x152); + Expression x156=x11.transpose(); + Expression x155=x122.join(x156); + Expression x154=x155.join(x10); + Expression x132=x133.union(x154); + Expression x157=x116.join(x12); + Expression x131=x132.intersection(x157); + IntExpression x130=x131.count(); + IntExpression x158=IntConstant.constant(3); + Formula x129=x130.eq(x158); + Formula x125=x126.and(x129); + Expression x161=x116.join(x14); + Expression x160=x161.join(x12); + Formula x159=x122.in(x160); + Formula x124=x125.implies(x159); + Formula x163=x125.not(); + Expression x168=x116.join(x12); + Formula x167=x122.in(x168); + IntExpression x171=x131.count(); + IntExpression x172=IntConstant.constant(2); + Formula x170=x171.eq(x172); + IntExpression x174=x131.count(); + IntExpression x175=IntConstant.constant(3); + Formula x173=x174.eq(x175); + Formula x169=x170.or(x173); + Formula x166=x167.and(x169); + Expression x177=x161.join(x12); + Formula x176=x122.in(x177); + Formula x165=x166.implies(x176); + Formula x179=x166.not(); + Expression x182=x161.join(x12); + Formula x181=x122.in(x182); + Formula x180=x181.not(); + Formula x178=x179.implies(x180); + Formula x164=x165.and(x178); + Formula x162=x163.implies(x164); + Formula x123=x124.and(x162); + Formula x120=x123.forAll(x121); + Formula x114=x120.forAll(x115); + Formula x183=x0.eq(x0); + Formula x184=x1.eq(x1); + Formula x185=x2.eq(x2); + Formula x186=x3.eq(x3); + Formula x187=x4.eq(x4); + Formula x188=x5.eq(x5); + Formula x189=x6.eq(x6); + Formula x190=x7.eq(x7); + Formula x191=x8.eq(x8); + Formula x192=x9.eq(x9); + Formula x193=x10.eq(x10); + Formula x194=x11.eq(x11); + Formula x195=x12.eq(x12); + Formula x196=x13.eq(x13); + Formula x197=x14.eq(x14); + Formula x198=x15.eq(x15); + Formula x16=Formula.compose(FormulaOperator.AND, x17, x25, x28, x35, x37, x42, x44, x47, x51, x52, x60, x79, x107, x114, x183, x184, x185, x186, x187, x188, x189, x190, x191, x192, x193, x194, x195, x196, x197, x198); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x16,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/games/lifeSquareRun.java b/Source/kodkod/examples/kodkod/examples/models/simple/games/lifeSquareRun.java new file mode 100644 index 0000000..7fae60a --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/games/lifeSquareRun.java @@ -0,0 +1,474 @@ +package kodkod.examples.models.simple.games; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "life", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =1, + NestedRelationalJoins = 7, + TransitiveClosure = 6, + NestedQuantifiers = 1, + SetCardinality = 7, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 1, + Constraints = 18 +) + + +public final class lifeSquareRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Root"); + Relation x7 = Relation.unary("this/Point remainder"); + Relation x8 = Relation.unary("this/State"); + Relation x9 = Relation.unary("ord/Ord"); + Relation x10 = Relation.nary("this/Point.right", 2); + Relation x11 = Relation.nary("this/Point.below", 2); + Relation x12 = Relation.nary("this/State.live", 2); + Relation x13 = Relation.unary("ord/Ord.First"); + Relation x14 = Relation.nary("ord/Ord.Next", 2); + Relation x15 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Point$0", + "Point$1", "Point$2", "Point$3", "Point$4", "Root$0", "State$0", + "State$1", "State$2", "ord/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Root$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Point$0")); + x7_upper.add(factory.tuple("Point$1")); + x7_upper.add(factory.tuple("Point$2")); + x7_upper.add(factory.tuple("Point$3")); + x7_upper.add(factory.tuple("Point$4")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("State$0")); + x8_upper.add(factory.tuple("State$1")); + x8_upper.add(factory.tuple("State$2")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("ord/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$4"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Root$0"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$0"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$1"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$2"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$3"))); + x10_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$4"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Root$0").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$0").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$1").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$2").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$3").product(factory.tuple("Point$4"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Root$0"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$0"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$1"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$2"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$3"))); + x11_upper.add(factory.tuple("Point$4").product(factory.tuple("Point$4"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$0"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$1"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$2"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$3"))); + x12_upper.add(factory.tuple("State$0").product(factory.tuple("Point$4"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$0"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$1"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$2"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$3"))); + x12_upper.add(factory.tuple("State$1").product(factory.tuple("Point$4"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Root$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$0"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$1"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$2"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$3"))); + x12_upper.add(factory.tuple("State$2").product(factory.tuple("Point$4"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("State$0")); + x13_upper.add(factory.tuple("State$1")); + x13_upper.add(factory.tuple("State$2")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$0").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$1").product(factory.tuple("State$2"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$0"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$1"))); + x14_upper.add(factory.tuple("State$2").product(factory.tuple("State$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("State$0")); + x15_upper.add(factory.tuple("State$1")); + x15_upper.add(factory.tuple("State$2")); + bounds.bound(x15, x15_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x19=Variable.unary("Square_this"); + Expression x20=x6.union(x7); + Decls x18=x19.oneOf(x20); + Expression x23=x19.join(x10); + Formula x22=x23.lone(); + Formula x24=x23.in(x20); + Formula x21=x22.and(x24); + Formula x17=x21.forAll(x18); + Expression x26=x10.join(Expression.UNIV); + Formula x25=x26.in(x20); + Variable x30=Variable.unary("Square_this"); + Decls x29=x30.oneOf(x20); + Expression x33=x30.join(x11); + Formula x32=x33.lone(); + Formula x34=x33.in(x20); + Formula x31=x32.and(x34); + Formula x28=x31.forAll(x29); + Expression x36=x11.join(Expression.UNIV); + Formula x35=x36.in(x20); + Variable x39=Variable.unary("Square_this"); + Decls x38=x39.oneOf(x8); + Expression x41=x39.join(x12); + Formula x40=x41.in(x20); + Formula x37=x40.forAll(x38); + Expression x43=x12.join(Expression.UNIV); + Formula x42=x43.in(x8); + Expression x46=x9.product(x13); + Expression x45=x9.join(x46); + Formula x44=x45.in(x8); + Expression x49=x9.product(x14); + Expression x48=x9.join(x49); + Expression x50=x8.product(x8); + Formula x47=x48.in(x50); + Formula x51=x14.totalOrder(x8,x13,x15); + Variable x54=Variable.unary("Square_p"); + Decls x53=x54.oneOf(x20); + Expression x59=x10.union(x11); + Expression x58=x59.closure(); + Expression x57=x54.join(x58); + Formula x56=x54.in(x57); + Formula x55=x56.not(); + Formula x52=x55.forAll(x53); + Variable x62=Variable.unary("Square_p"); + Decls x61=x62.oneOf(x20); + Expression x66=x62.join(x11); + Expression x65=x66.join(x10); + Expression x68=x62.join(x10); + Expression x67=x68.join(x11); + Formula x64=x65.eq(x67); + Expression x73=x62.join(x11); + Formula x72=x73.some(); + Expression x75=x62.join(x10); + Formula x74=x75.some(); + Formula x71=x72.and(x74); + Formula x70=x71.not(); + Expression x78=x62.join(x11); + Expression x77=x78.join(x10); + Formula x76=x77.some(); + Formula x69=x70.or(x76); + Formula x63=x64.and(x69); + Formula x60=x63.forAll(x61); + Variable x81=Variable.unary("Square_p"); + Expression x82=x20.difference(x6); + Decls x80=x81.oneOf(x82); + Expression x87=x11.transpose(); + Expression x86=x81.join(x87); + Formula x85=x86.no(); + Formula x84=x85.not(); + Expression x92=x11.closure(); + Expression x99=Expression.INTS.union(x5); + Expression x98=x99.union(x20); + Expression x97=x98.union(x8); + Expression x96=x97.union(x9); + Expression x95=x96.product(Expression.UNIV); + Expression x93=Expression.IDEN.intersection(x95); + Expression x91=x92.union(x93); + Expression x90=x81.join(x91); + IntExpression x89=x90.count(); + Expression x104=x11.closure(); + Expression x106=x96.product(Expression.UNIV); + Expression x105=Expression.IDEN.intersection(x106); + Expression x103=x104.union(x105); + Expression x102=x6.join(x103); + IntExpression x101=x102.count(); + Formula x88=x89.eq(x101); + Formula x83=x84.or(x88); + Formula x79=x83.forAll(x80); + Expression x111=x10.union(x11); + Expression x110=x111.closure(); + Expression x113=x96.product(Expression.UNIV); + Expression x112=Expression.IDEN.intersection(x113); + Expression x109=x110.union(x112); + Expression x108=x6.join(x109); + Formula x107=x108.eq(x20); + Variable x116=Variable.unary("Square_pre"); + Expression x119=x14.join(x8); + Expression x118=x8.difference(x119); + Expression x117=x8.difference(x118); + Decls x115=x116.oneOf(x117); + Variable x122=Variable.unary("Square_p"); + Decls x121=x122.oneOf(x20); + Expression x128=x116.join(x12); + Formula x127=x122.in(x128); + Formula x126=x127.not(); + Expression x139=x122.join(x10); + Expression x141=x122.join(x10); + Expression x140=x141.join(x11); + Expression x138=x139.union(x140); + Expression x142=x122.join(x11); + Expression x137=x138.union(x142); + Expression x144=x122.join(x11); + Expression x145=x10.transpose(); + Expression x143=x144.join(x145); + Expression x136=x137.union(x143); + Expression x147=x10.transpose(); + Expression x146=x122.join(x147); + Expression x135=x136.union(x146); + Expression x150=x10.transpose(); + Expression x149=x122.join(x150); + Expression x151=x11.transpose(); + Expression x148=x149.join(x151); + Expression x134=x135.union(x148); + Expression x153=x11.transpose(); + Expression x152=x122.join(x153); + Expression x133=x134.union(x152); + Expression x156=x11.transpose(); + Expression x155=x122.join(x156); + Expression x154=x155.join(x10); + Expression x132=x133.union(x154); + Expression x157=x116.join(x12); + Expression x131=x132.intersection(x157); + IntExpression x130=x131.count(); + IntExpression x158=IntConstant.constant(3); + Formula x129=x130.eq(x158); + Formula x125=x126.and(x129); + Expression x161=x116.join(x14); + Expression x160=x161.join(x12); + Formula x159=x122.in(x160); + Formula x124=x125.implies(x159); + Formula x163=x125.not(); + Expression x168=x116.join(x12); + Formula x167=x122.in(x168); + IntExpression x171=x131.count(); + IntExpression x172=IntConstant.constant(2); + Formula x170=x171.eq(x172); + IntExpression x174=x131.count(); + IntExpression x175=IntConstant.constant(3); + Formula x173=x174.eq(x175); + Formula x169=x170.or(x173); + Formula x166=x167.and(x169); + Expression x177=x161.join(x12); + Formula x176=x122.in(x177); + Formula x165=x166.implies(x176); + Formula x179=x166.not(); + Expression x182=x161.join(x12); + Formula x181=x122.in(x182); + Formula x180=x181.not(); + Formula x178=x179.implies(x180); + Formula x164=x165.and(x178); + Formula x162=x163.implies(x164); + Formula x123=x124.and(x162); + Formula x120=x123.forAll(x121); + Formula x114=x120.forAll(x115); + Expression x187=x10.closure(); + Expression x189=x96.product(Expression.UNIV); + Expression x188=Expression.IDEN.intersection(x189); + Expression x186=x187.union(x188); + Expression x185=x6.join(x186); + IntExpression x184=x185.count(); + Expression x193=x11.closure(); + Expression x195=x96.product(Expression.UNIV); + Expression x194=Expression.IDEN.intersection(x195); + Expression x192=x193.union(x194); + Expression x191=x6.join(x192); + IntExpression x190=x191.count(); + Formula x183=x184.eq(x190); + Formula x196=x0.eq(x0); + Formula x197=x1.eq(x1); + Formula x198=x2.eq(x2); + Formula x199=x3.eq(x3); + Formula x200=x4.eq(x4); + Formula x201=x5.eq(x5); + Formula x202=x6.eq(x6); + Formula x203=x7.eq(x7); + Formula x204=x8.eq(x8); + Formula x205=x9.eq(x9); + Formula x206=x10.eq(x10); + Formula x207=x11.eq(x11); + Formula x208=x12.eq(x12); + Formula x209=x13.eq(x13); + Formula x210=x14.eq(x14); + Formula x211=x15.eq(x15); + Formula x16=Formula.compose(FormulaOperator.AND, x17, x25, x28, x35, x37, x42, x44, x47, x51, x52, x60, x79, x107, x114, x183, x196, x197, x198, x199, x200, x201, x202, x203, x204, x205, x206, x207, x208, x209, x210, x211); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x16,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/genealogy/genealogyShowRun.java b/Source/kodkod/examples/kodkod/examples/models/simple/genealogy/genealogyShowRun.java new file mode 100644 index 0000000..a9897d7 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/genealogy/genealogyShowRun.java @@ -0,0 +1,330 @@ +package kodkod.examples.models.simple.genealogy; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "genealogy", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =3, + NestedRelationalJoins = 1, + TransitiveClosure = 1, + NestedQuantifiers = 4, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 0, + Constraints = 12 +) + + +public final class genealogyShowRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Adam"); + Relation x7 = Relation.unary("this/Man remainder"); + Relation x8 = Relation.unary("this/Eve"); + Relation x9 = Relation.unary("this/Woman remainder"); + Relation x10 = Relation.nary("this/Person.spouse", 2); + Relation x11 = Relation.nary("this/Person.parents", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Adam$0", + "Eve$0", "Person$0", "Person$1", "Person$2", "Person$3" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + x4_upper.add(factory.tuple("5")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Adam$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Person$0")); + x7_upper.add(factory.tuple("Person$1")); + x7_upper.add(factory.tuple("Person$2")); + x7_upper.add(factory.tuple("Person$3")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Eve$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Person$0")); + x9_upper.add(factory.tuple("Person$1")); + x9_upper.add(factory.tuple("Person$2")); + x9_upper.add(factory.tuple("Person$3")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Adam$0").product(factory.tuple("Adam$0"))); + x10_upper.add(factory.tuple("Adam$0").product(factory.tuple("Eve$0"))); + x10_upper.add(factory.tuple("Adam$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Adam$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Adam$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Adam$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Eve$0").product(factory.tuple("Adam$0"))); + x10_upper.add(factory.tuple("Eve$0").product(factory.tuple("Eve$0"))); + x10_upper.add(factory.tuple("Eve$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Eve$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Eve$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Eve$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Adam$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Eve$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Adam$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Eve$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Adam$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Eve$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Adam$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Eve$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Adam$0").product(factory.tuple("Adam$0"))); + x11_upper.add(factory.tuple("Adam$0").product(factory.tuple("Eve$0"))); + x11_upper.add(factory.tuple("Adam$0").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Adam$0").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Adam$0").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Adam$0").product(factory.tuple("Person$3"))); + x11_upper.add(factory.tuple("Eve$0").product(factory.tuple("Adam$0"))); + x11_upper.add(factory.tuple("Eve$0").product(factory.tuple("Eve$0"))); + x11_upper.add(factory.tuple("Eve$0").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Eve$0").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Eve$0").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Eve$0").product(factory.tuple("Person$3"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Adam$0"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Eve$0"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Adam$0"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Eve$0"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Adam$0"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Eve$0"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Adam$0"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Eve$0"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + bounds.bound(x11, x11_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x15=x6.union(x7); + Expression x16=x8.union(x9); + Expression x14=x15.intersection(x16); + Formula x13=x14.no(); + Variable x19=Variable.unary("Show_this"); + Expression x20=x15.union(x16); + Decls x18=x19.oneOf(x20); + Expression x23=x19.join(x10); + Formula x22=x23.lone(); + Formula x24=x23.in(x20); + Formula x21=x22.and(x24); + Formula x17=x21.forAll(x18); + Expression x26=x10.join(Expression.UNIV); + Formula x25=x26.in(x20); + Variable x30=Variable.unary("Show_this"); + Decls x29=x30.oneOf(x20); + Expression x32=x30.join(x11); + Formula x31=x32.in(x20); + Formula x28=x31.forAll(x29); + Expression x34=x11.join(Expression.UNIV); + Formula x33=x34.in(x20); + Variable x37=Variable.unary("Show_p"); + Decls x36=x37.oneOf(x20); + Expression x41=x11.closure(); + Expression x40=x37.join(x41); + Formula x39=x37.in(x40); + Formula x38=x39.not(); + Formula x35=x38.forAll(x36); + Variable x44=Variable.unary("Show_p"); + Expression x46=x6.union(x8); + Expression x45=x20.difference(x46); + Decls x43=x44.oneOf(x45); + Variable x51=Variable.unary("Show_mother"); + Decls x50=x51.oneOf(x16); + Variable x53=Variable.unary("Show_father"); + Decls x52=x53.oneOf(x15); + Decls x49=x50.and(x52); + Expression x55=x44.join(x11); + Expression x56=x51.union(x53); + Formula x54=x55.eq(x56); + Expression x48=x54.comprehension(x49); + Formula x47=x48.one(); + Formula x42=x47.forAll(x43); + Expression x59=x6.union(x8); + Expression x58=x59.join(x11); + Formula x57=x58.no(); + Expression x61=x6.join(x10); + Formula x60=x61.eq(x8); + Variable x64=Variable.unary("Show_p"); + Decls x63=x64.oneOf(x20); + Expression x67=x64.join(x10); + Formula x66=x67.eq(x64); + Formula x65=x66.not(); + Formula x62=x65.forAll(x63); + Expression x69=x10.transpose(); + Formula x68=x10.eq(x69); + Expression x71=x15.join(x10); + Formula x70=x71.in(x16); + Expression x73=x16.join(x10); + Formula x72=x73.in(x15); + Variable x76=Variable.unary("Show_p"); + Decls x75=x76.oneOf(x20); + Expression x81=x76.join(x10); + Expression x80=x81.join(x11); + Expression x82=x76.join(x11); + Expression x79=x80.intersection(x82); + Formula x78=x79.some(); + Formula x77=x78.not(); + Formula x74=x77.forAll(x75); + Variable x85=Variable.unary("Show_p"); + Decls x84=x85.oneOf(x20); + Expression x89=x85.join(x10); + Expression x90=x85.join(x11); + Expression x88=x89.intersection(x90); + Formula x87=x88.some(); + Formula x86=x87.not(); + Formula x83=x86.forAll(x84); + Variable x93=Variable.unary("Show_p"); + Expression x95=x6.union(x8); + Expression x94=x20.difference(x95); + Decls x92=x93.oneOf(x94); + Expression x97=x93.join(x10); + Formula x96=x97.some(); + Formula x91=x96.forSome(x92); + Formula x98=x0.eq(x0); + Formula x99=x1.eq(x1); + Formula x100=x2.eq(x2); + Formula x101=x3.eq(x3); + Formula x102=x4.eq(x4); + Formula x103=x5.eq(x5); + Formula x104=x6.eq(x6); + Formula x105=x7.eq(x7); + Formula x106=x8.eq(x8); + Formula x107=x9.eq(x9); + Formula x108=x10.eq(x10); + Formula x109=x11.eq(x11); + Formula x12=Formula.compose(FormulaOperator.AND, x13, x17, x25, x28, x33, x35, x42, x57, x60, x62, x68, x70, x72, x74, x83, x91, x98, x99, x100, x101, x102, x103, x104, x105, x106, x107, x108, x109); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x12,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/genealogy/grandpaOwnGrandpaRun.java b/Source/kodkod/examples/kodkod/examples/models/simple/genealogy/grandpaOwnGrandpaRun.java new file mode 100644 index 0000000..cc16b4c --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/genealogy/grandpaOwnGrandpaRun.java @@ -0,0 +1,313 @@ +package kodkod.examples.models.simple.genealogy; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "grandpa", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 1, + TransitiveClosure = 3, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 2, + OrderedRelations = 0, + Constraints = 5 +) + + +public final class grandpaOwnGrandpaRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Man"); + Relation x7 = Relation.unary("this/Woman"); + Relation x8 = Relation.nary("this/Person.father", 2); + Relation x9 = Relation.nary("this/Person.mother", 2); + Relation x10 = Relation.nary("this/Man.wife", 2); + Relation x11 = Relation.nary("this/Woman.husband", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Person$0", + "Person$1", "Person$2", "Person$3" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Person$0")); + x6_upper.add(factory.tuple("Person$1")); + x6_upper.add(factory.tuple("Person$2")); + x6_upper.add(factory.tuple("Person$3")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Person$0")); + x7_upper.add(factory.tuple("Person$1")); + x7_upper.add(factory.tuple("Person$2")); + x7_upper.add(factory.tuple("Person$3")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(2); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x8_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x8_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + bounds.bound(x11, x11_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x6.intersection(x7); + Formula x13=x14.no(); + Variable x17=Variable.unary("ownGrandpa_this"); + Decls x16=x17.oneOf(x6); + Expression x20=x17.join(x10); + Formula x19=x20.lone(); + Formula x21=x20.in(x7); + Formula x18=x19.and(x21); + Formula x15=x18.forAll(x16); + Expression x23=x10.join(Expression.UNIV); + Formula x22=x23.in(x6); + Variable x27=Variable.unary("ownGrandpa_this"); + Decls x26=x27.oneOf(x7); + Expression x30=x27.join(x11); + Formula x29=x30.lone(); + Formula x31=x30.in(x6); + Formula x28=x29.and(x31); + Formula x25=x28.forAll(x26); + Expression x33=x11.join(Expression.UNIV); + Formula x32=x33.in(x7); + Variable x36=Variable.unary("ownGrandpa_this"); + Expression x37=x6.union(x7); + Decls x35=x36.oneOf(x37); + Expression x40=x36.join(x8); + Formula x39=x40.lone(); + Formula x41=x40.in(x6); + Formula x38=x39.and(x41); + Formula x34=x38.forAll(x35); + Expression x43=x8.join(Expression.UNIV); + Formula x42=x43.in(x37); + Variable x46=Variable.unary("ownGrandpa_this"); + Decls x45=x46.oneOf(x37); + Expression x49=x46.join(x9); + Formula x48=x49.lone(); + Formula x50=x49.in(x7); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x52=x9.join(Expression.UNIV); + Formula x51=x52.in(x37); + Variable x55=Variable.unary("ownGrandpa_p"); + Decls x54=x55.oneOf(x37); + Expression x60=x9.union(x8); + Expression x59=x60.closure(); + Expression x58=x55.join(x59); + Formula x57=x55.in(x58); + Formula x56=x57.not(); + Formula x53=x56.forAll(x54); + Expression x62=x11.transpose(); + Formula x61=x10.eq(x62); + Expression x68=x9.union(x8); + Expression x67=x68.closure(); + Expression x73=Expression.INTS.union(x5); + Expression x72=x73.union(x37); + Expression x71=x72.product(Expression.UNIV); + Expression x69=Expression.IDEN.intersection(x71); + Expression x66=x67.union(x69); + Expression x65=x66.join(x9); + Expression x64=x10.intersection(x65); + Formula x63=x64.no(); + Expression x80=x9.union(x8); + Expression x79=x80.closure(); + Expression x82=x72.product(Expression.UNIV); + Expression x81=Expression.IDEN.intersection(x82); + Expression x78=x79.union(x81); + Expression x77=x78.join(x8); + Expression x76=x11.intersection(x77); + Formula x75=x76.no(); + Variable x85=Variable.unary("ownGrandpa_m"); + Decls x84=x85.oneOf(x6); + Expression x92=x9.union(x8); + Expression x93=x8.join(x10); + Expression x91=x92.union(x93); + Expression x94=x9.join(x11); + Expression x90=x91.union(x94); + Expression x89=x85.join(x90); + Expression x88=x89.join(x90); + Expression x87=x88.intersection(x6); + Formula x86=x85.in(x87); + Formula x83=x86.forSome(x84); + Formula x95=x0.eq(x0); + Formula x96=x1.eq(x1); + Formula x97=x2.eq(x2); + Formula x98=x3.eq(x3); + Formula x99=x4.eq(x4); + Formula x100=x5.eq(x5); + Formula x101=x6.eq(x6); + Formula x102=x7.eq(x7); + Formula x103=x8.eq(x8); + Formula x104=x9.eq(x9); + Formula x105=x10.eq(x10); + Formula x106=x11.eq(x11); + Formula x12=Formula.compose(FormulaOperator.AND, x13, x15, x22, x25, x32, x34, x42, x44, x51, x53, x61, x63, x75, x83, x95, x96, x97, x98, x99, x100, x101, x102, x103, x104, x105, x106); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x12,bounds); + System.out.println(sol.toString()); + }} diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/lists/listsEmptiesCheck.java b/Source/kodkod/examples/kodkod/examples/models/simple/lists/listsEmptiesCheck.java new file mode 100644 index 0000000..706b9e8 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/lists/listsEmptiesCheck.java @@ -0,0 +1,463 @@ +package kodkod.examples.models.simple.lists; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + + +@ExampleMetadata( + Name = "lists", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 2, + TransitiveClosure = 5, + NestedQuantifiers = 0, + SetCardinality = 4, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 0, + Constraints = 15 +) + +public final class listsEmptiesCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Thing"); + Relation x7 = Relation.unary("this/NonEmptyList"); + Relation x8 = Relation.unary("this/EmptyList"); + Relation x9 = Relation.nary("this/List.equivTo", 2); + Relation x10 = Relation.nary("this/List.prefixes", 2); + Relation x11 = Relation.nary("this/NonEmptyList.car", 2); + Relation x12 = Relation.nary("this/NonEmptyList.cdr", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "List$0", + "List$1", "List$2", "List$3", "List$4", "List$5", "Thing$0", + "Thing$1", "Thing$2", "Thing$3", "Thing$4", "Thing$5" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + x4_upper.add(factory.tuple("5")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Thing$0")); + x6_upper.add(factory.tuple("Thing$1")); + x6_upper.add(factory.tuple("Thing$2")); + x6_upper.add(factory.tuple("Thing$3")); + x6_upper.add(factory.tuple("Thing$4")); + x6_upper.add(factory.tuple("Thing$5")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("List$0")); + x7_upper.add(factory.tuple("List$1")); + x7_upper.add(factory.tuple("List$2")); + x7_upper.add(factory.tuple("List$3")); + x7_upper.add(factory.tuple("List$4")); + x7_upper.add(factory.tuple("List$5")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("List$0")); + x8_upper.add(factory.tuple("List$1")); + x8_upper.add(factory.tuple("List$2")); + x8_upper.add(factory.tuple("List$3")); + x8_upper.add(factory.tuple("List$4")); + x8_upper.add(factory.tuple("List$5")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$5"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$5"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$5"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$5"))); + bounds.bound(x12, x12_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x15=x7.intersection(x8); + Formula x14=x15.no(); + Variable x18=Variable.unary("empties_this"); + Decls x17=x18.oneOf(x7); + Expression x21=x18.join(x11); + Formula x20=x21.one(); + Formula x22=x21.in(x6); + Formula x19=x20.and(x22); + Formula x16=x19.forAll(x17); + Expression x24=x11.join(Expression.UNIV); + Formula x23=x24.in(x7); + Variable x28=Variable.unary("empties_this"); + Decls x27=x28.oneOf(x7); + Expression x31=x28.join(x12); + Formula x30=x31.one(); + Expression x33=x7.union(x8); + Formula x32=x31.in(x33); + Formula x29=x30.and(x32); + Formula x26=x29.forAll(x27); + Expression x35=x12.join(Expression.UNIV); + Formula x34=x35.in(x7); + Variable x38=Variable.unary("empties_this"); + Decls x37=x38.oneOf(x33); + Expression x40=x38.join(x9); + Formula x39=x40.in(x33); + Formula x36=x39.forAll(x37); + Expression x42=x9.join(Expression.UNIV); + Formula x41=x42.in(x33); + Variable x45=Variable.unary("empties_this"); + Decls x44=x45.oneOf(x33); + Expression x47=x45.join(x10); + Formula x46=x47.in(x33); + Formula x43=x46.forAll(x44); + Expression x49=x10.join(Expression.UNIV); + Formula x48=x49.in(x33); + Expression x51=x33.join(x11); + Formula x50=x6.in(x51); + Variable x54=Variable.unary("empties_L"); + Decls x53=x54.oneOf(x33); + Variable x57=Variable.unary("isFinite_e"); + Decls x56=x57.oneOf(x8); + Expression x61=x12.closure(); + Expression x67=Expression.INTS.union(x5); + Expression x66=x67.union(x6); + Expression x65=x66.union(x33); + Expression x64=x65.product(Expression.UNIV); + Expression x62=Expression.IDEN.intersection(x64); + Expression x60=x61.union(x62); + Expression x59=x54.join(x60); + Formula x58=x57.in(x59); + Formula x55=x58.forSome(x56); + Formula x52=x55.forAll(x53); + Variable x72=Variable.unary("empties_a"); + Decls x71=x72.oneOf(x33); + Variable x74=Variable.unary("empties_b"); + Decls x73=x74.oneOf(x33); + Decls x70=x71.and(x73); + Expression x77=x74.join(x9); + Formula x76=x72.in(x77); + Expression x81=x72.join(x11); + Expression x82=x74.join(x11); + Formula x80=x81.eq(x82); + Expression x84=x74.join(x12); + Expression x86=x72.join(x12); + Expression x85=x86.join(x9); + Formula x83=x84.in(x85); + Formula x79=x80.and(x83); + Expression x91=x12.closure(); + Expression x93=x65.product(Expression.UNIV); + Expression x92=Expression.IDEN.intersection(x93); + Expression x90=x91.union(x92); + Expression x89=x72.join(x90); + IntExpression x88=x89.count(); + Expression x97=x12.closure(); + Expression x99=x65.product(Expression.UNIV); + Expression x98=Expression.IDEN.intersection(x99); + Expression x96=x97.union(x98); + Expression x95=x74.join(x96); + IntExpression x94=x95.count(); + Formula x87=x88.eq(x94); + Formula x78=x79.and(x87); + Formula x75=x76.iff(x78); + Formula x69=x75.forAll(x70); + Variable x103=Variable.unary("empties_e"); + Decls x102=x103.oneOf(x8); + Variable x105=Variable.unary("empties_L"); + Decls x104=x105.oneOf(x33); + Decls x101=x102.and(x104); + Expression x107=x105.join(x10); + Formula x106=x103.in(x107); + Formula x100=x106.forAll(x101); + Variable x111=Variable.unary("empties_a"); + Decls x110=x111.oneOf(x7); + Variable x113=Variable.unary("empties_b"); + Decls x112=x113.oneOf(x7); + Decls x109=x110.and(x112); + Expression x116=x113.join(x10); + Formula x115=x111.in(x116); + Expression x120=x111.join(x11); + Expression x121=x113.join(x11); + Formula x119=x120.eq(x121); + Expression x123=x111.join(x12); + Expression x125=x113.join(x12); + Expression x124=x125.join(x10); + Formula x122=x123.in(x124); + Formula x118=x119.and(x122); + Expression x130=x12.closure(); + Expression x132=x65.product(Expression.UNIV); + Expression x131=Expression.IDEN.intersection(x132); + Expression x129=x130.union(x131); + Expression x128=x111.join(x129); + IntExpression x127=x128.count(); + Expression x136=x12.closure(); + Expression x138=x65.product(Expression.UNIV); + Expression x137=Expression.IDEN.intersection(x138); + Expression x135=x136.union(x137); + Expression x134=x113.join(x135); + IntExpression x133=x134.count(); + Formula x126=x127.lt(x133); + Formula x117=x118.and(x126); + Formula x114=x115.iff(x117); + Formula x108=x114.forAll(x109); + Variable x143=Variable.unary("empties_a"); + Decls x142=x143.oneOf(x8); + Variable x145=Variable.unary("empties_b"); + Decls x144=x145.oneOf(x8); + Decls x141=x142.and(x144); + Expression x147=x145.join(x9); + Formula x146=x143.in(x147); + Formula x140=x146.forAll(x141); + Formula x139=x140.not(); + Formula x148=x0.eq(x0); + Formula x149=x1.eq(x1); + Formula x150=x2.eq(x2); + Formula x151=x3.eq(x3); + Formula x152=x4.eq(x4); + Formula x153=x5.eq(x5); + Formula x154=x6.eq(x6); + Formula x155=x7.eq(x7); + Formula x156=x8.eq(x8); + Formula x157=x9.eq(x9); + Formula x158=x10.eq(x10); + Formula x159=x11.eq(x11); + Formula x160=x12.eq(x12); + Formula x13=Formula.compose(FormulaOperator.AND, x14, x16, x23, x26, x34, x36, x41, x43, x48, x50, x52, x69, x100, x108, x139, x148, x149, x150, x151, x152, x153, x154, x155, x156, x157, x158, x159, x160); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x13,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/lists/listsReflexiveCheck.java b/Source/kodkod/examples/kodkod/examples/models/simple/lists/listsReflexiveCheck.java new file mode 100644 index 0000000..9c59226 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/lists/listsReflexiveCheck.java @@ -0,0 +1,461 @@ +package kodkod.examples.models.simple.lists; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + + +@ExampleMetadata( + Name = "lists", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 2, + TransitiveClosure = 5, + NestedQuantifiers = 0, + SetCardinality = 4, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 0, + Constraints = 15 +) + + +public final class listsReflexiveCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Thing"); + Relation x7 = Relation.unary("this/NonEmptyList"); + Relation x8 = Relation.unary("this/EmptyList"); + Relation x9 = Relation.nary("this/List.equivTo", 2); + Relation x10 = Relation.nary("this/List.prefixes", 2); + Relation x11 = Relation.nary("this/NonEmptyList.car", 2); + Relation x12 = Relation.nary("this/NonEmptyList.cdr", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "List$0", + "List$1", "List$2", "List$3", "List$4", "List$5", "Thing$0", + "Thing$1", "Thing$2", "Thing$3", "Thing$4", "Thing$5" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + x4_upper.add(factory.tuple("5")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Thing$0")); + x6_upper.add(factory.tuple("Thing$1")); + x6_upper.add(factory.tuple("Thing$2")); + x6_upper.add(factory.tuple("Thing$3")); + x6_upper.add(factory.tuple("Thing$4")); + x6_upper.add(factory.tuple("Thing$5")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("List$0")); + x7_upper.add(factory.tuple("List$1")); + x7_upper.add(factory.tuple("List$2")); + x7_upper.add(factory.tuple("List$3")); + x7_upper.add(factory.tuple("List$4")); + x7_upper.add(factory.tuple("List$5")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("List$0")); + x8_upper.add(factory.tuple("List$1")); + x8_upper.add(factory.tuple("List$2")); + x8_upper.add(factory.tuple("List$3")); + x8_upper.add(factory.tuple("List$4")); + x8_upper.add(factory.tuple("List$5")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$5"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$5"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$5"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$5"))); + bounds.bound(x12, x12_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x15=x7.intersection(x8); + Formula x14=x15.no(); + Variable x18=Variable.unary("reflexive_this"); + Decls x17=x18.oneOf(x7); + Expression x21=x18.join(x11); + Formula x20=x21.one(); + Formula x22=x21.in(x6); + Formula x19=x20.and(x22); + Formula x16=x19.forAll(x17); + Expression x24=x11.join(Expression.UNIV); + Formula x23=x24.in(x7); + Variable x28=Variable.unary("reflexive_this"); + Decls x27=x28.oneOf(x7); + Expression x31=x28.join(x12); + Formula x30=x31.one(); + Expression x33=x7.union(x8); + Formula x32=x31.in(x33); + Formula x29=x30.and(x32); + Formula x26=x29.forAll(x27); + Expression x35=x12.join(Expression.UNIV); + Formula x34=x35.in(x7); + Variable x38=Variable.unary("reflexive_this"); + Decls x37=x38.oneOf(x33); + Expression x40=x38.join(x9); + Formula x39=x40.in(x33); + Formula x36=x39.forAll(x37); + Expression x42=x9.join(Expression.UNIV); + Formula x41=x42.in(x33); + Variable x45=Variable.unary("reflexive_this"); + Decls x44=x45.oneOf(x33); + Expression x47=x45.join(x10); + Formula x46=x47.in(x33); + Formula x43=x46.forAll(x44); + Expression x49=x10.join(Expression.UNIV); + Formula x48=x49.in(x33); + Expression x51=x33.join(x11); + Formula x50=x6.in(x51); + Variable x54=Variable.unary("reflexive_L"); + Decls x53=x54.oneOf(x33); + Variable x57=Variable.unary("isFinite_e"); + Decls x56=x57.oneOf(x8); + Expression x61=x12.closure(); + Expression x67=Expression.INTS.union(x5); + Expression x66=x67.union(x6); + Expression x65=x66.union(x33); + Expression x64=x65.product(Expression.UNIV); + Expression x62=Expression.IDEN.intersection(x64); + Expression x60=x61.union(x62); + Expression x59=x54.join(x60); + Formula x58=x57.in(x59); + Formula x55=x58.forSome(x56); + Formula x52=x55.forAll(x53); + Variable x72=Variable.unary("reflexive_a"); + Decls x71=x72.oneOf(x33); + Variable x74=Variable.unary("reflexive_b"); + Decls x73=x74.oneOf(x33); + Decls x70=x71.and(x73); + Expression x77=x74.join(x9); + Formula x76=x72.in(x77); + Expression x81=x72.join(x11); + Expression x82=x74.join(x11); + Formula x80=x81.eq(x82); + Expression x84=x74.join(x12); + Expression x86=x72.join(x12); + Expression x85=x86.join(x9); + Formula x83=x84.in(x85); + Formula x79=x80.and(x83); + Expression x91=x12.closure(); + Expression x93=x65.product(Expression.UNIV); + Expression x92=Expression.IDEN.intersection(x93); + Expression x90=x91.union(x92); + Expression x89=x72.join(x90); + IntExpression x88=x89.count(); + Expression x97=x12.closure(); + Expression x99=x65.product(Expression.UNIV); + Expression x98=Expression.IDEN.intersection(x99); + Expression x96=x97.union(x98); + Expression x95=x74.join(x96); + IntExpression x94=x95.count(); + Formula x87=x88.eq(x94); + Formula x78=x79.and(x87); + Formula x75=x76.iff(x78); + Formula x69=x75.forAll(x70); + Variable x103=Variable.unary("reflexive_e"); + Decls x102=x103.oneOf(x8); + Variable x105=Variable.unary("reflexive_L"); + Decls x104=x105.oneOf(x33); + Decls x101=x102.and(x104); + Expression x107=x105.join(x10); + Formula x106=x103.in(x107); + Formula x100=x106.forAll(x101); + Variable x111=Variable.unary("reflexive_a"); + Decls x110=x111.oneOf(x7); + Variable x113=Variable.unary("reflexive_b"); + Decls x112=x113.oneOf(x7); + Decls x109=x110.and(x112); + Expression x116=x113.join(x10); + Formula x115=x111.in(x116); + Expression x120=x111.join(x11); + Expression x121=x113.join(x11); + Formula x119=x120.eq(x121); + Expression x123=x111.join(x12); + Expression x125=x113.join(x12); + Expression x124=x125.join(x10); + Formula x122=x123.in(x124); + Formula x118=x119.and(x122); + Expression x130=x12.closure(); + Expression x132=x65.product(Expression.UNIV); + Expression x131=Expression.IDEN.intersection(x132); + Expression x129=x130.union(x131); + Expression x128=x111.join(x129); + IntExpression x127=x128.count(); + Expression x136=x12.closure(); + Expression x138=x65.product(Expression.UNIV); + Expression x137=Expression.IDEN.intersection(x138); + Expression x135=x136.union(x137); + Expression x134=x113.join(x135); + IntExpression x133=x134.count(); + Formula x126=x127.lt(x133); + Formula x117=x118.and(x126); + Formula x114=x115.iff(x117); + Formula x108=x114.forAll(x109); + Variable x142=Variable.unary("reflexive_L"); + Decls x141=x142.oneOf(x33); + Expression x144=x142.join(x9); + Formula x143=x142.in(x144); + Formula x140=x143.forAll(x141); + Formula x139=x140.not(); + Formula x145=x0.eq(x0); + Formula x146=x1.eq(x1); + Formula x147=x2.eq(x2); + Formula x148=x3.eq(x3); + Formula x149=x4.eq(x4); + Formula x150=x5.eq(x5); + Formula x151=x6.eq(x6); + Formula x152=x7.eq(x7); + Formula x153=x8.eq(x8); + Formula x154=x9.eq(x9); + Formula x155=x10.eq(x10); + Formula x156=x11.eq(x11); + Formula x157=x12.eq(x12); + Formula x13=Formula.compose(FormulaOperator.AND, x14, x16, x23, x26, x34, x36, x41, x43, x48, x50, x52, x69, x100, x108, x139, x145, x146, x147, x148, x149, x150, x151, x152, x153, x154, x155, x156, x157); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x13,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/lists/listsShowRun.java b/Source/kodkod/examples/kodkod/examples/models/simple/lists/listsShowRun.java new file mode 100644 index 0000000..d451864 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/lists/listsShowRun.java @@ -0,0 +1,378 @@ +package kodkod.examples.models.simple.lists; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + + +@ExampleMetadata( + Name = "lists", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 2, + TransitiveClosure = 5, + NestedQuantifiers = 0, + SetCardinality = 4, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 0, + Constraints = 15 +) + + +public final class listsShowRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Thing"); + Relation x7 = Relation.unary("this/NonEmptyList"); + Relation x8 = Relation.unary("this/EmptyList"); + Relation x9 = Relation.nary("this/List.equivTo", 2); + Relation x10 = Relation.nary("this/List.prefixes", 2); + Relation x11 = Relation.nary("this/NonEmptyList.car", 2); + Relation x12 = Relation.nary("this/NonEmptyList.cdr", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "List$0", + "List$1", "List$2", "List$3", "Thing$0", "Thing$1", "Thing$2", + "Thing$3" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Thing$0")); + x6_upper.add(factory.tuple("Thing$1")); + x6_upper.add(factory.tuple("Thing$2")); + x6_upper.add(factory.tuple("Thing$3")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("List$0")); + x7_upper.add(factory.tuple("List$1")); + x7_upper.add(factory.tuple("List$2")); + x7_upper.add(factory.tuple("List$3")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("List$0")); + x8_upper.add(factory.tuple("List$1")); + x8_upper.add(factory.tuple("List$2")); + x8_upper.add(factory.tuple("List$3")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$3"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$3"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$3"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$3"))); + bounds.bound(x12, x12_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x15=x7.intersection(x8); + Formula x14=x15.no(); + Variable x18=Variable.unary("show_this"); + Decls x17=x18.oneOf(x7); + Expression x21=x18.join(x11); + Formula x20=x21.one(); + Formula x22=x21.in(x6); + Formula x19=x20.and(x22); + Formula x16=x19.forAll(x17); + Expression x24=x11.join(Expression.UNIV); + Formula x23=x24.in(x7); + Variable x28=Variable.unary("show_this"); + Decls x27=x28.oneOf(x7); + Expression x31=x28.join(x12); + Formula x30=x31.one(); + Expression x33=x7.union(x8); + Formula x32=x31.in(x33); + Formula x29=x30.and(x32); + Formula x26=x29.forAll(x27); + Expression x35=x12.join(Expression.UNIV); + Formula x34=x35.in(x7); + Variable x38=Variable.unary("show_this"); + Decls x37=x38.oneOf(x33); + Expression x40=x38.join(x9); + Formula x39=x40.in(x33); + Formula x36=x39.forAll(x37); + Expression x42=x9.join(Expression.UNIV); + Formula x41=x42.in(x33); + Variable x45=Variable.unary("show_this"); + Decls x44=x45.oneOf(x33); + Expression x47=x45.join(x10); + Formula x46=x47.in(x33); + Formula x43=x46.forAll(x44); + Expression x49=x10.join(Expression.UNIV); + Formula x48=x49.in(x33); + Expression x51=x33.join(x11); + Formula x50=x6.in(x51); + Variable x54=Variable.unary("show_L"); + Decls x53=x54.oneOf(x33); + Variable x57=Variable.unary("isFinite_e"); + Decls x56=x57.oneOf(x8); + Expression x61=x12.closure(); + Expression x67=Expression.INTS.union(x5); + Expression x66=x67.union(x6); + Expression x65=x66.union(x33); + Expression x64=x65.product(Expression.UNIV); + Expression x62=Expression.IDEN.intersection(x64); + Expression x60=x61.union(x62); + Expression x59=x54.join(x60); + Formula x58=x57.in(x59); + Formula x55=x58.forSome(x56); + Formula x52=x55.forAll(x53); + Variable x72=Variable.unary("show_a"); + Decls x71=x72.oneOf(x33); + Variable x74=Variable.unary("show_b"); + Decls x73=x74.oneOf(x33); + Decls x70=x71.and(x73); + Expression x77=x74.join(x9); + Formula x76=x72.in(x77); + Expression x81=x72.join(x11); + Expression x82=x74.join(x11); + Formula x80=x81.eq(x82); + Expression x84=x74.join(x12); + Expression x86=x72.join(x12); + Expression x85=x86.join(x9); + Formula x83=x84.in(x85); + Formula x79=x80.and(x83); + Expression x91=x12.closure(); + Expression x93=x65.product(Expression.UNIV); + Expression x92=Expression.IDEN.intersection(x93); + Expression x90=x91.union(x92); + Expression x89=x72.join(x90); + IntExpression x88=x89.count(); + Expression x97=x12.closure(); + Expression x99=x65.product(Expression.UNIV); + Expression x98=Expression.IDEN.intersection(x99); + Expression x96=x97.union(x98); + Expression x95=x74.join(x96); + IntExpression x94=x95.count(); + Formula x87=x88.eq(x94); + Formula x78=x79.and(x87); + Formula x75=x76.iff(x78); + Formula x69=x75.forAll(x70); + Variable x103=Variable.unary("show_e"); + Decls x102=x103.oneOf(x8); + Variable x105=Variable.unary("show_L"); + Decls x104=x105.oneOf(x33); + Decls x101=x102.and(x104); + Expression x107=x105.join(x10); + Formula x106=x103.in(x107); + Formula x100=x106.forAll(x101); + Variable x111=Variable.unary("show_a"); + Decls x110=x111.oneOf(x7); + Variable x113=Variable.unary("show_b"); + Decls x112=x113.oneOf(x7); + Decls x109=x110.and(x112); + Expression x116=x113.join(x10); + Formula x115=x111.in(x116); + Expression x120=x111.join(x11); + Expression x121=x113.join(x11); + Formula x119=x120.eq(x121); + Expression x123=x111.join(x12); + Expression x125=x113.join(x12); + Expression x124=x125.join(x10); + Formula x122=x123.in(x124); + Formula x118=x119.and(x122); + Expression x130=x12.closure(); + Expression x132=x65.product(Expression.UNIV); + Expression x131=Expression.IDEN.intersection(x132); + Expression x129=x130.union(x131); + Expression x128=x111.join(x129); + IntExpression x127=x128.count(); + Expression x136=x12.closure(); + Expression x138=x65.product(Expression.UNIV); + Expression x137=Expression.IDEN.intersection(x138); + Expression x135=x136.union(x137); + Expression x134=x113.join(x135); + IntExpression x133=x134.count(); + Formula x126=x127.lt(x133); + Formula x117=x118.and(x126); + Formula x114=x115.iff(x117); + Formula x108=x114.forAll(x109); + Variable x142=Variable.unary("show_a"); + Decls x141=x142.oneOf(x7); + Variable x144=Variable.unary("show_b"); + Decls x143=x144.oneOf(x7); + Decls x140=x141.and(x143); + Formula x147=x142.eq(x144); + Formula x146=x147.not(); + Expression x149=x142.join(x10); + Formula x148=x144.in(x149); + Formula x145=x146.and(x148); + Formula x139=x145.forSome(x140); + Formula x150=x0.eq(x0); + Formula x151=x1.eq(x1); + Formula x152=x2.eq(x2); + Formula x153=x3.eq(x3); + Formula x154=x4.eq(x4); + Formula x155=x5.eq(x5); + Formula x156=x6.eq(x6); + Formula x157=x7.eq(x7); + Formula x158=x8.eq(x8); + Formula x159=x9.eq(x9); + Formula x160=x10.eq(x10); + Formula x161=x11.eq(x11); + Formula x162=x12.eq(x12); + Formula x13=Formula.compose(FormulaOperator.AND, x14, x16, x23, x26, x34, x36, x41, x43, x48, x50, x52, x69, x100, x108, x139, x150, x151, x152, x153, x154, x155, x156, x157, x158, x159, x160, x161, x162); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x13,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/lists/listsSymmetricCheck.java b/Source/kodkod/examples/kodkod/examples/models/simple/lists/listsSymmetricCheck.java new file mode 100644 index 0000000..305dd16 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/lists/listsSymmetricCheck.java @@ -0,0 +1,467 @@ +package kodkod.examples.models.simple.lists; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + + +@ExampleMetadata( + Name = "lists", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 2, + TransitiveClosure = 5, + NestedQuantifiers = 0, + SetCardinality = 4, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 0, + Constraints = 15 +) + + +public final class listsSymmetricCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Thing"); + Relation x7 = Relation.unary("this/NonEmptyList"); + Relation x8 = Relation.unary("this/EmptyList"); + Relation x9 = Relation.nary("this/List.equivTo", 2); + Relation x10 = Relation.nary("this/List.prefixes", 2); + Relation x11 = Relation.nary("this/NonEmptyList.car", 2); + Relation x12 = Relation.nary("this/NonEmptyList.cdr", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "List$0", + "List$1", "List$2", "List$3", "List$4", "List$5", "Thing$0", + "Thing$1", "Thing$2", "Thing$3", "Thing$4", "Thing$5" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + x4_upper.add(factory.tuple("5")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Thing$0")); + x6_upper.add(factory.tuple("Thing$1")); + x6_upper.add(factory.tuple("Thing$2")); + x6_upper.add(factory.tuple("Thing$3")); + x6_upper.add(factory.tuple("Thing$4")); + x6_upper.add(factory.tuple("Thing$5")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("List$0")); + x7_upper.add(factory.tuple("List$1")); + x7_upper.add(factory.tuple("List$2")); + x7_upper.add(factory.tuple("List$3")); + x7_upper.add(factory.tuple("List$4")); + x7_upper.add(factory.tuple("List$5")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("List$0")); + x8_upper.add(factory.tuple("List$1")); + x8_upper.add(factory.tuple("List$2")); + x8_upper.add(factory.tuple("List$3")); + x8_upper.add(factory.tuple("List$4")); + x8_upper.add(factory.tuple("List$5")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$0").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$1").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$2").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$3").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$4").product(factory.tuple("List$5"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$0"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$1"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$2"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$3"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$4"))); + x9_upper.add(factory.tuple("List$5").product(factory.tuple("List$5"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$0").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$1").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$2").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$3").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$4").product(factory.tuple("List$5"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$0"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$1"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$2"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$3"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$4"))); + x10_upper.add(factory.tuple("List$5").product(factory.tuple("List$5"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$0").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$1").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$2").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$3").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$4").product(factory.tuple("Thing$5"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$0"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$1"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$2"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$3"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$4"))); + x11_upper.add(factory.tuple("List$5").product(factory.tuple("Thing$5"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$0").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$1").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$2").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$3").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$4").product(factory.tuple("List$5"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$0"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$1"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$2"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$3"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$4"))); + x12_upper.add(factory.tuple("List$5").product(factory.tuple("List$5"))); + bounds.bound(x12, x12_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x15=x7.intersection(x8); + Formula x14=x15.no(); + Variable x18=Variable.unary("symmetric_this"); + Decls x17=x18.oneOf(x7); + Expression x21=x18.join(x11); + Formula x20=x21.one(); + Formula x22=x21.in(x6); + Formula x19=x20.and(x22); + Formula x16=x19.forAll(x17); + Expression x24=x11.join(Expression.UNIV); + Formula x23=x24.in(x7); + Variable x28=Variable.unary("symmetric_this"); + Decls x27=x28.oneOf(x7); + Expression x31=x28.join(x12); + Formula x30=x31.one(); + Expression x33=x7.union(x8); + Formula x32=x31.in(x33); + Formula x29=x30.and(x32); + Formula x26=x29.forAll(x27); + Expression x35=x12.join(Expression.UNIV); + Formula x34=x35.in(x7); + Variable x38=Variable.unary("symmetric_this"); + Decls x37=x38.oneOf(x33); + Expression x40=x38.join(x9); + Formula x39=x40.in(x33); + Formula x36=x39.forAll(x37); + Expression x42=x9.join(Expression.UNIV); + Formula x41=x42.in(x33); + Variable x45=Variable.unary("symmetric_this"); + Decls x44=x45.oneOf(x33); + Expression x47=x45.join(x10); + Formula x46=x47.in(x33); + Formula x43=x46.forAll(x44); + Expression x49=x10.join(Expression.UNIV); + Formula x48=x49.in(x33); + Expression x51=x33.join(x11); + Formula x50=x6.in(x51); + Variable x54=Variable.unary("symmetric_L"); + Decls x53=x54.oneOf(x33); + Variable x57=Variable.unary("isFinite_e"); + Decls x56=x57.oneOf(x8); + Expression x61=x12.closure(); + Expression x67=Expression.INTS.union(x5); + Expression x66=x67.union(x6); + Expression x65=x66.union(x33); + Expression x64=x65.product(Expression.UNIV); + Expression x62=Expression.IDEN.intersection(x64); + Expression x60=x61.union(x62); + Expression x59=x54.join(x60); + Formula x58=x57.in(x59); + Formula x55=x58.forSome(x56); + Formula x52=x55.forAll(x53); + Variable x72=Variable.unary("symmetric_a"); + Decls x71=x72.oneOf(x33); + Variable x74=Variable.unary("symmetric_b"); + Decls x73=x74.oneOf(x33); + Decls x70=x71.and(x73); + Expression x77=x74.join(x9); + Formula x76=x72.in(x77); + Expression x81=x72.join(x11); + Expression x82=x74.join(x11); + Formula x80=x81.eq(x82); + Expression x84=x74.join(x12); + Expression x86=x72.join(x12); + Expression x85=x86.join(x9); + Formula x83=x84.in(x85); + Formula x79=x80.and(x83); + Expression x91=x12.closure(); + Expression x93=x65.product(Expression.UNIV); + Expression x92=Expression.IDEN.intersection(x93); + Expression x90=x91.union(x92); + Expression x89=x72.join(x90); + IntExpression x88=x89.count(); + Expression x97=x12.closure(); + Expression x99=x65.product(Expression.UNIV); + Expression x98=Expression.IDEN.intersection(x99); + Expression x96=x97.union(x98); + Expression x95=x74.join(x96); + IntExpression x94=x95.count(); + Formula x87=x88.eq(x94); + Formula x78=x79.and(x87); + Formula x75=x76.iff(x78); + Formula x69=x75.forAll(x70); + Variable x103=Variable.unary("symmetric_e"); + Decls x102=x103.oneOf(x8); + Variable x105=Variable.unary("symmetric_L"); + Decls x104=x105.oneOf(x33); + Decls x101=x102.and(x104); + Expression x107=x105.join(x10); + Formula x106=x103.in(x107); + Formula x100=x106.forAll(x101); + Variable x111=Variable.unary("symmetric_a"); + Decls x110=x111.oneOf(x7); + Variable x113=Variable.unary("symmetric_b"); + Decls x112=x113.oneOf(x7); + Decls x109=x110.and(x112); + Expression x116=x113.join(x10); + Formula x115=x111.in(x116); + Expression x120=x111.join(x11); + Expression x121=x113.join(x11); + Formula x119=x120.eq(x121); + Expression x123=x111.join(x12); + Expression x125=x113.join(x12); + Expression x124=x125.join(x10); + Formula x122=x123.in(x124); + Formula x118=x119.and(x122); + Expression x130=x12.closure(); + Expression x132=x65.product(Expression.UNIV); + Expression x131=Expression.IDEN.intersection(x132); + Expression x129=x130.union(x131); + Expression x128=x111.join(x129); + IntExpression x127=x128.count(); + Expression x136=x12.closure(); + Expression x138=x65.product(Expression.UNIV); + Expression x137=Expression.IDEN.intersection(x138); + Expression x135=x136.union(x137); + Expression x134=x113.join(x135); + IntExpression x133=x134.count(); + Formula x126=x127.lt(x133); + Formula x117=x118.and(x126); + Formula x114=x115.iff(x117); + Formula x108=x114.forAll(x109); + Variable x143=Variable.unary("symmetric_a"); + Decls x142=x143.oneOf(x33); + Variable x145=Variable.unary("symmetric_b"); + Decls x144=x145.oneOf(x33); + Decls x141=x142.and(x144); + Expression x148=x145.join(x9); + Formula x147=x143.in(x148); + Expression x150=x143.join(x9); + Formula x149=x145.in(x150); + Formula x146=x147.iff(x149); + Formula x140=x146.forAll(x141); + Formula x139=x140.not(); + Formula x151=x0.eq(x0); + Formula x152=x1.eq(x1); + Formula x153=x2.eq(x2); + Formula x154=x3.eq(x3); + Formula x155=x4.eq(x4); + Formula x156=x5.eq(x5); + Formula x157=x6.eq(x6); + Formula x158=x7.eq(x7); + Formula x159=x8.eq(x8); + Formula x160=x9.eq(x9); + Formula x161=x10.eq(x10); + Formula x162=x11.eq(x11); + Formula x163=x12.eq(x12); + Formula x13=Formula.compose(FormulaOperator.AND, x14, x16, x23, x26, x34, x36, x41, x43, x48, x50, x52, x69, x100, x108, x139, x151, x152, x153, x154, x155, x156, x157, x158, x159, x160, x161, x162, x163); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x13,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/stateMachine/flipflopShowRun.java b/Source/kodkod/examples/kodkod/examples/models/simple/stateMachine/flipflopShowRun.java new file mode 100644 index 0000000..e2e5cac --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/stateMachine/flipflopShowRun.java @@ -0,0 +1,515 @@ +package kodkod.examples.models.simple.stateMachine; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "flip-flop", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 6, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 1, + TransitiveClosure = 4, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 3, + OrderedRelations = 1, + Constraints = 5 +) + + +public final class flipflopShowRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/C"); + Relation x7 = Relation.unary("this/On"); + Relation x8 = Relation.unary("this/Off"); + Relation x9 = Relation.unary("this/Trace"); + Relation x10 = Relation.unary("ordering/Ord"); + Relation x11 = Relation.unary("open$2/Ord"); + Relation x12 = Relation.unary("open$3/Ord"); + Relation x13 = Relation.nary("this/Trace.state", 2); + Relation x14 = Relation.nary("this/Trace.event", 2); + Relation x15 = Relation.unary("ordering/Ord.First"); + Relation x16 = Relation.nary("ordering/Ord.Next", 2); + Relation x17 = Relation.nary("open$2/Ord.First", 2); + Relation x18 = Relation.nary("open$2/Ord.Next", 3); + Relation x19 = Relation.nary("open$3/Ord.First", 2); + Relation x20 = Relation.nary("open$3/Ord.Next", 3); + Relation x21 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "C$0", + "Off$0", "On$0", "Trace$0", "Trace$1", "Trace$2", "Trace$3", + "Trace$4", "Trace$5", "Trace$6", "Trace$7", "Trace$8", "Trace$9", + "open$2/Ord$0", "open$3/Ord$0", "ordering/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + x4_upper.add(factory.tuple("5")); + x4_upper.add(factory.tuple("6")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("C$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("On$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Off$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Trace$0")); + x9_upper.add(factory.tuple("Trace$1")); + x9_upper.add(factory.tuple("Trace$2")); + x9_upper.add(factory.tuple("Trace$3")); + x9_upper.add(factory.tuple("Trace$4")); + x9_upper.add(factory.tuple("Trace$5")); + x9_upper.add(factory.tuple("Trace$6")); + x9_upper.add(factory.tuple("Trace$7")); + x9_upper.add(factory.tuple("Trace$8")); + x9_upper.add(factory.tuple("Trace$9")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("ordering/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("open$2/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("open$3/Ord$0")); + bounds.boundExactly(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Trace$0").product(factory.tuple("On$0"))); + x13_upper.add(factory.tuple("Trace$0").product(factory.tuple("Off$0"))); + x13_upper.add(factory.tuple("Trace$1").product(factory.tuple("On$0"))); + x13_upper.add(factory.tuple("Trace$1").product(factory.tuple("Off$0"))); + x13_upper.add(factory.tuple("Trace$2").product(factory.tuple("On$0"))); + x13_upper.add(factory.tuple("Trace$2").product(factory.tuple("Off$0"))); + x13_upper.add(factory.tuple("Trace$3").product(factory.tuple("On$0"))); + x13_upper.add(factory.tuple("Trace$3").product(factory.tuple("Off$0"))); + x13_upper.add(factory.tuple("Trace$4").product(factory.tuple("On$0"))); + x13_upper.add(factory.tuple("Trace$4").product(factory.tuple("Off$0"))); + x13_upper.add(factory.tuple("Trace$5").product(factory.tuple("On$0"))); + x13_upper.add(factory.tuple("Trace$5").product(factory.tuple("Off$0"))); + x13_upper.add(factory.tuple("Trace$6").product(factory.tuple("On$0"))); + x13_upper.add(factory.tuple("Trace$6").product(factory.tuple("Off$0"))); + x13_upper.add(factory.tuple("Trace$7").product(factory.tuple("On$0"))); + x13_upper.add(factory.tuple("Trace$7").product(factory.tuple("Off$0"))); + x13_upper.add(factory.tuple("Trace$8").product(factory.tuple("On$0"))); + x13_upper.add(factory.tuple("Trace$8").product(factory.tuple("Off$0"))); + x13_upper.add(factory.tuple("Trace$9").product(factory.tuple("On$0"))); + x13_upper.add(factory.tuple("Trace$9").product(factory.tuple("Off$0"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Trace$0").product(factory.tuple("C$0"))); + x14_upper.add(factory.tuple("Trace$1").product(factory.tuple("C$0"))); + x14_upper.add(factory.tuple("Trace$2").product(factory.tuple("C$0"))); + x14_upper.add(factory.tuple("Trace$3").product(factory.tuple("C$0"))); + x14_upper.add(factory.tuple("Trace$4").product(factory.tuple("C$0"))); + x14_upper.add(factory.tuple("Trace$5").product(factory.tuple("C$0"))); + x14_upper.add(factory.tuple("Trace$6").product(factory.tuple("C$0"))); + x14_upper.add(factory.tuple("Trace$7").product(factory.tuple("C$0"))); + x14_upper.add(factory.tuple("Trace$8").product(factory.tuple("C$0"))); + x14_upper.add(factory.tuple("Trace$9").product(factory.tuple("C$0"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("Trace$0")); + x15_upper.add(factory.tuple("Trace$1")); + x15_upper.add(factory.tuple("Trace$2")); + x15_upper.add(factory.tuple("Trace$3")); + x15_upper.add(factory.tuple("Trace$4")); + x15_upper.add(factory.tuple("Trace$5")); + x15_upper.add(factory.tuple("Trace$6")); + x15_upper.add(factory.tuple("Trace$7")); + x15_upper.add(factory.tuple("Trace$8")); + x15_upper.add(factory.tuple("Trace$9")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$0"))); + x16_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$1"))); + x16_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$2"))); + x16_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$3"))); + x16_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$4"))); + x16_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$5"))); + x16_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$6"))); + x16_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$7"))); + x16_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$8"))); + x16_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$9"))); + x16_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$0"))); + x16_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$1"))); + x16_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$2"))); + x16_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$3"))); + x16_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$4"))); + x16_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$5"))); + x16_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$6"))); + x16_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$7"))); + x16_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$8"))); + x16_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$9"))); + x16_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$0"))); + x16_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$1"))); + x16_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$2"))); + x16_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$3"))); + x16_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$4"))); + x16_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$5"))); + x16_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$6"))); + x16_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$7"))); + x16_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$8"))); + x16_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$9"))); + x16_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$0"))); + x16_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$1"))); + x16_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$2"))); + x16_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$3"))); + x16_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$4"))); + x16_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$5"))); + x16_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$6"))); + x16_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$7"))); + x16_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$8"))); + x16_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$9"))); + x16_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$0"))); + x16_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$1"))); + x16_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$2"))); + x16_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$3"))); + x16_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$4"))); + x16_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$5"))); + x16_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$6"))); + x16_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$7"))); + x16_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$8"))); + x16_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$9"))); + x16_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$0"))); + x16_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$1"))); + x16_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$2"))); + x16_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$3"))); + x16_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$4"))); + x16_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$5"))); + x16_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$6"))); + x16_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$7"))); + x16_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$8"))); + x16_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$9"))); + x16_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$0"))); + x16_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$1"))); + x16_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$2"))); + x16_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$3"))); + x16_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$4"))); + x16_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$5"))); + x16_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$6"))); + x16_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$7"))); + x16_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$8"))); + x16_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$9"))); + x16_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$0"))); + x16_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$1"))); + x16_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$2"))); + x16_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$3"))); + x16_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$4"))); + x16_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$5"))); + x16_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$6"))); + x16_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$7"))); + x16_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$8"))); + x16_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$9"))); + x16_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$0"))); + x16_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$1"))); + x16_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$2"))); + x16_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$3"))); + x16_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$4"))); + x16_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$5"))); + x16_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$6"))); + x16_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$7"))); + x16_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$8"))); + x16_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$9"))); + x16_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$0"))); + x16_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$1"))); + x16_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$2"))); + x16_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$3"))); + x16_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$4"))); + x16_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$5"))); + x16_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$6"))); + x16_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$7"))); + x16_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$8"))); + x16_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$9"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("open$2/Ord$0").product(factory.tuple("C$0"))); + bounds.boundExactly(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + bounds.boundExactly(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(2); + x19_upper.add(factory.tuple("open$3/Ord$0").product(factory.tuple("On$0"))); + bounds.boundExactly(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(3); + x20_upper.add(factory.tuple("open$3/Ord$0").product(factory.tuple("On$0")).product(factory.tuple("Off$0"))); + bounds.boundExactly(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(1); + x21_upper.add(factory.tuple("Trace$0")); + x21_upper.add(factory.tuple("Trace$1")); + x21_upper.add(factory.tuple("Trace$2")); + x21_upper.add(factory.tuple("Trace$3")); + x21_upper.add(factory.tuple("Trace$4")); + x21_upper.add(factory.tuple("Trace$5")); + x21_upper.add(factory.tuple("Trace$6")); + x21_upper.add(factory.tuple("Trace$7")); + x21_upper.add(factory.tuple("Trace$8")); + x21_upper.add(factory.tuple("Trace$9")); + bounds.bound(x21, x21_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x24=x7.intersection(x8); + Formula x23=x24.no(); + Variable x27=Variable.unary("show_this"); + Decls x26=x27.oneOf(x9); + Expression x30=x27.join(x13); + Formula x29=x30.one(); + Expression x32=x7.union(x8); + Formula x31=x30.in(x32); + Formula x28=x29.and(x31); + Formula x25=x28.forAll(x26); + Expression x34=x13.join(Expression.UNIV); + Formula x33=x34.in(x9); + Variable x38=Variable.unary("show_this"); + Decls x37=x38.oneOf(x9); + Expression x41=x38.join(x14); + Formula x40=x41.lone(); + Formula x42=x41.in(x6); + Formula x39=x40.and(x42); + Formula x36=x39.forAll(x37); + Expression x44=x14.join(Expression.UNIV); + Formula x43=x44.in(x9); + Expression x47=x10.product(x15); + Expression x46=x10.join(x47); + Formula x45=x46.in(x9); + Expression x50=x10.product(x16); + Expression x49=x10.join(x50); + Expression x51=x9.product(x9); + Formula x48=x49.in(x51); + Formula x52=x16.totalOrder(x9,x15,x21); + Expression x54=x11.join(x17); + Formula x53=x54.in(x6); + Expression x56=x11.join(x18); + Expression x57=x6.product(x6); + Formula x55=x56.in(x57); + Variable x62=Variable.unary(""); + Decls x61=x62.oneOf(x6); + Expression x67=x11.join(x17); + Formula x66=x62.eq(x67); + Expression x70=x11.join(x18); + Expression x69=x70.join(x62); + Formula x68=x69.one(); + Formula x65=x66.or(x68); + Expression x74=x70.join(x6); + Expression x73=x6.difference(x74); + Formula x72=x62.eq(x73); + Expression x76=x62.join(x70); + Formula x75=x76.one(); + Formula x71=x72.or(x75); + Formula x64=x65.and(x71); + Expression x80=x70.closure(); + Expression x79=x62.join(x80); + Formula x78=x62.in(x79); + Formula x77=x78.not(); + Formula x63=x64.and(x77); + Formula x60=x63.forAll(x61); + Expression x83=x70.reflexiveClosure(); + Expression x82=x67.join(x83); + Formula x81=x6.in(x82); + Formula x59=x60.and(x81); + Expression x85=x70.join(x67); + Formula x84=x85.no(); + Formula x58=x59.and(x84); + Expression x87=x12.join(x19); + Formula x86=x87.in(x32); + Expression x89=x12.join(x20); + Expression x90=x32.product(x32); + Formula x88=x89.in(x90); + Variable x95=Variable.unary(""); + Decls x94=x95.oneOf(x32); + Expression x100=x12.join(x19); + Formula x99=x95.eq(x100); + Expression x103=x12.join(x20); + Expression x102=x103.join(x95); + Formula x101=x102.one(); + Formula x98=x99.or(x101); + Expression x107=x103.join(x32); + Expression x106=x32.difference(x107); + Formula x105=x95.eq(x106); + Expression x109=x95.join(x103); + Formula x108=x109.one(); + Formula x104=x105.or(x108); + Formula x97=x98.and(x104); + Expression x113=x103.closure(); + Expression x112=x95.join(x113); + Formula x111=x95.in(x112); + Formula x110=x111.not(); + Formula x96=x97.and(x110); + Formula x93=x96.forAll(x94); + Expression x116=x103.reflexiveClosure(); + Expression x115=x100.join(x116); + Formula x114=x32.in(x115); + Formula x92=x93.and(x114); + Expression x118=x103.join(x100); + Formula x117=x118.no(); + Formula x91=x92.and(x117); + Expression x120=x15.join(x13); + Formula x119=x120.eq(x7); + Expression x124=x16.join(x9); + Expression x123=x9.difference(x124); + Expression x122=x123.join(x14); + Formula x121=x122.no(); + Variable x128=Variable.unary("show_t"); + Expression x129=x9.difference(x123); + Decls x127=x128.oneOf(x129); + Variable x131=Variable.unary("show_t'"); + Expression x132=x128.join(x16); + Decls x130=x131.oneOf(x132); + Decls x126=x127.and(x130); + Variable x135=Variable.unary("show_e"); + Decls x134=x135.oneOf(x6); + Expression x138=x128.join(x14); + Formula x137=x138.eq(x135); + Expression x140=x131.join(x13); + Expression x142=x128.join(x14); + Expression x144=x128.join(x13); + Expression x147=x6.product(x8); + Expression x146=x7.product(x147); + Expression x149=x6.product(x7); + Expression x148=x8.product(x149); + Expression x145=x146.union(x148); + Expression x143=x144.join(x145); + Expression x141=x142.join(x143); + Formula x139=x140.eq(x141); + Formula x136=x137.and(x139); + Formula x133=x136.forSome(x134); + Formula x125=x133.forAll(x126); + Variable x152=Variable.unary("show_t"); + Decls x151=x152.setOf(x9); + Formula x150=Formula.TRUE.forSome(x151); + Formula x154=x0.eq(x0); + Formula x155=x1.eq(x1); + Formula x156=x2.eq(x2); + Formula x157=x3.eq(x3); + Formula x158=x4.eq(x4); + Formula x159=x5.eq(x5); + Formula x160=x6.eq(x6); + Formula x161=x7.eq(x7); + Formula x162=x8.eq(x8); + Formula x163=x9.eq(x9); + Formula x164=x10.eq(x10); + Formula x165=x11.eq(x11); + Formula x166=x12.eq(x12); + Formula x167=x13.eq(x13); + Formula x168=x14.eq(x14); + Formula x169=x15.eq(x15); + Formula x170=x16.eq(x16); + Formula x171=x17.eq(x17); + Formula x172=x18.eq(x18); + Formula x173=x19.eq(x19); + Formula x174=x20.eq(x20); + Formula x175=x21.eq(x21); + Formula x22=Formula.compose(FormulaOperator.AND, x23, x25, x33, x36, x43, x45, x48, x52, x53, x55, x58, x86, x88, x91, x119, x121, x125, x150, x154, x155, x156, x157, x158, x159, x160, x161, x162, x163, x164, x165, x166, x167, x168, x169, x170, x171, x172, x173, x174, x175); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x22,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/simple/stateMachine/reset_flip_flop_with_enableShowRun.java b/Source/kodkod/examples/kodkod/examples/models/simple/stateMachine/reset_flip_flop_with_enableShowRun.java new file mode 100644 index 0000000..e0c8170 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/simple/stateMachine/reset_flip_flop_with_enableShowRun.java @@ -0,0 +1,549 @@ +package kodkod.examples.models.simple.stateMachine; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "reset-flip-flop-with-enable", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 6, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 1, + TransitiveClosure = 5, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 1, + Constraints = 6 +) + + +public final class reset_flip_flop_with_enableShowRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/C"); + Relation x7 = Relation.unary("this/X"); + Relation x8 = Relation.unary("this/On"); + Relation x9 = Relation.unary("this/Off"); + Relation x10 = Relation.unary("this/Trace"); + Relation x11 = Relation.unary("ordering/Ord"); + Relation x12 = Relation.unary("open$2/Ord"); + Relation x13 = Relation.unary("open$3/Ord"); + Relation x14 = Relation.nary("this/Trace.state", 2); + Relation x15 = Relation.nary("this/Trace.event", 2); + Relation x16 = Relation.unary("ordering/Ord.First"); + Relation x17 = Relation.nary("ordering/Ord.Next", 2); + Relation x18 = Relation.nary("open$2/Ord.First", 2); + Relation x19 = Relation.nary("open$2/Ord.Next", 3); + Relation x20 = Relation.nary("open$3/Ord.First", 2); + Relation x21 = Relation.nary("open$3/Ord.Next", 3); + Relation x22 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "C$0", + "Off$0", "On$0", "Trace$0", "Trace$1", "Trace$2", "Trace$3", + "Trace$4", "Trace$5", "Trace$6", "Trace$7", "Trace$8", "Trace$9", + "X$0", "open$2/Ord$0", "open$3/Ord$0", "ordering/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + x4_upper.add(factory.tuple("5")); + x4_upper.add(factory.tuple("6")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("C$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("X$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("On$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Off$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Trace$0")); + x10_upper.add(factory.tuple("Trace$1")); + x10_upper.add(factory.tuple("Trace$2")); + x10_upper.add(factory.tuple("Trace$3")); + x10_upper.add(factory.tuple("Trace$4")); + x10_upper.add(factory.tuple("Trace$5")); + x10_upper.add(factory.tuple("Trace$6")); + x10_upper.add(factory.tuple("Trace$7")); + x10_upper.add(factory.tuple("Trace$8")); + x10_upper.add(factory.tuple("Trace$9")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("ordering/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("open$2/Ord$0")); + bounds.boundExactly(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("open$3/Ord$0")); + bounds.boundExactly(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Trace$0").product(factory.tuple("On$0"))); + x14_upper.add(factory.tuple("Trace$0").product(factory.tuple("Off$0"))); + x14_upper.add(factory.tuple("Trace$1").product(factory.tuple("On$0"))); + x14_upper.add(factory.tuple("Trace$1").product(factory.tuple("Off$0"))); + x14_upper.add(factory.tuple("Trace$2").product(factory.tuple("On$0"))); + x14_upper.add(factory.tuple("Trace$2").product(factory.tuple("Off$0"))); + x14_upper.add(factory.tuple("Trace$3").product(factory.tuple("On$0"))); + x14_upper.add(factory.tuple("Trace$3").product(factory.tuple("Off$0"))); + x14_upper.add(factory.tuple("Trace$4").product(factory.tuple("On$0"))); + x14_upper.add(factory.tuple("Trace$4").product(factory.tuple("Off$0"))); + x14_upper.add(factory.tuple("Trace$5").product(factory.tuple("On$0"))); + x14_upper.add(factory.tuple("Trace$5").product(factory.tuple("Off$0"))); + x14_upper.add(factory.tuple("Trace$6").product(factory.tuple("On$0"))); + x14_upper.add(factory.tuple("Trace$6").product(factory.tuple("Off$0"))); + x14_upper.add(factory.tuple("Trace$7").product(factory.tuple("On$0"))); + x14_upper.add(factory.tuple("Trace$7").product(factory.tuple("Off$0"))); + x14_upper.add(factory.tuple("Trace$8").product(factory.tuple("On$0"))); + x14_upper.add(factory.tuple("Trace$8").product(factory.tuple("Off$0"))); + x14_upper.add(factory.tuple("Trace$9").product(factory.tuple("On$0"))); + x14_upper.add(factory.tuple("Trace$9").product(factory.tuple("Off$0"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("Trace$0").product(factory.tuple("C$0"))); + x15_upper.add(factory.tuple("Trace$0").product(factory.tuple("X$0"))); + x15_upper.add(factory.tuple("Trace$1").product(factory.tuple("C$0"))); + x15_upper.add(factory.tuple("Trace$1").product(factory.tuple("X$0"))); + x15_upper.add(factory.tuple("Trace$2").product(factory.tuple("C$0"))); + x15_upper.add(factory.tuple("Trace$2").product(factory.tuple("X$0"))); + x15_upper.add(factory.tuple("Trace$3").product(factory.tuple("C$0"))); + x15_upper.add(factory.tuple("Trace$3").product(factory.tuple("X$0"))); + x15_upper.add(factory.tuple("Trace$4").product(factory.tuple("C$0"))); + x15_upper.add(factory.tuple("Trace$4").product(factory.tuple("X$0"))); + x15_upper.add(factory.tuple("Trace$5").product(factory.tuple("C$0"))); + x15_upper.add(factory.tuple("Trace$5").product(factory.tuple("X$0"))); + x15_upper.add(factory.tuple("Trace$6").product(factory.tuple("C$0"))); + x15_upper.add(factory.tuple("Trace$6").product(factory.tuple("X$0"))); + x15_upper.add(factory.tuple("Trace$7").product(factory.tuple("C$0"))); + x15_upper.add(factory.tuple("Trace$7").product(factory.tuple("X$0"))); + x15_upper.add(factory.tuple("Trace$8").product(factory.tuple("C$0"))); + x15_upper.add(factory.tuple("Trace$8").product(factory.tuple("X$0"))); + x15_upper.add(factory.tuple("Trace$9").product(factory.tuple("C$0"))); + x15_upper.add(factory.tuple("Trace$9").product(factory.tuple("X$0"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(1); + x16_upper.add(factory.tuple("Trace$0")); + x16_upper.add(factory.tuple("Trace$1")); + x16_upper.add(factory.tuple("Trace$2")); + x16_upper.add(factory.tuple("Trace$3")); + x16_upper.add(factory.tuple("Trace$4")); + x16_upper.add(factory.tuple("Trace$5")); + x16_upper.add(factory.tuple("Trace$6")); + x16_upper.add(factory.tuple("Trace$7")); + x16_upper.add(factory.tuple("Trace$8")); + x16_upper.add(factory.tuple("Trace$9")); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$0"))); + x17_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$1"))); + x17_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$2"))); + x17_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$3"))); + x17_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$4"))); + x17_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$5"))); + x17_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$6"))); + x17_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$7"))); + x17_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$8"))); + x17_upper.add(factory.tuple("Trace$0").product(factory.tuple("Trace$9"))); + x17_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$0"))); + x17_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$1"))); + x17_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$2"))); + x17_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$3"))); + x17_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$4"))); + x17_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$5"))); + x17_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$6"))); + x17_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$7"))); + x17_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$8"))); + x17_upper.add(factory.tuple("Trace$1").product(factory.tuple("Trace$9"))); + x17_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$0"))); + x17_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$1"))); + x17_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$2"))); + x17_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$3"))); + x17_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$4"))); + x17_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$5"))); + x17_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$6"))); + x17_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$7"))); + x17_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$8"))); + x17_upper.add(factory.tuple("Trace$2").product(factory.tuple("Trace$9"))); + x17_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$0"))); + x17_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$1"))); + x17_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$2"))); + x17_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$3"))); + x17_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$4"))); + x17_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$5"))); + x17_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$6"))); + x17_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$7"))); + x17_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$8"))); + x17_upper.add(factory.tuple("Trace$3").product(factory.tuple("Trace$9"))); + x17_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$0"))); + x17_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$1"))); + x17_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$2"))); + x17_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$3"))); + x17_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$4"))); + x17_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$5"))); + x17_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$6"))); + x17_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$7"))); + x17_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$8"))); + x17_upper.add(factory.tuple("Trace$4").product(factory.tuple("Trace$9"))); + x17_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$0"))); + x17_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$1"))); + x17_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$2"))); + x17_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$3"))); + x17_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$4"))); + x17_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$5"))); + x17_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$6"))); + x17_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$7"))); + x17_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$8"))); + x17_upper.add(factory.tuple("Trace$5").product(factory.tuple("Trace$9"))); + x17_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$0"))); + x17_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$1"))); + x17_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$2"))); + x17_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$3"))); + x17_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$4"))); + x17_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$5"))); + x17_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$6"))); + x17_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$7"))); + x17_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$8"))); + x17_upper.add(factory.tuple("Trace$6").product(factory.tuple("Trace$9"))); + x17_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$0"))); + x17_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$1"))); + x17_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$2"))); + x17_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$3"))); + x17_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$4"))); + x17_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$5"))); + x17_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$6"))); + x17_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$7"))); + x17_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$8"))); + x17_upper.add(factory.tuple("Trace$7").product(factory.tuple("Trace$9"))); + x17_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$0"))); + x17_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$1"))); + x17_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$2"))); + x17_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$3"))); + x17_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$4"))); + x17_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$5"))); + x17_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$6"))); + x17_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$7"))); + x17_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$8"))); + x17_upper.add(factory.tuple("Trace$8").product(factory.tuple("Trace$9"))); + x17_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$0"))); + x17_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$1"))); + x17_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$2"))); + x17_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$3"))); + x17_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$4"))); + x17_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$5"))); + x17_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$6"))); + x17_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$7"))); + x17_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$8"))); + x17_upper.add(factory.tuple("Trace$9").product(factory.tuple("Trace$9"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(2); + x18_upper.add(factory.tuple("open$2/Ord$0").product(factory.tuple("C$0"))); + bounds.boundExactly(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(3); + x19_upper.add(factory.tuple("open$2/Ord$0").product(factory.tuple("C$0")).product(factory.tuple("X$0"))); + bounds.boundExactly(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("open$3/Ord$0").product(factory.tuple("On$0"))); + bounds.boundExactly(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(3); + x21_upper.add(factory.tuple("open$3/Ord$0").product(factory.tuple("On$0")).product(factory.tuple("Off$0"))); + bounds.boundExactly(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(1); + x22_upper.add(factory.tuple("Trace$0")); + x22_upper.add(factory.tuple("Trace$1")); + x22_upper.add(factory.tuple("Trace$2")); + x22_upper.add(factory.tuple("Trace$3")); + x22_upper.add(factory.tuple("Trace$4")); + x22_upper.add(factory.tuple("Trace$5")); + x22_upper.add(factory.tuple("Trace$6")); + x22_upper.add(factory.tuple("Trace$7")); + x22_upper.add(factory.tuple("Trace$8")); + x22_upper.add(factory.tuple("Trace$9")); + bounds.bound(x22, x22_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x25=x6.intersection(x7); + Formula x24=x25.no(); + Expression x27=x8.intersection(x9); + Formula x26=x27.no(); + Variable x30=Variable.unary("show_this"); + Decls x29=x30.oneOf(x10); + Expression x33=x30.join(x14); + Formula x32=x33.one(); + Expression x35=x8.union(x9); + Formula x34=x33.in(x35); + Formula x31=x32.and(x34); + Formula x28=x31.forAll(x29); + Expression x37=x14.join(Expression.UNIV); + Formula x36=x37.in(x10); + Variable x41=Variable.unary("show_this"); + Decls x40=x41.oneOf(x10); + Expression x44=x41.join(x15); + Formula x43=x44.lone(); + Expression x46=x6.union(x7); + Formula x45=x44.in(x46); + Formula x42=x43.and(x45); + Formula x39=x42.forAll(x40); + Expression x48=x15.join(Expression.UNIV); + Formula x47=x48.in(x10); + Expression x51=x11.product(x16); + Expression x50=x11.join(x51); + Formula x49=x50.in(x10); + Expression x54=x11.product(x17); + Expression x53=x11.join(x54); + Expression x55=x10.product(x10); + Formula x52=x53.in(x55); + Formula x56=x17.totalOrder(x10,x16,x22); + Expression x58=x12.join(x18); + Formula x57=x58.in(x46); + Expression x60=x12.join(x19); + Expression x61=x46.product(x46); + Formula x59=x60.in(x61); + Variable x66=Variable.unary(""); + Decls x65=x66.oneOf(x46); + Expression x71=x12.join(x18); + Formula x70=x66.eq(x71); + Expression x74=x12.join(x19); + Expression x73=x74.join(x66); + Formula x72=x73.one(); + Formula x69=x70.or(x72); + Expression x78=x74.join(x46); + Expression x77=x46.difference(x78); + Formula x76=x66.eq(x77); + Expression x80=x66.join(x74); + Formula x79=x80.one(); + Formula x75=x76.or(x79); + Formula x68=x69.and(x75); + Expression x84=x74.closure(); + Expression x83=x66.join(x84); + Formula x82=x66.in(x83); + Formula x81=x82.not(); + Formula x67=x68.and(x81); + Formula x64=x67.forAll(x65); + Expression x87=x74.reflexiveClosure(); + Expression x86=x71.join(x87); + Formula x85=x46.in(x86); + Formula x63=x64.and(x85); + Expression x89=x74.join(x71); + Formula x88=x89.no(); + Formula x62=x63.and(x88); + Expression x91=x13.join(x20); + Formula x90=x91.in(x35); + Expression x93=x13.join(x21); + Expression x94=x35.product(x35); + Formula x92=x93.in(x94); + Variable x99=Variable.unary(""); + Decls x98=x99.oneOf(x35); + Expression x104=x13.join(x20); + Formula x103=x99.eq(x104); + Expression x107=x13.join(x21); + Expression x106=x107.join(x99); + Formula x105=x106.one(); + Formula x102=x103.or(x105); + Expression x111=x107.join(x35); + Expression x110=x35.difference(x111); + Formula x109=x99.eq(x110); + Expression x113=x99.join(x107); + Formula x112=x113.one(); + Formula x108=x109.or(x112); + Formula x101=x102.and(x108); + Expression x117=x107.closure(); + Expression x116=x99.join(x117); + Formula x115=x99.in(x116); + Formula x114=x115.not(); + Formula x100=x101.and(x114); + Formula x97=x100.forAll(x98); + Expression x120=x107.reflexiveClosure(); + Expression x119=x104.join(x120); + Formula x118=x35.in(x119); + Formula x96=x97.and(x118); + Expression x122=x107.join(x104); + Formula x121=x122.no(); + Formula x95=x96.and(x121); + Expression x124=x16.join(x14); + Formula x123=x124.eq(x8); + Expression x128=x17.join(x10); + Expression x127=x10.difference(x128); + Expression x126=x127.join(x15); + Formula x125=x126.no(); + Variable x132=Variable.unary("show_t'"); + Expression x133=x10.difference(x16); + Decls x131=x132.oneOf(x133); + Variable x135=Variable.unary("show_t"); + Expression x137=x17.transpose(); + Expression x136=x132.join(x137); + Decls x134=x135.oneOf(x136); + Decls x130=x131.and(x134); + Variable x140=Variable.unary("show_e"); + Decls x139=x140.oneOf(x46); + Expression x143=x135.join(x15); + Formula x142=x143.eq(x140); + Expression x145=x132.join(x14); + Expression x147=x135.join(x15); + Expression x149=x135.join(x14); + Expression x154=x6.product(x9); + Expression x153=x8.product(x154); + Expression x156=x7.product(x8); + Expression x155=x8.product(x156); + Expression x152=x153.union(x155); + Expression x158=x6.product(x8); + Expression x157=x9.product(x158); + Expression x151=x152.union(x157); + Expression x160=x7.product(x9); + Expression x159=x9.product(x160); + Expression x150=x151.union(x159); + Expression x148=x149.join(x150); + Expression x146=x147.join(x148); + Formula x144=x145.eq(x146); + Formula x141=x142.and(x144); + Formula x138=x141.forSome(x139); + Formula x129=x138.forAll(x130); + Variable x163=Variable.unary("show_t"); + Decls x162=x163.oneOf(x10); + Variable x166=Variable.unary("show_s"); + Expression x168=x17.closure(); + Expression x167=x163.join(x168); + Decls x165=x166.oneOf(x167); + Expression x170=x166.join(x14); + Formula x169=x170.eq(x9); + Formula x164=x169.forAll(x165); + Formula x161=x164.forSome(x162); + Formula x171=x0.eq(x0); + Formula x172=x1.eq(x1); + Formula x173=x2.eq(x2); + Formula x174=x3.eq(x3); + Formula x175=x4.eq(x4); + Formula x176=x5.eq(x5); + Formula x177=x6.eq(x6); + Formula x178=x7.eq(x7); + Formula x179=x8.eq(x8); + Formula x180=x9.eq(x9); + Formula x181=x10.eq(x10); + Formula x182=x11.eq(x11); + Formula x183=x12.eq(x12); + Formula x184=x13.eq(x13); + Formula x185=x14.eq(x14); + Formula x186=x15.eq(x15); + Formula x187=x16.eq(x16); + Formula x188=x17.eq(x17); + Formula x189=x18.eq(x18); + Formula x190=x19.eq(x19); + Formula x191=x20.eq(x20); + Formula x192=x21.eq(x21); + Formula x193=x22.eq(x22); + Formula x23=Formula.compose(FormulaOperator.AND, x24, x26, x28, x36, x39, x47, x49, x52, x56, x57, x59, x62, x90, x92, x95, x123, x125, x129, x161, x171, x172, x173, x174, x175, x176, x177, x178, x179, x180, x181, x182, x183, x184, x185, x186, x187, x188, x189, x190, x191, x192, x193); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x23,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/appendixE/p306HotelNotIntruderCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/appendixE/p306HotelNotIntruderCheck.java new file mode 100644 index 0000000..d3bd7f8 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/appendixE/p306HotelNotIntruderCheck.java @@ -0,0 +1,1546 @@ +package kodkod.examples.models.softwareAbstractions.appendixE; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "p306-hotel", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations = 3, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 9, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 17, + OrderedRelations = 1, + Constraints = 20 +) + + +public final class p306HotelNotIntruderCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Key"); + Relation x7 = Relation.unary("this/Time"); + Relation x8 = Relation.unary("this/Card"); + Relation x9 = Relation.unary("this/Room"); + Relation x10 = Relation.unary("this/Desk"); + Relation x11 = Relation.unary("this/Guest"); + Relation x12 = Relation.unary("timeOrder/Ord"); + Relation x13 = Relation.nary("this/Card.fst", 2); + Relation x14 = Relation.nary("this/Card.snd", 2); + Relation x15 = Relation.nary("this/Room.key", 3); + Relation x16 = Relation.nary("this/Desk.issued", 2); + Relation x17 = Relation.nary("this/Desk.prev", 3); + Relation x18 = Relation.nary("this/Guest.cards", 3); + Relation x19 = Relation.unary("timeOrder/Ord.First"); + Relation x20 = Relation.nary("timeOrder/Ord.Next", 2); + Relation x21 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Card$0", + "Card$1", "Card$2", "Card$3", "Card$4", "Card$5", "Desk$0", + "Guest$0", "Guest$1", "Guest$2", "Key$0", "Key$1", "Key$2", + "Key$3", "Key$4", "Key$5", "Room$0", "Room$1", "Room$2", + "Time$0", "Time$1", "Time$10", "Time$11", "Time$2", "Time$3", + "Time$4", "Time$5", "Time$6", "Time$7", "Time$8", "Time$9", + "timeOrder/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + x4_upper.add(factory.tuple("5")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Key$0")); + x6_upper.add(factory.tuple("Key$1")); + x6_upper.add(factory.tuple("Key$2")); + x6_upper.add(factory.tuple("Key$3")); + x6_upper.add(factory.tuple("Key$4")); + x6_upper.add(factory.tuple("Key$5")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Time$0")); + x7_upper.add(factory.tuple("Time$1")); + x7_upper.add(factory.tuple("Time$2")); + x7_upper.add(factory.tuple("Time$3")); + x7_upper.add(factory.tuple("Time$4")); + x7_upper.add(factory.tuple("Time$5")); + x7_upper.add(factory.tuple("Time$6")); + x7_upper.add(factory.tuple("Time$7")); + x7_upper.add(factory.tuple("Time$8")); + x7_upper.add(factory.tuple("Time$9")); + x7_upper.add(factory.tuple("Time$10")); + x7_upper.add(factory.tuple("Time$11")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Card$0")); + x8_upper.add(factory.tuple("Card$1")); + x8_upper.add(factory.tuple("Card$2")); + x8_upper.add(factory.tuple("Card$3")); + x8_upper.add(factory.tuple("Card$4")); + x8_upper.add(factory.tuple("Card$5")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Room$0")); + x9_upper.add(factory.tuple("Room$1")); + x9_upper.add(factory.tuple("Room$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Desk$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("Guest$0")); + x11_upper.add(factory.tuple("Guest$1")); + x11_upper.add(factory.tuple("Guest$2")); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("timeOrder/Ord$0")); + bounds.boundExactly(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Card$0").product(factory.tuple("Key$0"))); + x13_upper.add(factory.tuple("Card$0").product(factory.tuple("Key$1"))); + x13_upper.add(factory.tuple("Card$0").product(factory.tuple("Key$2"))); + x13_upper.add(factory.tuple("Card$0").product(factory.tuple("Key$3"))); + x13_upper.add(factory.tuple("Card$0").product(factory.tuple("Key$4"))); + x13_upper.add(factory.tuple("Card$0").product(factory.tuple("Key$5"))); + x13_upper.add(factory.tuple("Card$1").product(factory.tuple("Key$0"))); + x13_upper.add(factory.tuple("Card$1").product(factory.tuple("Key$1"))); + x13_upper.add(factory.tuple("Card$1").product(factory.tuple("Key$2"))); + x13_upper.add(factory.tuple("Card$1").product(factory.tuple("Key$3"))); + x13_upper.add(factory.tuple("Card$1").product(factory.tuple("Key$4"))); + x13_upper.add(factory.tuple("Card$1").product(factory.tuple("Key$5"))); + x13_upper.add(factory.tuple("Card$2").product(factory.tuple("Key$0"))); + x13_upper.add(factory.tuple("Card$2").product(factory.tuple("Key$1"))); + x13_upper.add(factory.tuple("Card$2").product(factory.tuple("Key$2"))); + x13_upper.add(factory.tuple("Card$2").product(factory.tuple("Key$3"))); + x13_upper.add(factory.tuple("Card$2").product(factory.tuple("Key$4"))); + x13_upper.add(factory.tuple("Card$2").product(factory.tuple("Key$5"))); + x13_upper.add(factory.tuple("Card$3").product(factory.tuple("Key$0"))); + x13_upper.add(factory.tuple("Card$3").product(factory.tuple("Key$1"))); + x13_upper.add(factory.tuple("Card$3").product(factory.tuple("Key$2"))); + x13_upper.add(factory.tuple("Card$3").product(factory.tuple("Key$3"))); + x13_upper.add(factory.tuple("Card$3").product(factory.tuple("Key$4"))); + x13_upper.add(factory.tuple("Card$3").product(factory.tuple("Key$5"))); + x13_upper.add(factory.tuple("Card$4").product(factory.tuple("Key$0"))); + x13_upper.add(factory.tuple("Card$4").product(factory.tuple("Key$1"))); + x13_upper.add(factory.tuple("Card$4").product(factory.tuple("Key$2"))); + x13_upper.add(factory.tuple("Card$4").product(factory.tuple("Key$3"))); + x13_upper.add(factory.tuple("Card$4").product(factory.tuple("Key$4"))); + x13_upper.add(factory.tuple("Card$4").product(factory.tuple("Key$5"))); + x13_upper.add(factory.tuple("Card$5").product(factory.tuple("Key$0"))); + x13_upper.add(factory.tuple("Card$5").product(factory.tuple("Key$1"))); + x13_upper.add(factory.tuple("Card$5").product(factory.tuple("Key$2"))); + x13_upper.add(factory.tuple("Card$5").product(factory.tuple("Key$3"))); + x13_upper.add(factory.tuple("Card$5").product(factory.tuple("Key$4"))); + x13_upper.add(factory.tuple("Card$5").product(factory.tuple("Key$5"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Card$0").product(factory.tuple("Key$0"))); + x14_upper.add(factory.tuple("Card$0").product(factory.tuple("Key$1"))); + x14_upper.add(factory.tuple("Card$0").product(factory.tuple("Key$2"))); + x14_upper.add(factory.tuple("Card$0").product(factory.tuple("Key$3"))); + x14_upper.add(factory.tuple("Card$0").product(factory.tuple("Key$4"))); + x14_upper.add(factory.tuple("Card$0").product(factory.tuple("Key$5"))); + x14_upper.add(factory.tuple("Card$1").product(factory.tuple("Key$0"))); + x14_upper.add(factory.tuple("Card$1").product(factory.tuple("Key$1"))); + x14_upper.add(factory.tuple("Card$1").product(factory.tuple("Key$2"))); + x14_upper.add(factory.tuple("Card$1").product(factory.tuple("Key$3"))); + x14_upper.add(factory.tuple("Card$1").product(factory.tuple("Key$4"))); + x14_upper.add(factory.tuple("Card$1").product(factory.tuple("Key$5"))); + x14_upper.add(factory.tuple("Card$2").product(factory.tuple("Key$0"))); + x14_upper.add(factory.tuple("Card$2").product(factory.tuple("Key$1"))); + x14_upper.add(factory.tuple("Card$2").product(factory.tuple("Key$2"))); + x14_upper.add(factory.tuple("Card$2").product(factory.tuple("Key$3"))); + x14_upper.add(factory.tuple("Card$2").product(factory.tuple("Key$4"))); + x14_upper.add(factory.tuple("Card$2").product(factory.tuple("Key$5"))); + x14_upper.add(factory.tuple("Card$3").product(factory.tuple("Key$0"))); + x14_upper.add(factory.tuple("Card$3").product(factory.tuple("Key$1"))); + x14_upper.add(factory.tuple("Card$3").product(factory.tuple("Key$2"))); + x14_upper.add(factory.tuple("Card$3").product(factory.tuple("Key$3"))); + x14_upper.add(factory.tuple("Card$3").product(factory.tuple("Key$4"))); + x14_upper.add(factory.tuple("Card$3").product(factory.tuple("Key$5"))); + x14_upper.add(factory.tuple("Card$4").product(factory.tuple("Key$0"))); + x14_upper.add(factory.tuple("Card$4").product(factory.tuple("Key$1"))); + x14_upper.add(factory.tuple("Card$4").product(factory.tuple("Key$2"))); + x14_upper.add(factory.tuple("Card$4").product(factory.tuple("Key$3"))); + x14_upper.add(factory.tuple("Card$4").product(factory.tuple("Key$4"))); + x14_upper.add(factory.tuple("Card$4").product(factory.tuple("Key$5"))); + x14_upper.add(factory.tuple("Card$5").product(factory.tuple("Key$0"))); + x14_upper.add(factory.tuple("Card$5").product(factory.tuple("Key$1"))); + x14_upper.add(factory.tuple("Card$5").product(factory.tuple("Key$2"))); + x14_upper.add(factory.tuple("Card$5").product(factory.tuple("Key$3"))); + x14_upper.add(factory.tuple("Card$5").product(factory.tuple("Key$4"))); + x14_upper.add(factory.tuple("Card$5").product(factory.tuple("Key$5"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(3); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$11"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$0"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$1"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$2"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$3"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$4"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$5"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$6"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$7"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$8"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$9"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$10"))); + x15_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$11"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Key$0").product(factory.tuple("Time$0"))); + x16_upper.add(factory.tuple("Key$0").product(factory.tuple("Time$1"))); + x16_upper.add(factory.tuple("Key$0").product(factory.tuple("Time$2"))); + x16_upper.add(factory.tuple("Key$0").product(factory.tuple("Time$3"))); + x16_upper.add(factory.tuple("Key$0").product(factory.tuple("Time$4"))); + x16_upper.add(factory.tuple("Key$0").product(factory.tuple("Time$5"))); + x16_upper.add(factory.tuple("Key$0").product(factory.tuple("Time$6"))); + x16_upper.add(factory.tuple("Key$0").product(factory.tuple("Time$7"))); + x16_upper.add(factory.tuple("Key$0").product(factory.tuple("Time$8"))); + x16_upper.add(factory.tuple("Key$0").product(factory.tuple("Time$9"))); + x16_upper.add(factory.tuple("Key$0").product(factory.tuple("Time$10"))); + x16_upper.add(factory.tuple("Key$0").product(factory.tuple("Time$11"))); + x16_upper.add(factory.tuple("Key$1").product(factory.tuple("Time$0"))); + x16_upper.add(factory.tuple("Key$1").product(factory.tuple("Time$1"))); + x16_upper.add(factory.tuple("Key$1").product(factory.tuple("Time$2"))); + x16_upper.add(factory.tuple("Key$1").product(factory.tuple("Time$3"))); + x16_upper.add(factory.tuple("Key$1").product(factory.tuple("Time$4"))); + x16_upper.add(factory.tuple("Key$1").product(factory.tuple("Time$5"))); + x16_upper.add(factory.tuple("Key$1").product(factory.tuple("Time$6"))); + x16_upper.add(factory.tuple("Key$1").product(factory.tuple("Time$7"))); + x16_upper.add(factory.tuple("Key$1").product(factory.tuple("Time$8"))); + x16_upper.add(factory.tuple("Key$1").product(factory.tuple("Time$9"))); + x16_upper.add(factory.tuple("Key$1").product(factory.tuple("Time$10"))); + x16_upper.add(factory.tuple("Key$1").product(factory.tuple("Time$11"))); + x16_upper.add(factory.tuple("Key$2").product(factory.tuple("Time$0"))); + x16_upper.add(factory.tuple("Key$2").product(factory.tuple("Time$1"))); + x16_upper.add(factory.tuple("Key$2").product(factory.tuple("Time$2"))); + x16_upper.add(factory.tuple("Key$2").product(factory.tuple("Time$3"))); + x16_upper.add(factory.tuple("Key$2").product(factory.tuple("Time$4"))); + x16_upper.add(factory.tuple("Key$2").product(factory.tuple("Time$5"))); + x16_upper.add(factory.tuple("Key$2").product(factory.tuple("Time$6"))); + x16_upper.add(factory.tuple("Key$2").product(factory.tuple("Time$7"))); + x16_upper.add(factory.tuple("Key$2").product(factory.tuple("Time$8"))); + x16_upper.add(factory.tuple("Key$2").product(factory.tuple("Time$9"))); + x16_upper.add(factory.tuple("Key$2").product(factory.tuple("Time$10"))); + x16_upper.add(factory.tuple("Key$2").product(factory.tuple("Time$11"))); + x16_upper.add(factory.tuple("Key$3").product(factory.tuple("Time$0"))); + x16_upper.add(factory.tuple("Key$3").product(factory.tuple("Time$1"))); + x16_upper.add(factory.tuple("Key$3").product(factory.tuple("Time$2"))); + x16_upper.add(factory.tuple("Key$3").product(factory.tuple("Time$3"))); + x16_upper.add(factory.tuple("Key$3").product(factory.tuple("Time$4"))); + x16_upper.add(factory.tuple("Key$3").product(factory.tuple("Time$5"))); + x16_upper.add(factory.tuple("Key$3").product(factory.tuple("Time$6"))); + x16_upper.add(factory.tuple("Key$3").product(factory.tuple("Time$7"))); + x16_upper.add(factory.tuple("Key$3").product(factory.tuple("Time$8"))); + x16_upper.add(factory.tuple("Key$3").product(factory.tuple("Time$9"))); + x16_upper.add(factory.tuple("Key$3").product(factory.tuple("Time$10"))); + x16_upper.add(factory.tuple("Key$3").product(factory.tuple("Time$11"))); + x16_upper.add(factory.tuple("Key$4").product(factory.tuple("Time$0"))); + x16_upper.add(factory.tuple("Key$4").product(factory.tuple("Time$1"))); + x16_upper.add(factory.tuple("Key$4").product(factory.tuple("Time$2"))); + x16_upper.add(factory.tuple("Key$4").product(factory.tuple("Time$3"))); + x16_upper.add(factory.tuple("Key$4").product(factory.tuple("Time$4"))); + x16_upper.add(factory.tuple("Key$4").product(factory.tuple("Time$5"))); + x16_upper.add(factory.tuple("Key$4").product(factory.tuple("Time$6"))); + x16_upper.add(factory.tuple("Key$4").product(factory.tuple("Time$7"))); + x16_upper.add(factory.tuple("Key$4").product(factory.tuple("Time$8"))); + x16_upper.add(factory.tuple("Key$4").product(factory.tuple("Time$9"))); + x16_upper.add(factory.tuple("Key$4").product(factory.tuple("Time$10"))); + x16_upper.add(factory.tuple("Key$4").product(factory.tuple("Time$11"))); + x16_upper.add(factory.tuple("Key$5").product(factory.tuple("Time$0"))); + x16_upper.add(factory.tuple("Key$5").product(factory.tuple("Time$1"))); + x16_upper.add(factory.tuple("Key$5").product(factory.tuple("Time$2"))); + x16_upper.add(factory.tuple("Key$5").product(factory.tuple("Time$3"))); + x16_upper.add(factory.tuple("Key$5").product(factory.tuple("Time$4"))); + x16_upper.add(factory.tuple("Key$5").product(factory.tuple("Time$5"))); + x16_upper.add(factory.tuple("Key$5").product(factory.tuple("Time$6"))); + x16_upper.add(factory.tuple("Key$5").product(factory.tuple("Time$7"))); + x16_upper.add(factory.tuple("Key$5").product(factory.tuple("Time$8"))); + x16_upper.add(factory.tuple("Key$5").product(factory.tuple("Time$9"))); + x16_upper.add(factory.tuple("Key$5").product(factory.tuple("Time$10"))); + x16_upper.add(factory.tuple("Key$5").product(factory.tuple("Time$11"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(3); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$5")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$5")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$11"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$9"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$10"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$5")).product(factory.tuple("Time$11"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$0")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$0")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$0")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$0")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$0")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$0")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$0")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$0")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$0")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$0")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$0")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$0")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$1")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$1")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$1")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$1")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$1")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$1")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$1")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$1")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$1")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$1")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$1")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$1")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$2")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$2")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$2")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$2")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$2")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$2")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$2")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$2")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$2")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$2")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$2")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$2")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$3")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$3")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$3")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$3")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$3")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$3")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$3")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$3")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$3")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$3")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$3")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$3")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$4")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$4")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$4")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$4")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$4")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$4")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$4")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$4")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$4")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$4")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$4")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$4")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$5")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$5")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$5")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$5")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$5")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$5")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$5")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$5")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$5")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$5")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$5")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$0").product(factory.tuple("Card$5")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$0")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$0")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$0")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$0")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$0")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$0")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$0")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$0")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$0")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$0")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$0")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$0")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$1")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$1")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$1")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$1")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$1")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$1")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$1")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$1")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$1")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$1")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$1")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$1")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$2")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$2")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$2")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$2")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$2")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$2")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$2")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$2")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$2")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$2")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$2")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$2")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$3")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$3")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$3")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$3")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$3")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$3")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$3")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$3")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$3")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$3")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$3")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$3")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$4")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$4")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$4")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$4")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$4")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$4")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$4")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$4")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$4")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$4")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$4")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$4")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$5")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$5")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$5")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$5")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$5")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$5")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$5")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$5")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$5")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$5")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$5")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$1").product(factory.tuple("Card$5")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$0")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$0")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$0")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$0")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$0")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$0")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$0")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$0")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$0")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$0")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$0")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$0")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$1")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$1")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$1")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$1")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$1")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$1")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$1")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$1")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$1")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$1")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$1")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$1")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$2")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$2")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$2")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$2")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$2")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$2")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$2")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$2")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$2")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$2")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$2")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$2")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$3")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$3")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$3")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$3")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$3")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$3")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$3")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$3")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$3")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$3")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$3")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$3")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$4")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$4")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$4")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$4")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$4")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$4")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$4")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$4")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$4")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$4")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$4")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$4")).product(factory.tuple("Time$11"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$5")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$5")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$5")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$5")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$5")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$5")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$5")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$5")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$5")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$5")).product(factory.tuple("Time$9"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$5")).product(factory.tuple("Time$10"))); + x18_upper.add(factory.tuple("Guest$2").product(factory.tuple("Card$5")).product(factory.tuple("Time$11"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(1); + x19_upper.add(factory.tuple("Time$0")); + x19_upper.add(factory.tuple("Time$1")); + x19_upper.add(factory.tuple("Time$2")); + x19_upper.add(factory.tuple("Time$3")); + x19_upper.add(factory.tuple("Time$4")); + x19_upper.add(factory.tuple("Time$5")); + x19_upper.add(factory.tuple("Time$6")); + x19_upper.add(factory.tuple("Time$7")); + x19_upper.add(factory.tuple("Time$8")); + x19_upper.add(factory.tuple("Time$9")); + x19_upper.add(factory.tuple("Time$10")); + x19_upper.add(factory.tuple("Time$11")); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(2); + x20_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$9"))); + x20_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$10"))); + x20_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$11"))); + x20_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$9"))); + x20_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$10"))); + x20_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$11"))); + x20_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$9"))); + x20_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$10"))); + x20_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$11"))); + x20_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$9"))); + x20_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$10"))); + x20_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$11"))); + x20_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$9"))); + x20_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$10"))); + x20_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$11"))); + x20_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$9"))); + x20_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$10"))); + x20_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$11"))); + x20_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$9"))); + x20_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$10"))); + x20_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$11"))); + x20_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$9"))); + x20_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$10"))); + x20_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$11"))); + x20_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$9"))); + x20_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$10"))); + x20_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$11"))); + x20_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$9"))); + x20_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$10"))); + x20_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$11"))); + x20_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$9"))); + x20_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$10"))); + x20_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$11"))); + x20_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$9"))); + x20_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$10"))); + x20_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$11"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(1); + x21_upper.add(factory.tuple("Time$0")); + x21_upper.add(factory.tuple("Time$1")); + x21_upper.add(factory.tuple("Time$2")); + x21_upper.add(factory.tuple("Time$3")); + x21_upper.add(factory.tuple("Time$4")); + x21_upper.add(factory.tuple("Time$5")); + x21_upper.add(factory.tuple("Time$6")); + x21_upper.add(factory.tuple("Time$7")); + x21_upper.add(factory.tuple("Time$8")); + x21_upper.add(factory.tuple("Time$9")); + x21_upper.add(factory.tuple("Time$10")); + x21_upper.add(factory.tuple("Time$11")); + bounds.bound(x21, x21_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x25=Variable.unary("NoIntruder_this"); + Decls x24=x25.oneOf(x8); + Expression x28=x25.join(x13); + Formula x27=x28.one(); + Formula x29=x28.in(x6); + Formula x26=x27.and(x29); + Formula x23=x26.forAll(x24); + Expression x31=x13.join(Expression.UNIV); + Formula x30=x31.in(x8); + Variable x35=Variable.unary("NoIntruder_this"); + Decls x34=x35.oneOf(x8); + Expression x38=x35.join(x14); + Formula x37=x38.one(); + Formula x39=x38.in(x6); + Formula x36=x37.and(x39); + Formula x33=x36.forAll(x34); + Expression x41=x14.join(Expression.UNIV); + Formula x40=x41.in(x8); + Variable x44=Variable.unary("NoIntruder_this"); + Decls x43=x44.oneOf(x9); + Expression x48=x44.join(x15); + Expression x49=x6.product(x7); + Formula x47=x48.in(x49); + Variable x52=Variable.unary(""); + Decls x51=x52.oneOf(x6); + Expression x54=x52.join(x48); + Formula x53=x54.in(x7); + Formula x50=x53.forAll(x51); + Formula x46=x47.and(x50); + Variable x57=Variable.unary(""); + Decls x56=x57.oneOf(x7); + Expression x60=x48.join(x57); + Formula x59=x60.one(); + Formula x61=x60.in(x6); + Formula x58=x59.and(x61); + Formula x55=x58.forAll(x56); + Formula x45=x46.and(x55); + Formula x42=x45.forAll(x43); + Expression x64=x15.join(Expression.UNIV); + Expression x63=x64.join(Expression.UNIV); + Formula x62=x63.in(x9); + Expression x67=x10.product(x16); + Expression x66=x10.join(x67); + Expression x68=x6.product(x7); + Formula x65=x66.in(x68); + Expression x73=x10.product(x17); + Expression x72=x10.join(x73); + Expression x75=x9.product(x6); + Expression x74=x75.product(x7); + Formula x71=x72.in(x74); + Variable x79=Variable.unary(""); + Decls x78=x79.oneOf(Expression.UNIV); + Variable x81=Variable.unary(""); + Decls x80=x81.oneOf(Expression.UNIV); + Decls x77=x78.and(x80); + Expression x86=x81.product(x79); + Expression x87=x9.product(x6); + Formula x85=x86.in(x87); + Variable x90=Variable.unary(""); + Decls x89=x90.oneOf(x9); + Expression x93=x90.join(x86); + Formula x92=x93.lone(); + Formula x94=x93.in(x6); + Formula x91=x92.and(x94); + Formula x88=x91.forAll(x89); + Formula x84=x85.and(x88); + Variable x97=Variable.unary(""); + Decls x96=x97.oneOf(x6); + Expression x99=x86.join(x97); + Formula x98=x99.in(x9); + Formula x95=x98.forAll(x96); + Formula x83=x84.and(x95); + Expression x102=x81.join(x72); + Expression x101=x79.join(x102); + Formula x100=x101.in(x7); + Formula x82=x83.implies(x100); + Formula x76=x82.forAll(x77); + Formula x70=x71.and(x76); + Variable x105=Variable.unary(""); + Decls x104=x105.oneOf(x7); + Expression x109=x72.join(x105); + Expression x110=x9.product(x6); + Formula x108=x109.in(x110); + Variable x113=Variable.unary(""); + Decls x112=x113.oneOf(x9); + Expression x116=x113.join(x109); + Formula x115=x116.lone(); + Formula x117=x116.in(x6); + Formula x114=x115.and(x117); + Formula x111=x114.forAll(x112); + Formula x107=x108.and(x111); + Variable x120=Variable.unary(""); + Decls x119=x120.oneOf(x6); + Expression x122=x109.join(x120); + Formula x121=x122.in(x9); + Formula x118=x121.forAll(x119); + Formula x106=x107.and(x118); + Formula x103=x106.forAll(x104); + Formula x69=x70.and(x103); + Variable x125=Variable.unary("NoIntruder_this"); + Decls x124=x125.oneOf(x11); + Expression x127=x125.join(x18); + Expression x128=x8.product(x7); + Formula x126=x127.in(x128); + Formula x123=x126.forAll(x124); + Expression x131=x18.join(Expression.UNIV); + Expression x130=x131.join(Expression.UNIV); + Formula x129=x130.in(x11); + Expression x134=x12.product(x19); + Expression x133=x12.join(x134); + Formula x132=x133.in(x7); + Expression x137=x12.product(x20); + Expression x136=x12.join(x137); + Expression x138=x7.product(x7); + Formula x135=x136.in(x138); + Formula x139=x20.totalOrder(x7,x19,x21); + Expression x143=x17.join(x19); + Expression x144=x15.join(x19); + Formula x142=x143.eq(x144); + Expression x146=x16.join(x19); + Expression x148=x9.join(x15); + Expression x147=x148.join(x19); + Formula x145=x146.eq(x147); + Formula x141=x142.and(x145); + Expression x150=x18.join(x19); + Formula x149=x150.no(); + Formula x140=x141.and(x149); + Variable x153=Variable.unary("NoIntruder_t"); + Expression x156=x20.join(x7); + Expression x155=x7.difference(x156); + Expression x154=x7.difference(x155); + Decls x152=x153.oneOf(x154); + Variable x160=Variable.unary("NoIntruder_g"); + Decls x159=x160.oneOf(x11); + Variable x162=Variable.unary("NoIntruder_r"); + Decls x161=x162.oneOf(x9); + Decls x158=x159.and(x161); + Variable x167=Variable.unary("checkin_c"); + Decls x166=x167.oneOf(x8); + Expression x171=x167.join(x13); + Expression x173=x17.join(x153); + Expression x172=x162.join(x173); + Formula x170=x171.eq(x172); + Expression x178=x167.join(x14); + Expression x179=x16.join(x153); + Formula x177=x178.in(x179); + Formula x176=x177.not(); + Expression x182=x153.join(x20); + Expression x181=x16.join(x182); + Expression x184=x16.join(x153); + Expression x185=x167.join(x14); + Expression x183=x184.union(x185); + Formula x180=x181.eq(x183); + Formula x175=x176.and(x180); + Expression x187=x17.join(x182); + Expression x189=x17.join(x153); + Expression x191=x167.join(x14); + Expression x190=x162.product(x191); + Expression x188=x189.override(x190); + Formula x186=x187.eq(x188); + Formula x174=x175.and(x186); + Formula x169=x170.and(x174); + Expression x193=x18.join(x182); + Expression x195=x18.join(x153); + Expression x196=x160.product(x167); + Expression x194=x195.override(x196); + Formula x192=x193.eq(x194); + Formula x168=x169.and(x192); + Formula x165=x168.forSome(x166); + Expression x198=x15.join(x153); + Expression x199=x15.join(x182); + Formula x197=x198.eq(x199); + Formula x164=x165.and(x197); + Variable x204=Variable.unary("enter_c"); + Expression x206=x160.join(x18); + Expression x205=x206.join(x153); + Decls x203=x204.oneOf(x205); + Expression x210=x204.join(x14); + Expression x212=x162.join(x15); + Expression x211=x212.join(x153); + Formula x209=x210.eq(x211); + Expression x215=x153.join(x20); + Expression x214=x15.join(x215); + Expression x216=x15.join(x153); + Formula x213=x214.eq(x216); + Formula x208=x209.and(x213); + Expression x219=x204.join(x13); + Formula x218=x219.eq(x211); + Expression x221=x15.join(x215); + Expression x223=x15.join(x153); + Expression x225=x204.join(x14); + Expression x224=x162.product(x225); + Expression x222=x223.override(x224); + Formula x220=x221.eq(x222); + Formula x217=x218.and(x220); + Formula x207=x208.or(x217); + Formula x202=x207.forSome(x203); + Expression x228=x67.join(x153); + Expression x229=x67.join(x215); + Formula x227=x228.eq(x229); + Expression x231=x18.join(x153); + Expression x232=x18.join(x215); + Formula x230=x231.eq(x232); + Formula x226=x227.and(x230); + Formula x201=x202.and(x226); + Expression x234=x73.join(x153); + Expression x235=x73.join(x215); + Formula x233=x234.eq(x235); + Formula x200=x201.and(x233); + Formula x163=x164.or(x200); + Formula x157=x163.forSome(x158); + Formula x151=x157.forAll(x152); + Variable x240=Variable.unary("NoIntruder_t1"); + Decls x239=x240.oneOf(x7); + Variable x242=Variable.unary("NoIntruder_g"); + Decls x241=x242.oneOf(x11); + Variable x244=Variable.unary("NoIntruder_g'"); + Expression x245=x11.difference(x242); + Decls x243=x244.oneOf(x245); + Variable x247=Variable.unary("NoIntruder_r"); + Decls x246=x247.oneOf(x9); + Decls x238=x239.and(x241).and(x243).and(x246); + Variable x255=Variable.unary("enter_c"); + Expression x257=x242.join(x18); + Expression x256=x257.join(x240); + Decls x254=x255.oneOf(x256); + Expression x261=x255.join(x14); + Expression x263=x247.join(x15); + Expression x262=x263.join(x240); + Formula x260=x261.eq(x262); + Expression x266=x240.join(x20); + Expression x265=x15.join(x266); + Expression x267=x15.join(x240); + Formula x264=x265.eq(x267); + Formula x259=x260.and(x264); + Expression x270=x255.join(x13); + Formula x269=x270.eq(x262); + Expression x272=x15.join(x266); + Expression x274=x15.join(x240); + Expression x276=x255.join(x14); + Expression x275=x247.product(x276); + Expression x273=x274.override(x275); + Formula x271=x272.eq(x273); + Formula x268=x269.and(x271); + Formula x258=x259.or(x268); + Formula x253=x258.forSome(x254); + Expression x279=x67.join(x240); + Expression x280=x67.join(x266); + Formula x278=x279.eq(x280); + Expression x282=x18.join(x240); + Expression x283=x18.join(x266); + Formula x281=x282.eq(x283); + Formula x277=x278.and(x281); + Formula x252=x253.and(x277); + Expression x285=x73.join(x240); + Expression x286=x73.join(x266); + Formula x284=x285.eq(x286); + Formula x251=x252.and(x284); + Variable x291=Variable.unary("enter_c"); + Expression x293=x244.join(x18); + Expression x292=x293.join(x266); + Decls x290=x291.oneOf(x292); + Expression x297=x291.join(x14); + Expression x299=x247.join(x15); + Expression x298=x299.join(x266); + Formula x296=x297.eq(x298); + Expression x302=x266.join(x20); + Expression x301=x15.join(x302); + Expression x303=x15.join(x266); + Formula x300=x301.eq(x303); + Formula x295=x296.and(x300); + Expression x306=x291.join(x13); + Formula x305=x306.eq(x298); + Expression x308=x15.join(x302); + Expression x310=x15.join(x266); + Expression x312=x291.join(x14); + Expression x311=x247.product(x312); + Expression x309=x310.override(x311); + Formula x307=x308.eq(x309); + Formula x304=x305.and(x307); + Formula x294=x295.or(x304); + Formula x289=x294.forSome(x290); + Expression x315=x67.join(x266); + Expression x316=x67.join(x302); + Formula x314=x315.eq(x316); + Expression x318=x18.join(x266); + Expression x319=x18.join(x302); + Formula x317=x318.eq(x319); + Formula x313=x314.and(x317); + Formula x288=x289.and(x313); + Expression x321=x73.join(x266); + Expression x322=x73.join(x302); + Formula x320=x321.eq(x322); + Formula x287=x288.and(x320); + Formula x250=x251.and(x287); + Variable x327=Variable.unary("enter_c"); + Expression x329=x242.join(x18); + Expression x328=x329.join(x302); + Decls x326=x327.oneOf(x328); + Expression x333=x327.join(x14); + Expression x335=x247.join(x15); + Expression x334=x335.join(x302); + Formula x332=x333.eq(x334); + Expression x338=x302.join(x20); + Expression x337=x15.join(x338); + Expression x339=x15.join(x302); + Formula x336=x337.eq(x339); + Formula x331=x332.and(x336); + Expression x342=x327.join(x13); + Formula x341=x342.eq(x334); + Expression x344=x15.join(x338); + Expression x346=x15.join(x302); + Expression x348=x327.join(x14); + Expression x347=x247.product(x348); + Expression x345=x346.override(x347); + Formula x343=x344.eq(x345); + Formula x340=x341.and(x343); + Formula x330=x331.or(x340); + Formula x325=x330.forSome(x326); + Expression x351=x67.join(x302); + Expression x352=x67.join(x338); + Formula x350=x351.eq(x352); + Expression x354=x18.join(x302); + Expression x355=x18.join(x338); + Formula x353=x354.eq(x355); + Formula x349=x350.and(x353); + Formula x324=x325.and(x349); + Expression x357=x73.join(x302); + Expression x358=x73.join(x338); + Formula x356=x357.eq(x358); + Formula x323=x324.and(x356); + Formula x249=x250.and(x323); + Formula x248=x249.not(); + Formula x237=x248.forAll(x238); + Formula x236=x237.not(); + Formula x359=x0.eq(x0); + Formula x360=x1.eq(x1); + Formula x361=x2.eq(x2); + Formula x362=x3.eq(x3); + Formula x363=x4.eq(x4); + Formula x364=x5.eq(x5); + Formula x365=x6.eq(x6); + Formula x366=x7.eq(x7); + Formula x367=x8.eq(x8); + Formula x368=x9.eq(x9); + Formula x369=x10.eq(x10); + Formula x370=x11.eq(x11); + Formula x371=x12.eq(x12); + Formula x372=x13.eq(x13); + Formula x373=x14.eq(x14); + Formula x374=x15.eq(x15); + Formula x375=x16.eq(x16); + Formula x376=x17.eq(x17); + Formula x377=x18.eq(x18); + Formula x378=x19.eq(x19); + Formula x379=x20.eq(x20); + Formula x380=x21.eq(x21); + Formula x22=Formula.compose(FormulaOperator.AND, x23, x30, x33, x40, x42, x62, x65, x69, x123, x129, x132, x135, x139, x140, x151, x236, x359, x360, x361, x362, x363, x364, x365, x366, x367, x368, x369, x370, x371, x372, x373, x374, x375, x376, x377, x378, x379, x380); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x22,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dAddIdempotentCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dAddIdempotentCheck.java new file mode 100644 index 0000000..af6b364 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dAddIdempotentCheck.java @@ -0,0 +1,401 @@ +package kodkod.examples.models.softwareAbstractions.chapter2; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + + +@ExampleMetadata( + Name = "addressBook3d", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =4, + NestedRelationalJoins = 4, + TransitiveClosure = 4, + NestedQuantifiers = 4, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 6, + OrderedRelations = 1, + Constraints = 20 +) + + +public final class addressBook3dAddIdempotentCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Addr"); + Relation x7 = Relation.unary("this/Alias"); + Relation x8 = Relation.unary("this/Group"); + Relation x9 = Relation.unary("this/Book"); + Relation x10 = Relation.unary("BookOrder/Ord"); + Relation x11 = Relation.nary("this/Book.names", 2); + Relation x12 = Relation.nary("this/Book.addr", 3); + Relation x13 = Relation.unary("BookOrder/Ord.First"); + Relation x14 = Relation.nary("BookOrder/Ord.Next", 2); + Relation x15 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Book$0", + "Book$1", "Book$2", "BookOrder/Ord$0", "Target$0", "Target$1", "Target$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Target$0")); + x6_upper.add(factory.tuple("Target$1")); + x6_upper.add(factory.tuple("Target$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Target$0")); + x7_upper.add(factory.tuple("Target$1")); + x7_upper.add(factory.tuple("Target$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Target$0")); + x8_upper.add(factory.tuple("Target$1")); + x8_upper.add(factory.tuple("Target$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Book$0")); + x9_upper.add(factory.tuple("Book$1")); + x9_upper.add(factory.tuple("Book$2")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("BookOrder/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Book$0")); + x13_upper.add(factory.tuple("Book$1")); + x13_upper.add(factory.tuple("Book$2")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("Book$0")); + x15_upper.add(factory.tuple("Book$1")); + x15_upper.add(factory.tuple("Book$2")); + bounds.bound(x15, x15_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x18=x7.intersection(x8); + Formula x17=x18.no(); + Expression x21=x7.union(x8); + Expression x20=x6.intersection(x21); + Formula x19=x20.no(); + Variable x24=Variable.unary("addIdempotent_this"); + Decls x23=x24.oneOf(x9); + Expression x26=x24.join(x11); + Formula x25=x26.in(x21); + Formula x22=x25.forAll(x23); + Expression x28=x11.join(Expression.UNIV); + Formula x27=x28.in(x9); + Variable x32=Variable.unary("addIdempotent_this"); + Decls x31=x32.oneOf(x9); + Expression x36=x32.join(x12); + Expression x38=x32.join(x11); + Expression x39=x6.union(x21); + Expression x37=x38.product(x39); + Formula x35=x36.in(x37); + Variable x42=Variable.unary(""); + Decls x41=x42.oneOf(x38); + Expression x45=x42.join(x36); + Formula x44=x45.some(); + Formula x46=x45.in(x39); + Formula x43=x44.and(x46); + Formula x40=x43.forAll(x41); + Formula x34=x35.and(x40); + Variable x49=Variable.unary(""); + Decls x48=x49.oneOf(x39); + Expression x51=x36.join(x49); + Expression x52=x32.join(x11); + Formula x50=x51.in(x52); + Formula x47=x50.forAll(x48); + Formula x33=x34.and(x47); + Formula x30=x33.forAll(x31); + Expression x55=x12.join(Expression.UNIV); + Expression x54=x55.join(Expression.UNIV); + Formula x53=x54.in(x9); + Variable x58=Variable.unary("addIdempotent_this"); + Decls x57=x58.oneOf(x9); + Variable x62=Variable.unary("addIdempotent_n"); + Decls x61=x62.oneOf(x21); + Expression x67=x58.join(x12); + Expression x66=x67.closure(); + Expression x65=x62.join(x66); + Formula x64=x62.in(x65); + Formula x63=x64.not(); + Formula x60=x63.forAll(x61); + Variable x70=Variable.unary("addIdempotent_a"); + Decls x69=x70.oneOf(x7); + Expression x73=x58.join(x12); + Expression x72=x70.join(x73); + Formula x71=x72.lone(); + Formula x68=x71.forAll(x69); + Formula x59=x60.and(x68); + Formula x56=x59.forAll(x57); + Expression x76=x10.product(x13); + Expression x75=x10.join(x76); + Formula x74=x75.in(x9); + Expression x79=x10.product(x14); + Expression x78=x10.join(x79); + Expression x80=x9.product(x9); + Formula x77=x78.in(x80); + Formula x81=x14.totalOrder(x9,x13,x15); + Expression x83=x13.join(x12); + Formula x82=x83.no(); + Variable x86=Variable.unary("addIdempotent_b"); + Expression x89=x14.join(x9); + Expression x88=x9.difference(x89); + Expression x87=x9.difference(x88); + Decls x85=x86.oneOf(x87); + Variable x93=Variable.unary("addIdempotent_n"); + Decls x92=x93.oneOf(x21); + Variable x95=Variable.unary("addIdempotent_t"); + Decls x94=x95.oneOf(x39); + Decls x91=x92.and(x94); + Formula x99=x95.in(x6); + Expression x103=x21.intersection(x95); + Expression x105=x86.join(x12); + Expression x104=x105.closure(); + Expression x102=x103.join(x104); + Expression x101=x102.intersection(x6); + Formula x100=x101.some(); + Formula x98=x99.or(x100); + Expression x108=x86.join(x14); + Expression x107=x108.join(x12); + Expression x110=x86.join(x12); + Expression x111=x93.product(x95); + Expression x109=x110.union(x111); + Formula x106=x107.eq(x109); + Formula x97=x98.and(x106); + Expression x116=x86.join(x12); + Expression x115=x116.join(x93); + Formula x114=x115.no(); + Expression x120=x86.join(x12); + Expression x119=x93.join(x120); + Expression x118=x119.difference(x95); + Formula x117=x118.some(); + Formula x113=x114.or(x117); + Expression x122=x108.join(x12); + Expression x124=x86.join(x12); + Expression x125=x93.product(x95); + Expression x123=x124.difference(x125); + Formula x121=x122.eq(x123); + Formula x112=x113.and(x121); + Formula x96=x97.or(x112); + Formula x90=x96.forSome(x91); + Formula x84=x90.forAll(x85); + Variable x130=Variable.unary("addIdempotent_b"); + Decls x129=x130.oneOf(x9); + Variable x132=Variable.unary("addIdempotent_b'"); + Decls x131=x132.oneOf(x9); + Variable x134=Variable.unary("addIdempotent_b''"); + Decls x133=x134.oneOf(x9); + Variable x136=Variable.unary("addIdempotent_n"); + Decls x135=x136.oneOf(x21); + Variable x138=Variable.unary("addIdempotent_t"); + Decls x137=x138.oneOf(x39); + Decls x128=x129.and(x131).and(x133).and(x135).and(x137); + Formula x144=x138.in(x6); + Expression x148=x21.intersection(x138); + Expression x150=x130.join(x12); + Expression x149=x150.closure(); + Expression x147=x148.join(x149); + Expression x146=x147.intersection(x6); + Formula x145=x146.some(); + Formula x143=x144.or(x145); + Expression x152=x132.join(x12); + Expression x154=x130.join(x12); + Expression x155=x136.product(x138); + Expression x153=x154.union(x155); + Formula x151=x152.eq(x153); + Formula x142=x143.and(x151); + Formula x158=x138.in(x6); + Expression x162=x21.intersection(x138); + Expression x164=x132.join(x12); + Expression x163=x164.closure(); + Expression x161=x162.join(x163); + Expression x160=x161.intersection(x6); + Formula x159=x160.some(); + Formula x157=x158.or(x159); + Expression x166=x134.join(x12); + Expression x168=x132.join(x12); + Expression x169=x136.product(x138); + Expression x167=x168.union(x169); + Formula x165=x166.eq(x167); + Formula x156=x157.and(x165); + Formula x141=x142.and(x156); + Formula x140=x141.not(); + Expression x171=x132.join(x12); + Expression x172=x134.join(x12); + Formula x170=x171.eq(x172); + Formula x139=x140.or(x170); + Formula x127=x139.forAll(x128); + Formula x126=x127.not(); + Formula x173=x0.eq(x0); + Formula x174=x1.eq(x1); + Formula x175=x2.eq(x2); + Formula x176=x3.eq(x3); + Formula x177=x4.eq(x4); + Formula x178=x5.eq(x5); + Formula x179=x6.eq(x6); + Formula x180=x7.eq(x7); + Formula x181=x8.eq(x8); + Formula x182=x9.eq(x9); + Formula x183=x10.eq(x10); + Formula x184=x11.eq(x11); + Formula x185=x12.eq(x12); + Formula x186=x13.eq(x13); + Formula x187=x14.eq(x14); + Formula x188=x15.eq(x15); + Formula x16=Formula.compose(FormulaOperator.AND, x17, x19, x22, x27, x30, x53, x56, x74, x77, x81, x82, x84, x126, x173, x174, x175, x176, x177, x178, x179, x180, x181, x182, x183, x184, x185, x186, x187, x188); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x16,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dAddLocalCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dAddLocalCheck.java new file mode 100644 index 0000000..61c1b27 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dAddLocalCheck.java @@ -0,0 +1,374 @@ +package kodkod.examples.models.softwareAbstractions.chapter2; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + + +@ExampleMetadata( + Name = "addressBook3d", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =4, + NestedRelationalJoins = 4, + TransitiveClosure = 5, + NestedQuantifiers = 4, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 6, + OrderedRelations = 1, + Constraints = 20 +) + +public final class addressBook3dAddLocalCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Addr"); + Relation x7 = Relation.unary("this/Alias"); + Relation x8 = Relation.unary("this/Group"); + Relation x9 = Relation.unary("this/Book"); + Relation x10 = Relation.unary("BookOrder/Ord"); + Relation x11 = Relation.nary("this/Book.names", 2); + Relation x12 = Relation.nary("this/Book.addr", 3); + Relation x13 = Relation.unary("BookOrder/Ord.First"); + Relation x14 = Relation.nary("BookOrder/Ord.Next", 2); + Relation x15 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Book$0", + "Book$1", "BookOrder/Ord$0", "Target$0", "Target$1", "Target$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Target$0")); + x6_upper.add(factory.tuple("Target$1")); + x6_upper.add(factory.tuple("Target$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Target$0")); + x7_upper.add(factory.tuple("Target$1")); + x7_upper.add(factory.tuple("Target$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Target$0")); + x8_upper.add(factory.tuple("Target$1")); + x8_upper.add(factory.tuple("Target$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Book$0")); + x9_upper.add(factory.tuple("Book$1")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("BookOrder/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Book$0")); + x13_upper.add(factory.tuple("Book$1")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$1"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("Book$0")); + x15_upper.add(factory.tuple("Book$1")); + bounds.bound(x15, x15_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x18=x7.intersection(x8); + Formula x17=x18.no(); + Expression x21=x7.union(x8); + Expression x20=x6.intersection(x21); + Formula x19=x20.no(); + Variable x24=Variable.unary("addLocal_this"); + Decls x23=x24.oneOf(x9); + Expression x26=x24.join(x11); + Formula x25=x26.in(x21); + Formula x22=x25.forAll(x23); + Expression x28=x11.join(Expression.UNIV); + Formula x27=x28.in(x9); + Variable x32=Variable.unary("addLocal_this"); + Decls x31=x32.oneOf(x9); + Expression x36=x32.join(x12); + Expression x38=x32.join(x11); + Expression x39=x6.union(x21); + Expression x37=x38.product(x39); + Formula x35=x36.in(x37); + Variable x42=Variable.unary(""); + Decls x41=x42.oneOf(x38); + Expression x45=x42.join(x36); + Formula x44=x45.some(); + Formula x46=x45.in(x39); + Formula x43=x44.and(x46); + Formula x40=x43.forAll(x41); + Formula x34=x35.and(x40); + Variable x49=Variable.unary(""); + Decls x48=x49.oneOf(x39); + Expression x51=x36.join(x49); + Expression x52=x32.join(x11); + Formula x50=x51.in(x52); + Formula x47=x50.forAll(x48); + Formula x33=x34.and(x47); + Formula x30=x33.forAll(x31); + Expression x55=x12.join(Expression.UNIV); + Expression x54=x55.join(Expression.UNIV); + Formula x53=x54.in(x9); + Variable x58=Variable.unary("addLocal_this"); + Decls x57=x58.oneOf(x9); + Variable x62=Variable.unary("addLocal_n"); + Decls x61=x62.oneOf(x21); + Expression x67=x58.join(x12); + Expression x66=x67.closure(); + Expression x65=x62.join(x66); + Formula x64=x62.in(x65); + Formula x63=x64.not(); + Formula x60=x63.forAll(x61); + Variable x70=Variable.unary("addLocal_a"); + Decls x69=x70.oneOf(x7); + Expression x73=x58.join(x12); + Expression x72=x70.join(x73); + Formula x71=x72.lone(); + Formula x68=x71.forAll(x69); + Formula x59=x60.and(x68); + Formula x56=x59.forAll(x57); + Expression x76=x10.product(x13); + Expression x75=x10.join(x76); + Formula x74=x75.in(x9); + Expression x79=x10.product(x14); + Expression x78=x10.join(x79); + Expression x80=x9.product(x9); + Formula x77=x78.in(x80); + Formula x81=x14.totalOrder(x9,x13,x15); + Expression x83=x13.join(x12); + Formula x82=x83.no(); + Variable x86=Variable.unary("addLocal_b"); + Expression x89=x14.join(x9); + Expression x88=x9.difference(x89); + Expression x87=x9.difference(x88); + Decls x85=x86.oneOf(x87); + Variable x93=Variable.unary("addLocal_n"); + Decls x92=x93.oneOf(x21); + Variable x95=Variable.unary("addLocal_t"); + Decls x94=x95.oneOf(x39); + Decls x91=x92.and(x94); + Formula x99=x95.in(x6); + Expression x103=x21.intersection(x95); + Expression x105=x86.join(x12); + Expression x104=x105.closure(); + Expression x102=x103.join(x104); + Expression x101=x102.intersection(x6); + Formula x100=x101.some(); + Formula x98=x99.or(x100); + Expression x108=x86.join(x14); + Expression x107=x108.join(x12); + Expression x110=x86.join(x12); + Expression x111=x93.product(x95); + Expression x109=x110.union(x111); + Formula x106=x107.eq(x109); + Formula x97=x98.and(x106); + Expression x116=x86.join(x12); + Expression x115=x116.join(x93); + Formula x114=x115.no(); + Expression x120=x86.join(x12); + Expression x119=x93.join(x120); + Expression x118=x119.difference(x95); + Formula x117=x118.some(); + Formula x113=x114.or(x117); + Expression x122=x108.join(x12); + Expression x124=x86.join(x12); + Expression x125=x93.product(x95); + Expression x123=x124.difference(x125); + Formula x121=x122.eq(x123); + Formula x112=x113.and(x121); + Formula x96=x97.or(x112); + Formula x90=x96.forSome(x91); + Formula x84=x90.forAll(x85); + Variable x130=Variable.unary("addLocal_b"); + Decls x129=x130.oneOf(x9); + Variable x132=Variable.unary("addLocal_b'"); + Decls x131=x132.oneOf(x9); + Variable x134=Variable.unary("addLocal_n"); + Decls x133=x134.oneOf(x21); + Variable x136=Variable.unary("addLocal_n'"); + Decls x135=x136.oneOf(x21); + Variable x138=Variable.unary("addLocal_t"); + Decls x137=x138.oneOf(x39); + Decls x128=x129.and(x131).and(x133).and(x135).and(x137); + Formula x144=x138.in(x6); + Expression x148=x21.intersection(x138); + Expression x150=x130.join(x12); + Expression x149=x150.closure(); + Expression x147=x148.join(x149); + Expression x146=x147.intersection(x6); + Formula x145=x146.some(); + Formula x143=x144.or(x145); + Expression x152=x132.join(x12); + Expression x154=x130.join(x12); + Expression x155=x134.product(x138); + Expression x153=x154.union(x155); + Formula x151=x152.eq(x153); + Formula x142=x143.and(x151); + Formula x157=x134.eq(x136); + Formula x156=x157.not(); + Formula x141=x142.and(x156); + Formula x140=x141.not(); + Expression x162=x130.join(x12); + Expression x161=x162.closure(); + Expression x160=x136.join(x161); + Expression x159=x160.intersection(x6); + Expression x166=x132.join(x12); + Expression x165=x166.closure(); + Expression x164=x136.join(x165); + Expression x163=x164.intersection(x6); + Formula x158=x159.eq(x163); + Formula x139=x140.or(x158); + Formula x127=x139.forAll(x128); + Formula x126=x127.not(); + Formula x167=x0.eq(x0); + Formula x168=x1.eq(x1); + Formula x169=x2.eq(x2); + Formula x170=x3.eq(x3); + Formula x171=x4.eq(x4); + Formula x172=x5.eq(x5); + Formula x173=x6.eq(x6); + Formula x174=x7.eq(x7); + Formula x175=x8.eq(x8); + Formula x176=x9.eq(x9); + Formula x177=x10.eq(x10); + Formula x178=x11.eq(x11); + Formula x179=x12.eq(x12); + Formula x180=x13.eq(x13); + Formula x181=x14.eq(x14); + Formula x182=x15.eq(x15); + Formula x16=Formula.compose(FormulaOperator.AND, x17, x19, x22, x27, x30, x53, x56, x74, x77, x81, x82, x84, x126, x167, x168, x169, x170, x171, x172, x173, x174, x175, x176, x177, x178, x179, x180, x181, x182); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x16,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dDellUndoesAddCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dDellUndoesAddCheck.java new file mode 100644 index 0000000..ba79262 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dDellUndoesAddCheck.java @@ -0,0 +1,403 @@ +package kodkod.examples.models.softwareAbstractions.chapter2; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "addressBook3d", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =4, + NestedRelationalJoins = 4, + TransitiveClosure = 3, + NestedQuantifiers = 4, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 6, + OrderedRelations = 1, + Constraints = 20 +) + +public final class addressBook3dDellUndoesAddCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Addr"); + Relation x7 = Relation.unary("this/Alias"); + Relation x8 = Relation.unary("this/Group"); + Relation x9 = Relation.unary("this/Book"); + Relation x10 = Relation.unary("BookOrder/Ord"); + Relation x11 = Relation.nary("this/Book.names", 2); + Relation x12 = Relation.nary("this/Book.addr", 3); + Relation x13 = Relation.unary("BookOrder/Ord.First"); + Relation x14 = Relation.nary("BookOrder/Ord.Next", 2); + Relation x15 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Book$0", + "Book$1", "Book$2", "BookOrder/Ord$0", "Target$0", "Target$1", "Target$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Target$0")); + x6_upper.add(factory.tuple("Target$1")); + x6_upper.add(factory.tuple("Target$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Target$0")); + x7_upper.add(factory.tuple("Target$1")); + x7_upper.add(factory.tuple("Target$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Target$0")); + x8_upper.add(factory.tuple("Target$1")); + x8_upper.add(factory.tuple("Target$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Book$0")); + x9_upper.add(factory.tuple("Book$1")); + x9_upper.add(factory.tuple("Book$2")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("BookOrder/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Book$0")); + x13_upper.add(factory.tuple("Book$1")); + x13_upper.add(factory.tuple("Book$2")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("Book$0")); + x15_upper.add(factory.tuple("Book$1")); + x15_upper.add(factory.tuple("Book$2")); + bounds.bound(x15, x15_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x18=x7.intersection(x8); + Formula x17=x18.no(); + Expression x21=x7.union(x8); + Expression x20=x6.intersection(x21); + Formula x19=x20.no(); + Variable x24=Variable.unary("delUndoesAdd_this"); + Decls x23=x24.oneOf(x9); + Expression x26=x24.join(x11); + Formula x25=x26.in(x21); + Formula x22=x25.forAll(x23); + Expression x28=x11.join(Expression.UNIV); + Formula x27=x28.in(x9); + Variable x32=Variable.unary("delUndoesAdd_this"); + Decls x31=x32.oneOf(x9); + Expression x36=x32.join(x12); + Expression x38=x32.join(x11); + Expression x39=x6.union(x21); + Expression x37=x38.product(x39); + Formula x35=x36.in(x37); + Variable x42=Variable.unary(""); + Decls x41=x42.oneOf(x38); + Expression x45=x42.join(x36); + Formula x44=x45.some(); + Formula x46=x45.in(x39); + Formula x43=x44.and(x46); + Formula x40=x43.forAll(x41); + Formula x34=x35.and(x40); + Variable x49=Variable.unary(""); + Decls x48=x49.oneOf(x39); + Expression x51=x36.join(x49); + Expression x52=x32.join(x11); + Formula x50=x51.in(x52); + Formula x47=x50.forAll(x48); + Formula x33=x34.and(x47); + Formula x30=x33.forAll(x31); + Expression x55=x12.join(Expression.UNIV); + Expression x54=x55.join(Expression.UNIV); + Formula x53=x54.in(x9); + Variable x58=Variable.unary("delUndoesAdd_this"); + Decls x57=x58.oneOf(x9); + Variable x62=Variable.unary("delUndoesAdd_n"); + Decls x61=x62.oneOf(x21); + Expression x67=x58.join(x12); + Expression x66=x67.closure(); + Expression x65=x62.join(x66); + Formula x64=x62.in(x65); + Formula x63=x64.not(); + Formula x60=x63.forAll(x61); + Variable x70=Variable.unary("delUndoesAdd_a"); + Decls x69=x70.oneOf(x7); + Expression x73=x58.join(x12); + Expression x72=x70.join(x73); + Formula x71=x72.lone(); + Formula x68=x71.forAll(x69); + Formula x59=x60.and(x68); + Formula x56=x59.forAll(x57); + Expression x76=x10.product(x13); + Expression x75=x10.join(x76); + Formula x74=x75.in(x9); + Expression x79=x10.product(x14); + Expression x78=x10.join(x79); + Expression x80=x9.product(x9); + Formula x77=x78.in(x80); + Formula x81=x14.totalOrder(x9,x13,x15); + Expression x83=x13.join(x12); + Formula x82=x83.no(); + Variable x86=Variable.unary("delUndoesAdd_b"); + Expression x89=x14.join(x9); + Expression x88=x9.difference(x89); + Expression x87=x9.difference(x88); + Decls x85=x86.oneOf(x87); + Variable x93=Variable.unary("delUndoesAdd_n"); + Decls x92=x93.oneOf(x21); + Variable x95=Variable.unary("delUndoesAdd_t"); + Decls x94=x95.oneOf(x39); + Decls x91=x92.and(x94); + Formula x99=x95.in(x6); + Expression x103=x21.intersection(x95); + Expression x105=x86.join(x12); + Expression x104=x105.closure(); + Expression x102=x103.join(x104); + Expression x101=x102.intersection(x6); + Formula x100=x101.some(); + Formula x98=x99.or(x100); + Expression x108=x86.join(x14); + Expression x107=x108.join(x12); + Expression x110=x86.join(x12); + Expression x111=x93.product(x95); + Expression x109=x110.union(x111); + Formula x106=x107.eq(x109); + Formula x97=x98.and(x106); + Expression x116=x86.join(x12); + Expression x115=x116.join(x93); + Formula x114=x115.no(); + Expression x120=x86.join(x12); + Expression x119=x93.join(x120); + Expression x118=x119.difference(x95); + Formula x117=x118.some(); + Formula x113=x114.or(x117); + Expression x122=x108.join(x12); + Expression x124=x86.join(x12); + Expression x125=x93.product(x95); + Expression x123=x124.difference(x125); + Formula x121=x122.eq(x123); + Formula x112=x113.and(x121); + Formula x96=x97.or(x112); + Formula x90=x96.forSome(x91); + Formula x84=x90.forAll(x85); + Variable x130=Variable.unary("delUndoesAdd_b"); + Decls x129=x130.oneOf(x9); + Variable x132=Variable.unary("delUndoesAdd_b'"); + Decls x131=x132.oneOf(x9); + Variable x134=Variable.unary("delUndoesAdd_b''"); + Decls x133=x134.oneOf(x9); + Variable x136=Variable.unary("delUndoesAdd_n"); + Decls x135=x136.oneOf(x21); + Variable x138=Variable.unary("delUndoesAdd_t"); + Decls x137=x138.oneOf(x39); + Decls x128=x129.and(x131).and(x133).and(x135).and(x137); + Expression x145=x130.join(x12); + Expression x144=x136.join(x145); + Formula x143=x144.no(); + Formula x148=x138.in(x6); + Expression x152=x21.intersection(x138); + Expression x154=x130.join(x12); + Expression x153=x154.closure(); + Expression x151=x152.join(x153); + Expression x150=x151.intersection(x6); + Formula x149=x150.some(); + Formula x147=x148.or(x149); + Expression x156=x132.join(x12); + Expression x158=x130.join(x12); + Expression x159=x136.product(x138); + Expression x157=x158.union(x159); + Formula x155=x156.eq(x157); + Formula x146=x147.and(x155); + Formula x142=x143.and(x146); + Expression x164=x132.join(x12); + Expression x163=x164.join(x136); + Formula x162=x163.no(); + Expression x168=x132.join(x12); + Expression x167=x136.join(x168); + Expression x166=x167.difference(x138); + Formula x165=x166.some(); + Formula x161=x162.or(x165); + Expression x170=x134.join(x12); + Expression x172=x132.join(x12); + Expression x173=x136.product(x138); + Expression x171=x172.difference(x173); + Formula x169=x170.eq(x171); + Formula x160=x161.and(x169); + Formula x141=x142.and(x160); + Formula x140=x141.not(); + Expression x175=x130.join(x12); + Expression x176=x134.join(x12); + Formula x174=x175.eq(x176); + Formula x139=x140.or(x174); + Formula x127=x139.forAll(x128); + Formula x126=x127.not(); + Formula x177=x0.eq(x0); + Formula x178=x1.eq(x1); + Formula x179=x2.eq(x2); + Formula x180=x3.eq(x3); + Formula x181=x4.eq(x4); + Formula x182=x5.eq(x5); + Formula x183=x6.eq(x6); + Formula x184=x7.eq(x7); + Formula x185=x8.eq(x8); + Formula x186=x9.eq(x9); + Formula x187=x10.eq(x10); + Formula x188=x11.eq(x11); + Formula x189=x12.eq(x12); + Formula x190=x13.eq(x13); + Formula x191=x14.eq(x14); + Formula x192=x15.eq(x15); + Formula x16=Formula.compose(FormulaOperator.AND, x17, x19, x22, x27, x30, x53, x56, x74, x77, x81, x82, x84, x126, x177, x178, x179, x180, x181, x182, x183, x184, x185, x186, x187, x188, x189, x190, x191, x192); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x16,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dLookupYields2Check.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dLookupYields2Check.java new file mode 100644 index 0000000..fb8c988 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dLookupYields2Check.java @@ -0,0 +1,630 @@ +package kodkod.examples.models.softwareAbstractions.chapter2; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "addressBook3d", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =4, + NestedRelationalJoins = 4, + TransitiveClosure = 3, + NestedQuantifiers = 4, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 6, + OrderedRelations = 1, + Constraints = 20 +) + +public final class addressBook3dLookupYields2Check { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Addr"); + Relation x7 = Relation.unary("this/Alias"); + Relation x8 = Relation.unary("this/Group"); + Relation x9 = Relation.unary("this/Book"); + Relation x10 = Relation.unary("BookOrder/Ord"); + Relation x11 = Relation.nary("this/Book.names", 2); + Relation x12 = Relation.nary("this/Book.addr", 3); + Relation x13 = Relation.unary("BookOrder/Ord.First"); + Relation x14 = Relation.nary("BookOrder/Ord.Next", 2); + Relation x15 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Book$0", + "Book$1", "Book$2", "Book$3", "Book$4", "Book$5", "BookOrder/Ord$0", + "Target$0", "Target$1", "Target$2", "Target$3", "Target$4", "Target$5" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + x4_upper.add(factory.tuple("5")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Target$0")); + x6_upper.add(factory.tuple("Target$1")); + x6_upper.add(factory.tuple("Target$2")); + x6_upper.add(factory.tuple("Target$3")); + x6_upper.add(factory.tuple("Target$4")); + x6_upper.add(factory.tuple("Target$5")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Target$0")); + x7_upper.add(factory.tuple("Target$1")); + x7_upper.add(factory.tuple("Target$2")); + x7_upper.add(factory.tuple("Target$3")); + x7_upper.add(factory.tuple("Target$4")); + x7_upper.add(factory.tuple("Target$5")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Target$0")); + x8_upper.add(factory.tuple("Target$1")); + x8_upper.add(factory.tuple("Target$2")); + x8_upper.add(factory.tuple("Target$3")); + x8_upper.add(factory.tuple("Target$4")); + x8_upper.add(factory.tuple("Target$5")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Book$0")); + x9_upper.add(factory.tuple("Book$1")); + x9_upper.add(factory.tuple("Book$2")); + x9_upper.add(factory.tuple("Book$3")); + x9_upper.add(factory.tuple("Book$4")); + x9_upper.add(factory.tuple("Book$5")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("BookOrder/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$3"))); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$4"))); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$5"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$3"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$4"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$5"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$3"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$4"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$5"))); + x11_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$3"))); + x11_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$4"))); + x11_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$5"))); + x11_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$3"))); + x11_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$4"))); + x11_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$5"))); + x11_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$3"))); + x11_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$4"))); + x11_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$5"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$3")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$3")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$3")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$3")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$3")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$3")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$4")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$4")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$4")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$4")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$4")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$4")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$5")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$5")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$5")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$5")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$5")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$5")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$3")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$3")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$3")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$3")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$3")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$3")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$4")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$4")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$4")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$4")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$4")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$4")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$5")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$5")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$5")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$5")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$5")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$5")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$3")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$3")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$3")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$3")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$3")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$3")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$4")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$4")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$4")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$4")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$4")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$4")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$5")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$5")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$5")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$5")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$5")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$5")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$0")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$0")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$0")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$1")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$1")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$1")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$2")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$2")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$2")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$3")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$3")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$3")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$3")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$3")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$3")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$4")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$4")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$4")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$4")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$4")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$4")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$5")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$5")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$5")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$5")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$5")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$5")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$0")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$0")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$0")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$1")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$1")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$1")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$2")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$2")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$2")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$3")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$3")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$3")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$3")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$3")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$3")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$4")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$4")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$4")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$4")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$4")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$4")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$5")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$5")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$5")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$5")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$5")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$4").product(factory.tuple("Target$5")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$0")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$0")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$0")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$1")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$1")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$1")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$2")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$2")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$2")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$3")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$3")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$3")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$3")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$3")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$3")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$4")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$4")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$4")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$4")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$4")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$4")).product(factory.tuple("Target$5"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$5")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$5")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$5")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$5")).product(factory.tuple("Target$3"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$5")).product(factory.tuple("Target$4"))); + x12_upper.add(factory.tuple("Book$5").product(factory.tuple("Target$5")).product(factory.tuple("Target$5"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Book$0")); + x13_upper.add(factory.tuple("Book$1")); + x13_upper.add(factory.tuple("Book$2")); + x13_upper.add(factory.tuple("Book$3")); + x13_upper.add(factory.tuple("Book$4")); + x13_upper.add(factory.tuple("Book$5")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$3"))); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$4"))); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$5"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$3"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$4"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$5"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$3"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$4"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$5"))); + x14_upper.add(factory.tuple("Book$3").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$3").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$3").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$3").product(factory.tuple("Book$3"))); + x14_upper.add(factory.tuple("Book$3").product(factory.tuple("Book$4"))); + x14_upper.add(factory.tuple("Book$3").product(factory.tuple("Book$5"))); + x14_upper.add(factory.tuple("Book$4").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$4").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$4").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$4").product(factory.tuple("Book$3"))); + x14_upper.add(factory.tuple("Book$4").product(factory.tuple("Book$4"))); + x14_upper.add(factory.tuple("Book$4").product(factory.tuple("Book$5"))); + x14_upper.add(factory.tuple("Book$5").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$5").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$5").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$5").product(factory.tuple("Book$3"))); + x14_upper.add(factory.tuple("Book$5").product(factory.tuple("Book$4"))); + x14_upper.add(factory.tuple("Book$5").product(factory.tuple("Book$5"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("Book$0")); + x15_upper.add(factory.tuple("Book$1")); + x15_upper.add(factory.tuple("Book$2")); + x15_upper.add(factory.tuple("Book$3")); + x15_upper.add(factory.tuple("Book$4")); + x15_upper.add(factory.tuple("Book$5")); + bounds.bound(x15, x15_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x18=x7.intersection(x8); + Formula x17=x18.no(); + Expression x21=x7.union(x8); + Expression x20=x6.intersection(x21); + Formula x19=x20.no(); + Variable x24=Variable.unary("lookupYields_this"); + Decls x23=x24.oneOf(x9); + Expression x26=x24.join(x11); + Formula x25=x26.in(x21); + Formula x22=x25.forAll(x23); + Expression x28=x11.join(Expression.UNIV); + Formula x27=x28.in(x9); + Variable x32=Variable.unary("lookupYields_this"); + Decls x31=x32.oneOf(x9); + Expression x36=x32.join(x12); + Expression x38=x32.join(x11); + Expression x39=x6.union(x21); + Expression x37=x38.product(x39); + Formula x35=x36.in(x37); + Variable x42=Variable.unary(""); + Decls x41=x42.oneOf(x38); + Expression x45=x42.join(x36); + Formula x44=x45.some(); + Formula x46=x45.in(x39); + Formula x43=x44.and(x46); + Formula x40=x43.forAll(x41); + Formula x34=x35.and(x40); + Variable x49=Variable.unary(""); + Decls x48=x49.oneOf(x39); + Expression x51=x36.join(x49); + Expression x52=x32.join(x11); + Formula x50=x51.in(x52); + Formula x47=x50.forAll(x48); + Formula x33=x34.and(x47); + Formula x30=x33.forAll(x31); + Expression x55=x12.join(Expression.UNIV); + Expression x54=x55.join(Expression.UNIV); + Formula x53=x54.in(x9); + Variable x58=Variable.unary("lookupYields_this"); + Decls x57=x58.oneOf(x9); + Variable x62=Variable.unary("lookupYields_n"); + Decls x61=x62.oneOf(x21); + Expression x67=x58.join(x12); + Expression x66=x67.closure(); + Expression x65=x62.join(x66); + Formula x64=x62.in(x65); + Formula x63=x64.not(); + Formula x60=x63.forAll(x61); + Variable x70=Variable.unary("lookupYields_a"); + Decls x69=x70.oneOf(x7); + Expression x73=x58.join(x12); + Expression x72=x70.join(x73); + Formula x71=x72.lone(); + Formula x68=x71.forAll(x69); + Formula x59=x60.and(x68); + Formula x56=x59.forAll(x57); + Expression x76=x10.product(x13); + Expression x75=x10.join(x76); + Formula x74=x75.in(x9); + Expression x79=x10.product(x14); + Expression x78=x10.join(x79); + Expression x80=x9.product(x9); + Formula x77=x78.in(x80); + Formula x81=x14.totalOrder(x9,x13,x15); + Expression x83=x13.join(x12); + Formula x82=x83.no(); + Variable x86=Variable.unary("lookupYields_b"); + Expression x89=x14.join(x9); + Expression x88=x9.difference(x89); + Expression x87=x9.difference(x88); + Decls x85=x86.oneOf(x87); + Variable x93=Variable.unary("lookupYields_n"); + Decls x92=x93.oneOf(x21); + Variable x95=Variable.unary("lookupYields_t"); + Decls x94=x95.oneOf(x39); + Decls x91=x92.and(x94); + Formula x99=x95.in(x6); + Expression x103=x21.intersection(x95); + Expression x105=x86.join(x12); + Expression x104=x105.closure(); + Expression x102=x103.join(x104); + Expression x101=x102.intersection(x6); + Formula x100=x101.some(); + Formula x98=x99.or(x100); + Expression x108=x86.join(x14); + Expression x107=x108.join(x12); + Expression x110=x86.join(x12); + Expression x111=x93.product(x95); + Expression x109=x110.union(x111); + Formula x106=x107.eq(x109); + Formula x97=x98.and(x106); + Expression x116=x86.join(x12); + Expression x115=x116.join(x93); + Formula x114=x115.no(); + Expression x120=x86.join(x12); + Expression x119=x93.join(x120); + Expression x118=x119.difference(x95); + Formula x117=x118.some(); + Formula x113=x114.or(x117); + Expression x122=x108.join(x12); + Expression x124=x86.join(x12); + Expression x125=x93.product(x95); + Expression x123=x124.difference(x125); + Formula x121=x122.eq(x123); + Formula x112=x113.and(x121); + Formula x96=x97.or(x112); + Formula x90=x96.forSome(x91); + Formula x84=x90.forAll(x85); + Variable x130=Variable.unary("lookupYields_b"); + Decls x129=x130.oneOf(x9); + Variable x132=Variable.unary("lookupYields_n"); + Expression x133=x130.join(x11); + Decls x131=x132.oneOf(x133); + Decls x128=x129.and(x131); + Expression x138=x130.join(x12); + Expression x137=x138.closure(); + Expression x136=x132.join(x137); + Expression x135=x136.intersection(x6); + Formula x134=x135.some(); + Formula x127=x134.forAll(x128); + Formula x126=x127.not(); + Formula x139=x0.eq(x0); + Formula x140=x1.eq(x1); + Formula x141=x2.eq(x2); + Formula x142=x3.eq(x3); + Formula x143=x4.eq(x4); + Formula x144=x5.eq(x5); + Formula x145=x6.eq(x6); + Formula x146=x7.eq(x7); + Formula x147=x8.eq(x8); + Formula x148=x9.eq(x9); + Formula x149=x10.eq(x10); + Formula x150=x11.eq(x11); + Formula x151=x12.eq(x12); + Formula x152=x13.eq(x13); + Formula x153=x14.eq(x14); + Formula x154=x15.eq(x15); + Formula x16=Formula.compose(FormulaOperator.AND, x17, x19, x22, x27, x30, x53, x56, x74, x77, x81, x82, x84, x126, x139, x140, x141, x142, x143, x144, x145, x146, x147, x148, x149, x150, x151, x152, x153, x154); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x16,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dLookupYieldsCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dLookupYieldsCheck.java new file mode 100644 index 0000000..bf01c67 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter2/addressBook3dLookupYieldsCheck.java @@ -0,0 +1,388 @@ +package kodkod.examples.models.softwareAbstractions.chapter2; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "addressBook3d", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =4, + NestedRelationalJoins = 4, + TransitiveClosure = 3, + NestedQuantifiers = 4, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 6, + OrderedRelations = 1, + Constraints = 20 +) + +public final class addressBook3dLookupYieldsCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Addr"); + Relation x7 = Relation.unary("this/Alias"); + Relation x8 = Relation.unary("this/Group"); + Relation x9 = Relation.unary("this/Book"); + Relation x10 = Relation.unary("BookOrder/Ord"); + Relation x11 = Relation.nary("this/Book.names", 2); + Relation x12 = Relation.nary("this/Book.addr", 3); + Relation x13 = Relation.unary("BookOrder/Ord.First"); + Relation x14 = Relation.nary("BookOrder/Ord.Next", 2); + Relation x15 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Book$0", + "Book$1", "Book$2", "Book$3", "BookOrder/Ord$0", "Target$0", "Target$1", + "Target$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Target$0")); + x6_upper.add(factory.tuple("Target$1")); + x6_upper.add(factory.tuple("Target$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Target$0")); + x7_upper.add(factory.tuple("Target$1")); + x7_upper.add(factory.tuple("Target$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Target$0")); + x8_upper.add(factory.tuple("Target$1")); + x8_upper.add(factory.tuple("Target$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Book$0")); + x9_upper.add(factory.tuple("Book$1")); + x9_upper.add(factory.tuple("Book$2")); + x9_upper.add(factory.tuple("Book$3")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("BookOrder/Ord$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2"))); + x11_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$0"))); + x11_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$1"))); + x11_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$2").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x12_upper.add(factory.tuple("Book$3").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Book$0")); + x13_upper.add(factory.tuple("Book$1")); + x13_upper.add(factory.tuple("Book$2")); + x13_upper.add(factory.tuple("Book$3")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$0").product(factory.tuple("Book$3"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$1").product(factory.tuple("Book$3"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$2").product(factory.tuple("Book$3"))); + x14_upper.add(factory.tuple("Book$3").product(factory.tuple("Book$0"))); + x14_upper.add(factory.tuple("Book$3").product(factory.tuple("Book$1"))); + x14_upper.add(factory.tuple("Book$3").product(factory.tuple("Book$2"))); + x14_upper.add(factory.tuple("Book$3").product(factory.tuple("Book$3"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("Book$0")); + x15_upper.add(factory.tuple("Book$1")); + x15_upper.add(factory.tuple("Book$2")); + x15_upper.add(factory.tuple("Book$3")); + bounds.bound(x15, x15_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x18=x7.intersection(x8); + Formula x17=x18.no(); + Expression x21=x7.union(x8); + Expression x20=x6.intersection(x21); + Formula x19=x20.no(); + Variable x24=Variable.unary("lookupYields_this"); + Decls x23=x24.oneOf(x9); + Expression x26=x24.join(x11); + Formula x25=x26.in(x21); + Formula x22=x25.forAll(x23); + Expression x28=x11.join(Expression.UNIV); + Formula x27=x28.in(x9); + Variable x32=Variable.unary("lookupYields_this"); + Decls x31=x32.oneOf(x9); + Expression x36=x32.join(x12); + Expression x38=x32.join(x11); + Expression x39=x6.union(x21); + Expression x37=x38.product(x39); + Formula x35=x36.in(x37); + Variable x42=Variable.unary(""); + Decls x41=x42.oneOf(x38); + Expression x45=x42.join(x36); + Formula x44=x45.some(); + Formula x46=x45.in(x39); + Formula x43=x44.and(x46); + Formula x40=x43.forAll(x41); + Formula x34=x35.and(x40); + Variable x49=Variable.unary(""); + Decls x48=x49.oneOf(x39); + Expression x51=x36.join(x49); + Expression x52=x32.join(x11); + Formula x50=x51.in(x52); + Formula x47=x50.forAll(x48); + Formula x33=x34.and(x47); + Formula x30=x33.forAll(x31); + Expression x55=x12.join(Expression.UNIV); + Expression x54=x55.join(Expression.UNIV); + Formula x53=x54.in(x9); + Variable x58=Variable.unary("lookupYields_this"); + Decls x57=x58.oneOf(x9); + Variable x62=Variable.unary("lookupYields_n"); + Decls x61=x62.oneOf(x21); + Expression x67=x58.join(x12); + Expression x66=x67.closure(); + Expression x65=x62.join(x66); + Formula x64=x62.in(x65); + Formula x63=x64.not(); + Formula x60=x63.forAll(x61); + Variable x70=Variable.unary("lookupYields_a"); + Decls x69=x70.oneOf(x7); + Expression x73=x58.join(x12); + Expression x72=x70.join(x73); + Formula x71=x72.lone(); + Formula x68=x71.forAll(x69); + Formula x59=x60.and(x68); + Formula x56=x59.forAll(x57); + Expression x76=x10.product(x13); + Expression x75=x10.join(x76); + Formula x74=x75.in(x9); + Expression x79=x10.product(x14); + Expression x78=x10.join(x79); + Expression x80=x9.product(x9); + Formula x77=x78.in(x80); + Formula x81=x14.totalOrder(x9,x13,x15); + Expression x83=x13.join(x12); + Formula x82=x83.no(); + Variable x86=Variable.unary("lookupYields_b"); + Expression x89=x14.join(x9); + Expression x88=x9.difference(x89); + Expression x87=x9.difference(x88); + Decls x85=x86.oneOf(x87); + Variable x93=Variable.unary("lookupYields_n"); + Decls x92=x93.oneOf(x21); + Variable x95=Variable.unary("lookupYields_t"); + Decls x94=x95.oneOf(x39); + Decls x91=x92.and(x94); + Formula x99=x95.in(x6); + Expression x103=x21.intersection(x95); + Expression x105=x86.join(x12); + Expression x104=x105.closure(); + Expression x102=x103.join(x104); + Expression x101=x102.intersection(x6); + Formula x100=x101.some(); + Formula x98=x99.or(x100); + Expression x108=x86.join(x14); + Expression x107=x108.join(x12); + Expression x110=x86.join(x12); + Expression x111=x93.product(x95); + Expression x109=x110.union(x111); + Formula x106=x107.eq(x109); + Formula x97=x98.and(x106); + Expression x116=x86.join(x12); + Expression x115=x116.join(x93); + Formula x114=x115.no(); + Expression x120=x86.join(x12); + Expression x119=x93.join(x120); + Expression x118=x119.difference(x95); + Formula x117=x118.some(); + Formula x113=x114.or(x117); + Expression x122=x108.join(x12); + Expression x124=x86.join(x12); + Expression x125=x93.product(x95); + Expression x123=x124.difference(x125); + Formula x121=x122.eq(x123); + Formula x112=x113.and(x121); + Formula x96=x97.or(x112); + Formula x90=x96.forSome(x91); + Formula x84=x90.forAll(x85); + Variable x130=Variable.unary("lookupYields_b"); + Decls x129=x130.oneOf(x9); + Variable x132=Variable.unary("lookupYields_n"); + Expression x133=x130.join(x11); + Decls x131=x132.oneOf(x133); + Decls x128=x129.and(x131); + Expression x138=x130.join(x12); + Expression x137=x138.closure(); + Expression x136=x132.join(x137); + Expression x135=x136.intersection(x6); + Formula x134=x135.some(); + Formula x127=x134.forAll(x128); + Formula x126=x127.not(); + Formula x139=x0.eq(x0); + Formula x140=x1.eq(x1); + Formula x141=x2.eq(x2); + Formula x142=x3.eq(x3); + Formula x143=x4.eq(x4); + Formula x144=x5.eq(x5); + Formula x145=x6.eq(x6); + Formula x146=x7.eq(x7); + Formula x147=x8.eq(x8); + Formula x148=x9.eq(x9); + Formula x149=x10.eq(x10); + Formula x150=x11.eq(x11); + Formula x151=x12.eq(x12); + Formula x152=x13.eq(x13); + Formula x153=x14.eq(x14); + Formula x154=x15.eq(x15); + Formula x16=Formula.compose(FormulaOperator.AND, x17, x19, x22, x27, x30, x53, x56, x74, x77, x81, x82, x84, x126, x139, x140, x141, x142, x143, x144, x145, x146, x147, x148, x149, x150, x151, x152, x153, x154); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x16,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/filesystemFileInDirCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/filesystemFileInDirCheck.java new file mode 100644 index 0000000..45943ea --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/filesystemFileInDirCheck.java @@ -0,0 +1,191 @@ +package kodkod.examples.models.softwareAbstractions.chapter4; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "filesystem", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =3, + NestedRelationalJoins = 0, + TransitiveClosure = 1, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 4 +) + + +public final class filesystemFileInDirCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Root"); + Relation x7 = Relation.unary("this/Dir remainder"); + Relation x8 = Relation.unary("this/File"); + Relation x9 = Relation.nary("this/Dir.contents", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Object$0", + "Object$1", "Root$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Root$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Object$0")); + x7_upper.add(factory.tuple("Object$1")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Object$0")); + x8_upper.add(factory.tuple("Object$1")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x9_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$0"))); + x9_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$1"))); + x9_upper.add(factory.tuple("Object$0").product(factory.tuple("Root$0"))); + x9_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$0"))); + x9_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$1"))); + x9_upper.add(factory.tuple("Object$1").product(factory.tuple("Root$0"))); + x9_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$0"))); + x9_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$1"))); + bounds.bound(x9, x9_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x13=x6.union(x7); + Expression x12=x13.intersection(x8); + Formula x11=x12.no(); + Variable x16=Variable.unary("FileInDir_this"); + Decls x15=x16.oneOf(x13); + Expression x18=x16.join(x9); + Expression x19=x13.union(x8); + Formula x17=x18.in(x19); + Formula x14=x17.forAll(x15); + Expression x21=x9.join(Expression.UNIV); + Formula x20=x21.in(x13); + Expression x26=x9.closure(); + Expression x31=Expression.INTS.union(x5); + Expression x30=x31.union(x19); + Expression x29=x30.product(Expression.UNIV); + Expression x27=Expression.IDEN.intersection(x29); + Expression x25=x26.union(x27); + Expression x24=x6.join(x25); + Formula x23=x19.in(x24); + Variable x36=Variable.unary("FileInDir_f"); + Decls x35=x36.oneOf(x8); + Expression x38=x9.join(x36); + Formula x37=x38.some(); + Formula x34=x37.forAll(x35); + Formula x33=x34.not(); + Formula x39=x0.eq(x0); + Formula x40=x1.eq(x1); + Formula x41=x2.eq(x2); + Formula x42=x3.eq(x3); + Formula x43=x4.eq(x4); + Formula x44=x5.eq(x5); + Formula x45=x6.eq(x6); + Formula x46=x7.eq(x7); + Formula x47=x8.eq(x8); + Formula x48=x9.eq(x9); + Formula x10=Formula.compose(FormulaOperator.AND, x11, x14, x20, x23, x33, x39, x40, x41, x42, x43, x44, x45, x46, x47, x48); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x10,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/filesystemRootTopCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/filesystemRootTopCheck.java new file mode 100644 index 0000000..35a2b10 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/filesystemRootTopCheck.java @@ -0,0 +1,192 @@ +package kodkod.examples.models.softwareAbstractions.chapter4; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + + +@ExampleMetadata( + Name = "filesystem", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =3, + NestedRelationalJoins = 0, + TransitiveClosure = 1, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 4 +) + +public final class filesystemRootTopCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Root"); + Relation x7 = Relation.unary("this/Dir remainder"); + Relation x8 = Relation.unary("this/File"); + Relation x9 = Relation.nary("this/Dir.contents", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Object$0", + "Object$1", "Root$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Root$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Object$0")); + x7_upper.add(factory.tuple("Object$1")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Object$0")); + x8_upper.add(factory.tuple("Object$1")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x9_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$0"))); + x9_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$1"))); + x9_upper.add(factory.tuple("Object$0").product(factory.tuple("Root$0"))); + x9_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$0"))); + x9_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$1"))); + x9_upper.add(factory.tuple("Object$1").product(factory.tuple("Root$0"))); + x9_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$0"))); + x9_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$1"))); + bounds.bound(x9, x9_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x13=x6.union(x7); + Expression x12=x13.intersection(x8); + Formula x11=x12.no(); + Variable x16=Variable.unary("RootTop_this"); + Decls x15=x16.oneOf(x13); + Expression x18=x16.join(x9); + Expression x19=x13.union(x8); + Formula x17=x18.in(x19); + Formula x14=x17.forAll(x15); + Expression x21=x9.join(Expression.UNIV); + Formula x20=x21.in(x13); + Expression x26=x9.closure(); + Expression x31=Expression.INTS.union(x5); + Expression x30=x31.union(x19); + Expression x29=x30.product(Expression.UNIV); + Expression x27=Expression.IDEN.intersection(x29); + Expression x25=x26.union(x27); + Expression x24=x6.join(x25); + Formula x23=x19.in(x24); + Variable x36=Variable.unary("RootTop_o"); + Decls x35=x36.oneOf(x19); + Expression x39=x36.join(x9); + Formula x38=x6.in(x39); + Formula x37=x38.not(); + Formula x34=x37.forAll(x35); + Formula x33=x34.not(); + Formula x40=x0.eq(x0); + Formula x41=x1.eq(x1); + Formula x42=x2.eq(x2); + Formula x43=x3.eq(x3); + Formula x44=x4.eq(x4); + Formula x45=x5.eq(x5); + Formula x46=x6.eq(x6); + Formula x47=x7.eq(x7); + Formula x48=x8.eq(x8); + Formula x49=x9.eq(x9); + Formula x10=Formula.compose(FormulaOperator.AND, x11, x14, x20, x23, x33, x40, x41, x42, x43, x44, x45, x46, x47, x48, x49); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x10,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/filesystemSomeDirCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/filesystemSomeDirCheck.java new file mode 100644 index 0000000..938ac2e --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/filesystemSomeDirCheck.java @@ -0,0 +1,192 @@ +package kodkod.examples.models.softwareAbstractions.chapter4; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "filesystem", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =3, + NestedRelationalJoins = 0, + TransitiveClosure = 1, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 4 +) + + +public final class filesystemSomeDirCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Root"); + Relation x7 = Relation.unary("this/Dir remainder"); + Relation x8 = Relation.unary("this/File"); + Relation x9 = Relation.nary("this/Dir.contents", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Object$0", + "Object$1", "Root$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Root$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Object$0")); + x7_upper.add(factory.tuple("Object$1")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Object$0")); + x8_upper.add(factory.tuple("Object$1")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("Root$0").product(factory.tuple("Root$0"))); + x9_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$0"))); + x9_upper.add(factory.tuple("Root$0").product(factory.tuple("Object$1"))); + x9_upper.add(factory.tuple("Object$0").product(factory.tuple("Root$0"))); + x9_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$0"))); + x9_upper.add(factory.tuple("Object$0").product(factory.tuple("Object$1"))); + x9_upper.add(factory.tuple("Object$1").product(factory.tuple("Root$0"))); + x9_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$0"))); + x9_upper.add(factory.tuple("Object$1").product(factory.tuple("Object$1"))); + bounds.bound(x9, x9_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x13=x6.union(x7); + Expression x12=x13.intersection(x8); + Formula x11=x12.no(); + Variable x16=Variable.unary("SomeDir_this"); + Decls x15=x16.oneOf(x13); + Expression x18=x16.join(x9); + Expression x19=x13.union(x8); + Formula x17=x18.in(x19); + Formula x14=x17.forAll(x15); + Expression x21=x9.join(Expression.UNIV); + Formula x20=x21.in(x13); + Expression x26=x9.closure(); + Expression x31=Expression.INTS.union(x5); + Expression x30=x31.union(x19); + Expression x29=x30.product(Expression.UNIV); + Expression x27=Expression.IDEN.intersection(x29); + Expression x25=x26.union(x27); + Expression x24=x6.join(x25); + Formula x23=x19.in(x24); + Variable x36=Variable.unary("SomeDir_o"); + Expression x37=x19.difference(x6); + Decls x35=x36.oneOf(x37); + Expression x39=x9.join(x36); + Formula x38=x39.some(); + Formula x34=x38.forAll(x35); + Formula x33=x34.not(); + Formula x40=x0.eq(x0); + Formula x41=x1.eq(x1); + Formula x42=x2.eq(x2); + Formula x43=x3.eq(x3); + Formula x44=x4.eq(x4); + Formula x45=x5.eq(x5); + Formula x46=x6.eq(x6); + Formula x47=x7.eq(x7); + Formula x48=x8.eq(x8); + Formula x49=x9.eq(x9); + Formula x10=Formula.compose(FormulaOperator.AND, x11, x14, x20, x23, x33, x40, x41, x42, x43, x44, x45, x46, x47, x48, x49); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x10,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/grandpa3NoSelfFatherCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/grandpa3NoSelfFatherCheck.java new file mode 100644 index 0000000..8963bce --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/grandpa3NoSelfFatherCheck.java @@ -0,0 +1,266 @@ +package kodkod.examples.models.softwareAbstractions.chapter4; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "grandpa3", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 2, + TransitiveClosure = 2, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 0, + Constraints = 9 +) + + + +public final class grandpa3NoSelfFatherCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Man"); + Relation x7 = Relation.unary("this/Woman"); + Relation x8 = Relation.nary("this/Person.father", 2); + Relation x9 = Relation.nary("this/Person.mother", 2); + Relation x10 = Relation.nary("this/Man.wife", 2); + Relation x11 = Relation.nary("this/Woman.husband", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Person$0", + "Person$1", "Person$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Person$0")); + x6_upper.add(factory.tuple("Person$1")); + x6_upper.add(factory.tuple("Person$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Person$0")); + x7_upper.add(factory.tuple("Person$1")); + x7_upper.add(factory.tuple("Person$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(2); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + bounds.bound(x11, x11_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x6.intersection(x7); + Formula x13=x14.no(); + Variable x17=Variable.unary("NoSelfFather_this"); + Decls x16=x17.oneOf(x6); + Expression x20=x17.join(x10); + Formula x19=x20.lone(); + Formula x21=x20.in(x7); + Formula x18=x19.and(x21); + Formula x15=x18.forAll(x16); + Expression x23=x10.join(Expression.UNIV); + Formula x22=x23.in(x6); + Variable x27=Variable.unary("NoSelfFather_this"); + Decls x26=x27.oneOf(x7); + Expression x30=x27.join(x11); + Formula x29=x30.lone(); + Formula x31=x30.in(x6); + Formula x28=x29.and(x31); + Formula x25=x28.forAll(x26); + Expression x33=x11.join(Expression.UNIV); + Formula x32=x33.in(x7); + Variable x36=Variable.unary("NoSelfFather_this"); + Expression x37=x6.union(x7); + Decls x35=x36.oneOf(x37); + Expression x40=x36.join(x8); + Formula x39=x40.lone(); + Formula x41=x40.in(x6); + Formula x38=x39.and(x41); + Formula x34=x38.forAll(x35); + Expression x43=x8.join(Expression.UNIV); + Formula x42=x43.in(x37); + Variable x46=Variable.unary("NoSelfFather_this"); + Decls x45=x46.oneOf(x37); + Expression x49=x46.join(x9); + Formula x48=x49.lone(); + Formula x50=x49.in(x7); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x52=x9.join(Expression.UNIV); + Formula x51=x52.in(x37); + Variable x55=Variable.unary("NoSelfFather_p"); + Decls x54=x55.oneOf(x37); + Expression x60=x9.union(x8); + Expression x59=x60.closure(); + Expression x58=x55.join(x59); + Formula x57=x55.in(x58); + Formula x56=x57.not(); + Formula x53=x56.forAll(x54); + Expression x62=x11.transpose(); + Formula x61=x10.eq(x62); + Expression x65=x10.union(x11); + Expression x67=x9.union(x8); + Expression x66=x67.closure(); + Expression x64=x65.intersection(x66); + Formula x63=x64.no(); + Variable x71=Variable.unary("NoSelfFather_m"); + Decls x70=x71.oneOf(x6); + Expression x74=x71.join(x8); + Formula x73=x71.eq(x74); + Formula x72=x73.not(); + Formula x69=x72.forAll(x70); + Formula x68=x69.not(); + Formula x75=x0.eq(x0); + Formula x76=x1.eq(x1); + Formula x77=x2.eq(x2); + Formula x78=x3.eq(x3); + Formula x79=x4.eq(x4); + Formula x80=x5.eq(x5); + Formula x81=x6.eq(x6); + Formula x82=x7.eq(x7); + Formula x83=x8.eq(x8); + Formula x84=x9.eq(x9); + Formula x85=x10.eq(x10); + Formula x86=x11.eq(x11); + Formula x12=Formula.compose(FormulaOperator.AND, x13, x15, x22, x25, x32, x34, x42, x44, x51, x53, x61, x63, x68, x75, x76, x77, x78, x79, x80, x81, x82, x83, x84, x85, x86); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x12,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/grandpa3OwnGrandpaRun.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/grandpa3OwnGrandpaRun.java new file mode 100644 index 0000000..23a3f4e --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/grandpa3OwnGrandpaRun.java @@ -0,0 +1,301 @@ +package kodkod.examples.models.softwareAbstractions.chapter4; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "grandpa3", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 2, + TransitiveClosure = 2, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 0, + Constraints = 9 +) + + + +public final class grandpa3OwnGrandpaRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Man"); + Relation x7 = Relation.unary("this/Woman"); + Relation x8 = Relation.nary("this/Person.father", 2); + Relation x9 = Relation.nary("this/Person.mother", 2); + Relation x10 = Relation.nary("this/Man.wife", 2); + Relation x11 = Relation.nary("this/Woman.husband", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Person$0", + "Person$1", "Person$2", "Person$3" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Person$0")); + x6_upper.add(factory.tuple("Person$1")); + x6_upper.add(factory.tuple("Person$2")); + x6_upper.add(factory.tuple("Person$3")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Person$0")); + x7_upper.add(factory.tuple("Person$1")); + x7_upper.add(factory.tuple("Person$2")); + x7_upper.add(factory.tuple("Person$3")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(2); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x8_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x8_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$3"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$3"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$3"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$3").product(factory.tuple("Person$3"))); + bounds.bound(x11, x11_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x6.intersection(x7); + Formula x13=x14.no(); + Variable x17=Variable.unary("ownGrandpa_this"); + Decls x16=x17.oneOf(x6); + Expression x20=x17.join(x10); + Formula x19=x20.lone(); + Formula x21=x20.in(x7); + Formula x18=x19.and(x21); + Formula x15=x18.forAll(x16); + Expression x23=x10.join(Expression.UNIV); + Formula x22=x23.in(x6); + Variable x27=Variable.unary("ownGrandpa_this"); + Decls x26=x27.oneOf(x7); + Expression x30=x27.join(x11); + Formula x29=x30.lone(); + Formula x31=x30.in(x6); + Formula x28=x29.and(x31); + Formula x25=x28.forAll(x26); + Expression x33=x11.join(Expression.UNIV); + Formula x32=x33.in(x7); + Variable x36=Variable.unary("ownGrandpa_this"); + Expression x37=x6.union(x7); + Decls x35=x36.oneOf(x37); + Expression x40=x36.join(x8); + Formula x39=x40.lone(); + Formula x41=x40.in(x6); + Formula x38=x39.and(x41); + Formula x34=x38.forAll(x35); + Expression x43=x8.join(Expression.UNIV); + Formula x42=x43.in(x37); + Variable x46=Variable.unary("ownGrandpa_this"); + Decls x45=x46.oneOf(x37); + Expression x49=x46.join(x9); + Formula x48=x49.lone(); + Formula x50=x49.in(x7); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x52=x9.join(Expression.UNIV); + Formula x51=x52.in(x37); + Variable x55=Variable.unary("ownGrandpa_p"); + Decls x54=x55.oneOf(x37); + Expression x60=x9.union(x8); + Expression x59=x60.closure(); + Expression x58=x55.join(x59); + Formula x57=x55.in(x58); + Formula x56=x57.not(); + Formula x53=x56.forAll(x54); + Expression x62=x11.transpose(); + Formula x61=x10.eq(x62); + Expression x65=x10.union(x11); + Expression x67=x9.union(x8); + Expression x66=x67.closure(); + Expression x64=x65.intersection(x66); + Formula x63=x64.no(); + Variable x70=Variable.unary("ownGrandpa_p"); + Decls x69=x70.oneOf(x37); + Expression x77=x9.union(x8); + Expression x78=x8.join(x10); + Expression x76=x77.union(x78); + Expression x79=x9.join(x11); + Expression x75=x76.union(x79); + Expression x74=x70.join(x75); + Expression x73=x74.join(x75); + Expression x72=x73.intersection(x6); + Formula x71=x70.in(x72); + Formula x68=x71.forSome(x69); + Formula x80=x0.eq(x0); + Formula x81=x1.eq(x1); + Formula x82=x2.eq(x2); + Formula x83=x3.eq(x3); + Formula x84=x4.eq(x4); + Formula x85=x5.eq(x5); + Formula x86=x6.eq(x6); + Formula x87=x7.eq(x7); + Formula x88=x8.eq(x8); + Formula x89=x9.eq(x9); + Formula x90=x10.eq(x10); + Formula x91=x11.eq(x11); + Formula x12=Formula.compose(FormulaOperator.AND, x13, x15, x22, x25, x32, x34, x42, x44, x51, x53, x61, x63, x68, x80, x81, x82, x83, x84, x85, x86, x87, x88, x89, x90, x91); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x12,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/grandpa3SameCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/grandpa3SameCheck.java new file mode 100644 index 0000000..da1f708 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/grandpa3SameCheck.java @@ -0,0 +1,300 @@ +package kodkod.examples.models.softwareAbstractions.chapter4; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "grandpa3", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 2, + TransitiveClosure = 5, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 0, + Constraints = 9 +) + + + +public final class grandpa3SameCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Man"); + Relation x7 = Relation.unary("this/Woman"); + Relation x8 = Relation.nary("this/Person.father", 2); + Relation x9 = Relation.nary("this/Person.mother", 2); + Relation x10 = Relation.nary("this/Man.wife", 2); + Relation x11 = Relation.nary("this/Woman.husband", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Person$0", + "Person$1", "Person$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Person$0")); + x6_upper.add(factory.tuple("Person$1")); + x6_upper.add(factory.tuple("Person$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Person$0")); + x7_upper.add(factory.tuple("Person$1")); + x7_upper.add(factory.tuple("Person$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(2); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x8_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x9_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x10_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$0").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$1").product(factory.tuple("Person$2"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$0"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$1"))); + x11_upper.add(factory.tuple("Person$2").product(factory.tuple("Person$2"))); + bounds.bound(x11, x11_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x6.intersection(x7); + Formula x13=x14.no(); + Variable x17=Variable.unary("Same_this"); + Decls x16=x17.oneOf(x6); + Expression x20=x17.join(x10); + Formula x19=x20.lone(); + Formula x21=x20.in(x7); + Formula x18=x19.and(x21); + Formula x15=x18.forAll(x16); + Expression x23=x10.join(Expression.UNIV); + Formula x22=x23.in(x6); + Variable x27=Variable.unary("Same_this"); + Decls x26=x27.oneOf(x7); + Expression x30=x27.join(x11); + Formula x29=x30.lone(); + Formula x31=x30.in(x6); + Formula x28=x29.and(x31); + Formula x25=x28.forAll(x26); + Expression x33=x11.join(Expression.UNIV); + Formula x32=x33.in(x7); + Variable x36=Variable.unary("Same_this"); + Expression x37=x6.union(x7); + Decls x35=x36.oneOf(x37); + Expression x40=x36.join(x8); + Formula x39=x40.lone(); + Formula x41=x40.in(x6); + Formula x38=x39.and(x41); + Formula x34=x38.forAll(x35); + Expression x43=x8.join(Expression.UNIV); + Formula x42=x43.in(x37); + Variable x46=Variable.unary("Same_this"); + Decls x45=x46.oneOf(x37); + Expression x49=x46.join(x9); + Formula x48=x49.lone(); + Formula x50=x49.in(x7); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x52=x9.join(Expression.UNIV); + Formula x51=x52.in(x37); + Variable x55=Variable.unary("Same_p"); + Decls x54=x55.oneOf(x37); + Expression x60=x9.union(x8); + Expression x59=x60.closure(); + Expression x58=x55.join(x59); + Formula x57=x55.in(x58); + Formula x56=x57.not(); + Formula x53=x56.forAll(x54); + Expression x62=x11.transpose(); + Formula x61=x10.eq(x62); + Expression x65=x10.union(x11); + Expression x67=x9.union(x8); + Expression x66=x67.closure(); + Expression x64=x65.intersection(x66); + Formula x63=x64.no(); + Expression x72=x10.union(x11); + Expression x74=x9.union(x8); + Expression x73=x74.closure(); + Expression x71=x72.intersection(x73); + Formula x70=x71.no(); + Variable x78=Variable.unary("SocialConvention2_m"); + Decls x77=x78.oneOf(x6); + Expression x82=x78.join(x10); + Formula x81=x82.some(); + Expression x84=x78.join(x10); + Expression x89=x9.union(x8); + Expression x88=x89.closure(); + Expression x94=Expression.INTS.union(x5); + Expression x93=x94.union(x37); + Expression x92=x93.product(Expression.UNIV); + Expression x90=Expression.IDEN.intersection(x92); + Expression x87=x88.union(x90); + Expression x86=x78.join(x87); + Expression x85=x86.join(x9); + Formula x83=x84.in(x85); + Formula x80=x81.and(x83); + Formula x79=x80.not(); + Formula x76=x79.forAll(x77); + Variable x98=Variable.unary("SocialConvention2_w"); + Decls x97=x98.oneOf(x7); + Expression x102=x98.join(x11); + Formula x101=x102.some(); + Expression x104=x98.join(x11); + Expression x108=x89.closure(); + Expression x110=x93.product(Expression.UNIV); + Expression x109=Expression.IDEN.intersection(x110); + Expression x107=x108.union(x109); + Expression x106=x98.join(x107); + Expression x105=x106.join(x8); + Formula x103=x104.in(x105); + Formula x100=x101.and(x103); + Formula x99=x100.not(); + Formula x96=x99.forAll(x97); + Formula x75=x76.and(x96); + Formula x69=x70.iff(x75); + Formula x68=x69.not(); + Formula x111=x0.eq(x0); + Formula x112=x1.eq(x1); + Formula x113=x2.eq(x2); + Formula x114=x3.eq(x3); + Formula x115=x4.eq(x4); + Formula x116=x5.eq(x5); + Formula x117=x6.eq(x6); + Formula x118=x7.eq(x7); + Formula x119=x8.eq(x8); + Formula x120=x9.eq(x9); + Formula x121=x10.eq(x10); + Formula x122=x11.eq(x11); + Formula x12=Formula.compose(FormulaOperator.AND, x13, x15, x22, x25, x32, x34, x42, x44, x51, x53, x61, x63, x68, x111, x112, x113, x114, x115, x116, x117, x118, x119, x120, x121, x122); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x12,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/lightsSafeCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/lightsSafeCheck.java new file mode 100644 index 0000000..546a9d6 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter4/lightsSafeCheck.java @@ -0,0 +1,317 @@ +package kodkod.examples.models.softwareAbstractions.chapter4; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "lights", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =3, + NestedRelationalJoins = 5, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 2, + OrderedRelations = 0, + Constraints = 7 +) + + +public final class lightsSafeCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Red"); + Relation x7 = Relation.unary("this/Yellow"); + Relation x8 = Relation.unary("this/Green"); + Relation x9 = Relation.unary("this/Light"); + Relation x10 = Relation.unary("this/LightState"); + Relation x11 = Relation.unary("this/Junction"); + Relation x12 = Relation.nary("this/LightState.color", 3); + Relation x13 = Relation.nary("this/Junction.lights", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Green$0", + "Junction$0", "Light$0", "Light$1", "Light$2", "LightState$0", "LightState$1", + "LightState$2", "Red$0", "Yellow$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Red$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Yellow$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Green$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Light$0")); + x9_upper.add(factory.tuple("Light$1")); + x9_upper.add(factory.tuple("Light$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("LightState$0")); + x10_upper.add(factory.tuple("LightState$1")); + x10_upper.add(factory.tuple("LightState$2")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("Junction$0")); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("LightState$0").product(factory.tuple("Light$0")).product(factory.tuple("Red$0"))); + x12_upper.add(factory.tuple("LightState$0").product(factory.tuple("Light$0")).product(factory.tuple("Yellow$0"))); + x12_upper.add(factory.tuple("LightState$0").product(factory.tuple("Light$0")).product(factory.tuple("Green$0"))); + x12_upper.add(factory.tuple("LightState$0").product(factory.tuple("Light$1")).product(factory.tuple("Red$0"))); + x12_upper.add(factory.tuple("LightState$0").product(factory.tuple("Light$1")).product(factory.tuple("Yellow$0"))); + x12_upper.add(factory.tuple("LightState$0").product(factory.tuple("Light$1")).product(factory.tuple("Green$0"))); + x12_upper.add(factory.tuple("LightState$0").product(factory.tuple("Light$2")).product(factory.tuple("Red$0"))); + x12_upper.add(factory.tuple("LightState$0").product(factory.tuple("Light$2")).product(factory.tuple("Yellow$0"))); + x12_upper.add(factory.tuple("LightState$0").product(factory.tuple("Light$2")).product(factory.tuple("Green$0"))); + x12_upper.add(factory.tuple("LightState$1").product(factory.tuple("Light$0")).product(factory.tuple("Red$0"))); + x12_upper.add(factory.tuple("LightState$1").product(factory.tuple("Light$0")).product(factory.tuple("Yellow$0"))); + x12_upper.add(factory.tuple("LightState$1").product(factory.tuple("Light$0")).product(factory.tuple("Green$0"))); + x12_upper.add(factory.tuple("LightState$1").product(factory.tuple("Light$1")).product(factory.tuple("Red$0"))); + x12_upper.add(factory.tuple("LightState$1").product(factory.tuple("Light$1")).product(factory.tuple("Yellow$0"))); + x12_upper.add(factory.tuple("LightState$1").product(factory.tuple("Light$1")).product(factory.tuple("Green$0"))); + x12_upper.add(factory.tuple("LightState$1").product(factory.tuple("Light$2")).product(factory.tuple("Red$0"))); + x12_upper.add(factory.tuple("LightState$1").product(factory.tuple("Light$2")).product(factory.tuple("Yellow$0"))); + x12_upper.add(factory.tuple("LightState$1").product(factory.tuple("Light$2")).product(factory.tuple("Green$0"))); + x12_upper.add(factory.tuple("LightState$2").product(factory.tuple("Light$0")).product(factory.tuple("Red$0"))); + x12_upper.add(factory.tuple("LightState$2").product(factory.tuple("Light$0")).product(factory.tuple("Yellow$0"))); + x12_upper.add(factory.tuple("LightState$2").product(factory.tuple("Light$0")).product(factory.tuple("Green$0"))); + x12_upper.add(factory.tuple("LightState$2").product(factory.tuple("Light$1")).product(factory.tuple("Red$0"))); + x12_upper.add(factory.tuple("LightState$2").product(factory.tuple("Light$1")).product(factory.tuple("Yellow$0"))); + x12_upper.add(factory.tuple("LightState$2").product(factory.tuple("Light$1")).product(factory.tuple("Green$0"))); + x12_upper.add(factory.tuple("LightState$2").product(factory.tuple("Light$2")).product(factory.tuple("Red$0"))); + x12_upper.add(factory.tuple("LightState$2").product(factory.tuple("Light$2")).product(factory.tuple("Yellow$0"))); + x12_upper.add(factory.tuple("LightState$2").product(factory.tuple("Light$2")).product(factory.tuple("Green$0"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("Junction$0").product(factory.tuple("Light$0"))); + x13_upper.add(factory.tuple("Junction$0").product(factory.tuple("Light$1"))); + x13_upper.add(factory.tuple("Junction$0").product(factory.tuple("Light$2"))); + bounds.bound(x13, x13_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x16=x6.intersection(x7); + Formula x15=x16.no(); + Expression x19=x6.union(x7); + Expression x18=x19.intersection(x8); + Formula x17=x18.no(); + Variable x22=Variable.unary("Safe_this"); + Decls x21=x22.oneOf(x10); + Expression x26=x22.join(x12); + Expression x28=x19.union(x8); + Expression x27=x9.product(x28); + Formula x25=x26.in(x27); + Variable x31=Variable.unary(""); + Decls x30=x31.oneOf(x9); + Expression x34=x31.join(x26); + Formula x33=x34.one(); + Formula x35=x34.in(x28); + Formula x32=x33.and(x35); + Formula x29=x32.forAll(x30); + Formula x24=x25.and(x29); + Variable x38=Variable.unary(""); + Decls x37=x38.oneOf(x28); + Expression x40=x26.join(x38); + Formula x39=x40.in(x9); + Formula x36=x39.forAll(x37); + Formula x23=x24.and(x36); + Formula x20=x23.forAll(x21); + Expression x43=x12.join(Expression.UNIV); + Expression x42=x43.join(Expression.UNIV); + Formula x41=x42.in(x10); + Variable x47=Variable.unary("Safe_this"); + Decls x46=x47.oneOf(x11); + Expression x49=x47.join(x13); + Formula x48=x49.in(x9); + Formula x45=x48.forAll(x46); + Expression x51=x13.join(Expression.UNIV); + Formula x50=x51.in(x11); + Variable x56=Variable.unary("Safe_s"); + Decls x55=x56.oneOf(x10); + Variable x58=Variable.unary("Safe_s'"); + Decls x57=x58.oneOf(x10); + Variable x60=Variable.unary("Safe_j"); + Decls x59=x60.oneOf(x11); + Decls x54=x55.and(x57).and(x59); + Expression x66=x60.join(x13); + Expression x68=x56.join(x12); + Expression x67=x68.join(x6); + Expression x65=x66.difference(x67); + Formula x64=x65.lone(); + Variable x73=Variable.unary("trans_x"); + Expression x74=x60.join(x13); + Decls x72=x73.oneOf(x74); + Expression x78=x56.join(x12); + Expression x77=x73.join(x78); + Expression x80=x58.join(x12); + Expression x79=x73.join(x80); + Formula x76=x77.eq(x79); + Formula x75=x76.not(); + Expression x71=x75.comprehension(x72); + Formula x70=x71.lone(); + Variable x83=Variable.unary("trans_x"); + Expression x84=x60.join(x13); + Decls x82=x83.oneOf(x84); + Expression x89=x56.join(x12); + Expression x88=x83.join(x89); + Expression x91=x58.join(x12); + Expression x90=x83.join(x91); + Expression x87=x88.product(x90); + Expression x96=x28.product(Expression.UNIV); + Expression x104=Expression.INTS.union(x5); + Expression x103=x104.union(x28); + Expression x102=x103.union(x9); + Expression x101=x102.union(x10); + Expression x100=x101.union(x11); + Expression x99=x100.product(Expression.UNIV); + Expression x97=Expression.IDEN.intersection(x99); + Expression x95=x96.intersection(x97); + Expression x106=x6.product(x8); + Expression x94=x95.union(x106); + Expression x107=x8.product(x7); + Expression x93=x94.union(x107); + Expression x108=x7.product(x6); + Expression x92=x93.union(x108); + Formula x86=x87.in(x92); + Expression x113=x28.difference(x6); + Expression x112=x6.product(x113); + Formula x111=x87.in(x112); + Formula x110=x111.not(); + Expression x115=x60.join(x13); + Expression x117=x56.join(x12); + Expression x116=x117.join(x6); + Formula x114=x115.in(x116); + Formula x109=x110.or(x114); + Formula x85=x86.and(x109); + Formula x81=x85.forAll(x82); + Formula x69=x70.and(x81); + Formula x63=x64.and(x69); + Formula x62=x63.not(); + Expression x120=x60.join(x13); + Expression x122=x58.join(x12); + Expression x121=x122.join(x6); + Expression x119=x120.difference(x121); + Formula x118=x119.lone(); + Formula x61=x62.or(x118); + Formula x53=x61.forAll(x54); + Formula x52=x53.not(); + Formula x123=x0.eq(x0); + Formula x124=x1.eq(x1); + Formula x125=x2.eq(x2); + Formula x126=x3.eq(x3); + Formula x127=x4.eq(x4); + Formula x128=x5.eq(x5); + Formula x129=x6.eq(x6); + Formula x130=x7.eq(x7); + Formula x131=x8.eq(x8); + Formula x132=x9.eq(x9); + Formula x133=x10.eq(x10); + Formula x134=x11.eq(x11); + Formula x135=x12.eq(x12); + Formula x136=x13.eq(x13); + Formula x14=Formula.compose(FormulaOperator.AND, x15, x17, x20, x41, x45, x50, x52, x123, x124, x125, x126, x127, x128, x129, x130, x131, x132, x133, x134, x135, x136); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x14,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter5/addressBookAddLocalCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter5/addressBookAddLocalCheck.java new file mode 100644 index 0000000..8376e18 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter5/addressBookAddLocalCheck.java @@ -0,0 +1,233 @@ +package kodkod.examples.models.softwareAbstractions.chapter5; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "addressBook", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 1, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 2, + TransitiveClosure = 3, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 2, + OrderedRelations = 0, + Constraints = 4 +) + + + +public final class addressBookAddLocalCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Addr"); + Relation x7 = Relation.unary("this/Name"); + Relation x8 = Relation.unary("this/Book"); + Relation x9 = Relation.nary("this/Book.addr", 3); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Book$0", + "Book$1", "Target$0", "Target$1", "Target$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Target$0")); + x6_upper.add(factory.tuple("Target$1")); + x6_upper.add(factory.tuple("Target$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Target$0")); + x7_upper.add(factory.tuple("Target$1")); + x7_upper.add(factory.tuple("Target$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Book$0")); + x8_upper.add(factory.tuple("Book$1")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(3); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + bounds.bound(x9, x9_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x12=x6.intersection(x7); + Formula x11=x12.no(); + Variable x15=Variable.unary("addLocal_this"); + Decls x14=x15.oneOf(x8); + Expression x17=x15.join(x9); + Expression x19=x6.union(x7); + Expression x18=x7.product(x19); + Formula x16=x17.in(x18); + Formula x13=x16.forAll(x14); + Expression x22=x9.join(Expression.UNIV); + Expression x21=x22.join(Expression.UNIV); + Formula x20=x21.in(x8); + Variable x26=Variable.unary("addLocal_b"); + Decls x25=x26.oneOf(x8); + Variable x29=Variable.unary("addLocal_n"); + Decls x28=x29.oneOf(x7); + Expression x34=x26.join(x9); + Expression x33=x34.closure(); + Expression x32=x29.join(x33); + Formula x31=x29.in(x32); + Formula x30=x31.not(); + Formula x27=x30.forAll(x28); + Formula x24=x27.forAll(x25); + Variable x39=Variable.unary("addLocal_b"); + Decls x38=x39.oneOf(x8); + Variable x41=Variable.unary("addLocal_b'"); + Decls x40=x41.oneOf(x8); + Variable x43=Variable.unary("addLocal_n"); + Decls x42=x43.oneOf(x7); + Variable x45=Variable.unary("addLocal_n'"); + Decls x44=x45.oneOf(x7); + Variable x47=Variable.unary("addLocal_t"); + Decls x46=x47.oneOf(x19); + Decls x37=x38.and(x40).and(x42).and(x44).and(x46); + Expression x52=x41.join(x9); + Expression x54=x39.join(x9); + Expression x55=x43.product(x47); + Expression x53=x54.union(x55); + Formula x51=x52.eq(x53); + Formula x57=x43.eq(x45); + Formula x56=x57.not(); + Formula x50=x51.and(x56); + Formula x49=x50.not(); + Expression x62=x39.join(x9); + Expression x61=x62.closure(); + Expression x60=x45.join(x61); + Expression x59=x60.intersection(x6); + Expression x66=x41.join(x9); + Expression x65=x66.closure(); + Expression x64=x45.join(x65); + Expression x63=x64.intersection(x6); + Formula x58=x59.eq(x63); + Formula x48=x49.or(x58); + Formula x36=x48.forAll(x37); + Formula x35=x36.not(); + Formula x67=x0.eq(x0); + Formula x68=x1.eq(x1); + Formula x69=x2.eq(x2); + Formula x70=x3.eq(x3); + Formula x71=x4.eq(x4); + Formula x72=x5.eq(x5); + Formula x73=x6.eq(x6); + Formula x74=x7.eq(x7); + Formula x75=x8.eq(x8); + Formula x76=x9.eq(x9); + Formula x10=Formula.compose(FormulaOperator.AND, x11, x13, x20, x24, x35, x67, x68, x69, x70, x71, x72, x73, x74, x75, x76); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x10,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter5/addressBookAddRun.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter5/addressBookAddRun.java new file mode 100644 index 0000000..3ac2be1 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter5/addressBookAddRun.java @@ -0,0 +1,215 @@ +package kodkod.examples.models.softwareAbstractions.chapter5; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "addressBook", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 1, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =2, + NestedRelationalJoins = 2, + TransitiveClosure = 1, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 2, + OrderedRelations = 0, + Constraints = 4 +) + + +public final class addressBookAddRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Addr"); + Relation x7 = Relation.unary("this/Name"); + Relation x8 = Relation.unary("this/Book"); + Relation x9 = Relation.nary("this/Book.addr", 3); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Book$0", + "Book$1", "Target$0", "Target$1", "Target$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Target$0")); + x6_upper.add(factory.tuple("Target$1")); + x6_upper.add(factory.tuple("Target$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Target$0")); + x7_upper.add(factory.tuple("Target$1")); + x7_upper.add(factory.tuple("Target$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Book$0")); + x8_upper.add(factory.tuple("Book$1")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(3); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x9_upper.add(factory.tuple("Book$0").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$0"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$1"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$0")).product(factory.tuple("Target$2"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$0"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$1"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$1")).product(factory.tuple("Target$2"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$0"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$1"))); + x9_upper.add(factory.tuple("Book$1").product(factory.tuple("Target$2")).product(factory.tuple("Target$2"))); + bounds.bound(x9, x9_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x12=x6.intersection(x7); + Formula x11=x12.no(); + Variable x15=Variable.unary("add_this"); + Decls x14=x15.oneOf(x8); + Expression x17=x15.join(x9); + Expression x19=x6.union(x7); + Expression x18=x7.product(x19); + Formula x16=x17.in(x18); + Formula x13=x16.forAll(x14); + Expression x22=x9.join(Expression.UNIV); + Expression x21=x22.join(Expression.UNIV); + Formula x20=x21.in(x8); + Variable x26=Variable.unary("add_b"); + Decls x25=x26.oneOf(x8); + Variable x29=Variable.unary("add_n"); + Decls x28=x29.oneOf(x7); + Expression x34=x26.join(x9); + Expression x33=x34.closure(); + Expression x32=x29.join(x33); + Formula x31=x29.in(x32); + Formula x30=x31.not(); + Formula x27=x30.forAll(x28); + Formula x24=x27.forAll(x25); + Variable x38=Variable.unary("add_b"); + Decls x37=x38.oneOf(x8); + Variable x40=Variable.unary("add_b'"); + Decls x39=x40.oneOf(x8); + Variable x42=Variable.unary("add_n"); + Decls x41=x42.oneOf(x7); + Variable x44=Variable.unary("add_t"); + Decls x43=x44.oneOf(x19); + Decls x36=x37.and(x39).and(x41).and(x43); + Expression x46=x40.join(x9); + Expression x48=x38.join(x9); + Expression x49=x42.product(x44); + Expression x47=x48.union(x49); + Formula x45=x46.eq(x47); + Formula x35=x45.forSome(x36); + Formula x50=x0.eq(x0); + Formula x51=x1.eq(x1); + Formula x52=x2.eq(x2); + Formula x53=x3.eq(x3); + Formula x54=x4.eq(x4); + Formula x55=x5.eq(x5); + Formula x56=x6.eq(x6); + Formula x57=x7.eq(x7); + Formula x58=x8.eq(x8); + Formula x59=x9.eq(x9); + Formula x10=Formula.compose(FormulaOperator.AND, x11, x13, x20, x24, x35, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x10,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter5/sets2ClosedCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter5/sets2ClosedCheck.java new file mode 100644 index 0000000..19741a2 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter5/sets2ClosedCheck.java @@ -0,0 +1,274 @@ +package kodkod.examples.models.softwareAbstractions.chapter5; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "addressBook", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 3, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 2, + OrderedRelations = 0, + Constraints = 3 +) + + +public final class sets2ClosedCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Set"); + Relation x7 = Relation.unary("this/Element"); + Relation x8 = Relation.nary("this/Set.elements", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Element$0", + "Element$1", "Element$2", "Element$3", "Set$0", "Set$1", "Set$10", + "Set$11", "Set$12", "Set$13", "Set$14", "Set$15", "Set$2", + "Set$3", "Set$4", "Set$5", "Set$6", "Set$7", "Set$8", + "Set$9" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Set$0")); + x6_upper.add(factory.tuple("Set$1")); + x6_upper.add(factory.tuple("Set$2")); + x6_upper.add(factory.tuple("Set$3")); + x6_upper.add(factory.tuple("Set$4")); + x6_upper.add(factory.tuple("Set$5")); + x6_upper.add(factory.tuple("Set$6")); + x6_upper.add(factory.tuple("Set$7")); + x6_upper.add(factory.tuple("Set$8")); + x6_upper.add(factory.tuple("Set$9")); + x6_upper.add(factory.tuple("Set$10")); + x6_upper.add(factory.tuple("Set$11")); + x6_upper.add(factory.tuple("Set$12")); + x6_upper.add(factory.tuple("Set$13")); + x6_upper.add(factory.tuple("Set$14")); + x6_upper.add(factory.tuple("Set$15")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Element$0")); + x7_upper.add(factory.tuple("Element$1")); + x7_upper.add(factory.tuple("Element$2")); + x7_upper.add(factory.tuple("Element$3")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(2); + x8_upper.add(factory.tuple("Set$0").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$0").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$0").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$0").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$1").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$1").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$1").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$1").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$2").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$2").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$2").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$2").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$3").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$3").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$3").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$3").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$4").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$4").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$4").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$4").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$5").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$5").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$5").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$5").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$6").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$6").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$6").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$6").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$7").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$7").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$7").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$7").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$8").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$8").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$8").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$8").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$9").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$9").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$9").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$9").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$10").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$10").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$10").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$10").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$11").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$11").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$11").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$11").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$12").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$12").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$12").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$12").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$13").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$13").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$13").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$13").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$14").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$14").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$14").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$14").product(factory.tuple("Element$3"))); + x8_upper.add(factory.tuple("Set$15").product(factory.tuple("Element$0"))); + x8_upper.add(factory.tuple("Set$15").product(factory.tuple("Element$1"))); + x8_upper.add(factory.tuple("Set$15").product(factory.tuple("Element$2"))); + x8_upper.add(factory.tuple("Set$15").product(factory.tuple("Element$3"))); + bounds.bound(x8, x8_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x12=Variable.unary("Closed_this"); + Decls x11=x12.oneOf(x6); + Expression x14=x12.join(x8); + Formula x13=x14.in(x7); + Formula x10=x13.forAll(x11); + Expression x16=x8.join(Expression.UNIV); + Formula x15=x16.in(x6); + Variable x20=Variable.unary("Closed_s"); + Decls x19=x20.oneOf(x6); + Expression x22=x20.join(x8); + Formula x21=x22.no(); + Formula x18=x21.forSome(x19); + Variable x26=Variable.unary("Closed_s"); + Decls x25=x26.oneOf(x6); + Variable x28=Variable.unary("Closed_e"); + Decls x27=x28.oneOf(x7); + Decls x24=x25.and(x27); + Variable x31=Variable.unary("Closed_s'"); + Decls x30=x31.oneOf(x6); + Expression x33=x31.join(x8); + Expression x35=x26.join(x8); + Expression x34=x35.union(x28); + Formula x32=x33.eq(x34); + Formula x29=x32.forSome(x30); + Formula x23=x29.forAll(x24); + Variable x40=Variable.unary("Closed_s0"); + Decls x39=x40.oneOf(x6); + Variable x42=Variable.unary("Closed_s1"); + Decls x41=x42.oneOf(x6); + Decls x38=x39.and(x41); + Variable x45=Variable.unary("Closed_s2"); + Decls x44=x45.oneOf(x6); + Expression x47=x45.join(x8); + Expression x49=x40.join(x8); + Expression x50=x42.join(x8); + Expression x48=x49.union(x50); + Formula x46=x47.eq(x48); + Formula x43=x46.forSome(x44); + Formula x37=x43.forAll(x38); + Formula x36=x37.not(); + Formula x51=x0.eq(x0); + Formula x52=x1.eq(x1); + Formula x53=x2.eq(x2); + Formula x54=x3.eq(x3); + Formula x55=x4.eq(x4); + Formula x56=x5.eq(x5); + Formula x57=x6.eq(x6); + Formula x58=x7.eq(x7); + Formula x59=x8.eq(x8); + Formula x9=Formula.compose(FormulaOperator.AND, x10, x15, x18, x23, x36, x51, x52, x53, x54, x55, x56, x57, x58, x59); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x9,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/hotel4NoBadEntryCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/hotel4NoBadEntryCheck.java new file mode 100644 index 0000000..1c42edc --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/hotel4NoBadEntryCheck.java @@ -0,0 +1,1578 @@ +package kodkod.examples.models.softwareAbstractions.chapter6; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "hotel4", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 9, + TernaryRelations =4, + NaryRelations = 0, + HierarchicalTypes =4, + NestedRelationalJoins = 8, + TransitiveClosure = 4, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 26, + OrderedRelations = 2, + Constraints = 30 +) + + + +public final class hotel4NoBadEntryCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Key"); + Relation x7 = Relation.unary("this/Time"); + Relation x8 = Relation.unary("this/Room"); + Relation x9 = Relation.unary("this/FrontDesk"); + Relation x10 = Relation.unary("this/Guest"); + Relation x11 = Relation.unary("this/Entry"); + Relation x12 = Relation.unary("this/Checkin"); + Relation x13 = Relation.unary("this/Checkout"); + Relation x14 = Relation.unary("to/Ord"); + Relation x15 = Relation.unary("ko/Ord"); + Relation x16 = Relation.nary("this/Room.keys", 2); + Relation x17 = Relation.nary("this/Room.currentKey", 3); + Relation x18 = Relation.nary("this/FrontDesk.lastKey", 3); + Relation x19 = Relation.nary("this/FrontDesk.occupant", 3); + Relation x20 = Relation.nary("this/Guest.keys", 3); + Relation x21 = Relation.nary("this/Event.pre", 2); + Relation x22 = Relation.nary("this/Event.post", 2); + Relation x23 = Relation.nary("this/Event.guest", 2); + Relation x24 = Relation.nary("this/RoomKeyEvent.room", 2); + Relation x25 = Relation.nary("this/RoomKeyEvent.key", 2); + Relation x26 = Relation.unary("to/Ord.First"); + Relation x27 = Relation.nary("to/Ord.Next", 2); + Relation x28 = Relation.unary("ko/Ord.First"); + Relation x29 = Relation.nary("ko/Ord.Next", 2); + Relation x30 = Relation.unary(""); + Relation x31 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Event$0", + "Event$1", "Event$2", "Event$3", "Event$4", "Event$5", "Event$6", + "Event$7", "FrontDesk$0", "Guest$0", "Guest$1", "Guest$2", "Key$0", + "Key$1", "Key$2", "Key$3", "Key$4", "Room$0", "Room$1", + "Room$2", "Time$0", "Time$1", "Time$2", "Time$3", "Time$4", + "Time$5", "Time$6", "Time$7", "Time$8", "ko/Ord$0", "to/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + x4_upper.add(factory.tuple("4")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Key$0")); + x6_upper.add(factory.tuple("Key$1")); + x6_upper.add(factory.tuple("Key$2")); + x6_upper.add(factory.tuple("Key$3")); + x6_upper.add(factory.tuple("Key$4")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Time$0")); + x7_upper.add(factory.tuple("Time$1")); + x7_upper.add(factory.tuple("Time$2")); + x7_upper.add(factory.tuple("Time$3")); + x7_upper.add(factory.tuple("Time$4")); + x7_upper.add(factory.tuple("Time$5")); + x7_upper.add(factory.tuple("Time$6")); + x7_upper.add(factory.tuple("Time$7")); + x7_upper.add(factory.tuple("Time$8")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Room$0")); + x8_upper.add(factory.tuple("Room$1")); + x8_upper.add(factory.tuple("Room$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("FrontDesk$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Guest$0")); + x10_upper.add(factory.tuple("Guest$1")); + x10_upper.add(factory.tuple("Guest$2")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("Event$0")); + x11_upper.add(factory.tuple("Event$1")); + x11_upper.add(factory.tuple("Event$2")); + x11_upper.add(factory.tuple("Event$3")); + x11_upper.add(factory.tuple("Event$4")); + x11_upper.add(factory.tuple("Event$5")); + x11_upper.add(factory.tuple("Event$6")); + x11_upper.add(factory.tuple("Event$7")); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(1); + x12_upper.add(factory.tuple("Event$0")); + x12_upper.add(factory.tuple("Event$1")); + x12_upper.add(factory.tuple("Event$2")); + x12_upper.add(factory.tuple("Event$3")); + x12_upper.add(factory.tuple("Event$4")); + x12_upper.add(factory.tuple("Event$5")); + x12_upper.add(factory.tuple("Event$6")); + x12_upper.add(factory.tuple("Event$7")); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Event$0")); + x13_upper.add(factory.tuple("Event$1")); + x13_upper.add(factory.tuple("Event$2")); + x13_upper.add(factory.tuple("Event$3")); + x13_upper.add(factory.tuple("Event$4")); + x13_upper.add(factory.tuple("Event$5")); + x13_upper.add(factory.tuple("Event$6")); + x13_upper.add(factory.tuple("Event$7")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(1); + x14_upper.add(factory.tuple("to/Ord$0")); + bounds.boundExactly(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("ko/Ord$0")); + bounds.boundExactly(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0"))); + x16_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1"))); + x16_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2"))); + x16_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3"))); + x16_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4"))); + x16_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0"))); + x16_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1"))); + x16_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2"))); + x16_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3"))); + x16_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4"))); + x16_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0"))); + x16_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1"))); + x16_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2"))); + x16_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3"))); + x16_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(3); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x17_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x18_upper.add(factory.tuple("Room$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(3); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$0")).product(factory.tuple("Time$0"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$0")).product(factory.tuple("Time$1"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$0")).product(factory.tuple("Time$2"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$0")).product(factory.tuple("Time$3"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$0")).product(factory.tuple("Time$4"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$0")).product(factory.tuple("Time$5"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$0")).product(factory.tuple("Time$6"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$0")).product(factory.tuple("Time$7"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$0")).product(factory.tuple("Time$8"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$1")).product(factory.tuple("Time$0"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$1")).product(factory.tuple("Time$1"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$1")).product(factory.tuple("Time$2"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$1")).product(factory.tuple("Time$3"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$1")).product(factory.tuple("Time$4"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$1")).product(factory.tuple("Time$5"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$1")).product(factory.tuple("Time$6"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$1")).product(factory.tuple("Time$7"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$1")).product(factory.tuple("Time$8"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$2")).product(factory.tuple("Time$0"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$2")).product(factory.tuple("Time$1"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$2")).product(factory.tuple("Time$2"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$2")).product(factory.tuple("Time$3"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$2")).product(factory.tuple("Time$4"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$2")).product(factory.tuple("Time$5"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$2")).product(factory.tuple("Time$6"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$2")).product(factory.tuple("Time$7"))); + x19_upper.add(factory.tuple("Room$0").product(factory.tuple("Guest$2")).product(factory.tuple("Time$8"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$0")).product(factory.tuple("Time$0"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$0")).product(factory.tuple("Time$1"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$0")).product(factory.tuple("Time$2"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$0")).product(factory.tuple("Time$3"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$0")).product(factory.tuple("Time$4"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$0")).product(factory.tuple("Time$5"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$0")).product(factory.tuple("Time$6"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$0")).product(factory.tuple("Time$7"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$0")).product(factory.tuple("Time$8"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$1")).product(factory.tuple("Time$0"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$1")).product(factory.tuple("Time$1"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$1")).product(factory.tuple("Time$2"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$1")).product(factory.tuple("Time$3"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$1")).product(factory.tuple("Time$4"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$1")).product(factory.tuple("Time$5"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$1")).product(factory.tuple("Time$6"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$1")).product(factory.tuple("Time$7"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$1")).product(factory.tuple("Time$8"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$2")).product(factory.tuple("Time$0"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$2")).product(factory.tuple("Time$1"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$2")).product(factory.tuple("Time$2"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$2")).product(factory.tuple("Time$3"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$2")).product(factory.tuple("Time$4"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$2")).product(factory.tuple("Time$5"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$2")).product(factory.tuple("Time$6"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$2")).product(factory.tuple("Time$7"))); + x19_upper.add(factory.tuple("Room$1").product(factory.tuple("Guest$2")).product(factory.tuple("Time$8"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$0")).product(factory.tuple("Time$0"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$0")).product(factory.tuple("Time$1"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$0")).product(factory.tuple("Time$2"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$0")).product(factory.tuple("Time$3"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$0")).product(factory.tuple("Time$4"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$0")).product(factory.tuple("Time$5"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$0")).product(factory.tuple("Time$6"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$0")).product(factory.tuple("Time$7"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$0")).product(factory.tuple("Time$8"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$1")).product(factory.tuple("Time$0"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$1")).product(factory.tuple("Time$1"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$1")).product(factory.tuple("Time$2"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$1")).product(factory.tuple("Time$3"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$1")).product(factory.tuple("Time$4"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$1")).product(factory.tuple("Time$5"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$1")).product(factory.tuple("Time$6"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$1")).product(factory.tuple("Time$7"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$1")).product(factory.tuple("Time$8"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$2")).product(factory.tuple("Time$0"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$2")).product(factory.tuple("Time$1"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$2")).product(factory.tuple("Time$2"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$2")).product(factory.tuple("Time$3"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$2")).product(factory.tuple("Time$4"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$2")).product(factory.tuple("Time$5"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$2")).product(factory.tuple("Time$6"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$2")).product(factory.tuple("Time$7"))); + x19_upper.add(factory.tuple("Room$2").product(factory.tuple("Guest$2")).product(factory.tuple("Time$8"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(3); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$0").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$1").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$0")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$1")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$2")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$3")).product(factory.tuple("Time$8"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$0"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$1"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$2"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$3"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$4"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$5"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$6"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$7"))); + x20_upper.add(factory.tuple("Guest$2").product(factory.tuple("Key$4")).product(factory.tuple("Time$8"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$0"))); + x21_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$1"))); + x21_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$2"))); + x21_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$3"))); + x21_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$4"))); + x21_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$5"))); + x21_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$6"))); + x21_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$7"))); + x21_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$8"))); + x21_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$0"))); + x21_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$1"))); + x21_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$2"))); + x21_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$3"))); + x21_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$4"))); + x21_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$5"))); + x21_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$6"))); + x21_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$7"))); + x21_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$8"))); + x21_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$0"))); + x21_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$1"))); + x21_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$2"))); + x21_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$3"))); + x21_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$4"))); + x21_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$5"))); + x21_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$6"))); + x21_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$7"))); + x21_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$8"))); + x21_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$0"))); + x21_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$1"))); + x21_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$2"))); + x21_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$3"))); + x21_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$4"))); + x21_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$5"))); + x21_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$6"))); + x21_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$7"))); + x21_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$8"))); + x21_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$0"))); + x21_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$1"))); + x21_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$2"))); + x21_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$3"))); + x21_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$4"))); + x21_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$5"))); + x21_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$6"))); + x21_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$7"))); + x21_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$8"))); + x21_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$0"))); + x21_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$1"))); + x21_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$2"))); + x21_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$3"))); + x21_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$4"))); + x21_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$5"))); + x21_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$6"))); + x21_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$7"))); + x21_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$8"))); + x21_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$0"))); + x21_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$1"))); + x21_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$2"))); + x21_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$3"))); + x21_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$4"))); + x21_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$5"))); + x21_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$6"))); + x21_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$7"))); + x21_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$8"))); + x21_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$0"))); + x21_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$1"))); + x21_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$2"))); + x21_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$3"))); + x21_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$4"))); + x21_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$5"))); + x21_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$6"))); + x21_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$7"))); + x21_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$8"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(2); + x22_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$0"))); + x22_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$1"))); + x22_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$2"))); + x22_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$3"))); + x22_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$4"))); + x22_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$5"))); + x22_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$6"))); + x22_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$7"))); + x22_upper.add(factory.tuple("Event$0").product(factory.tuple("Time$8"))); + x22_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$0"))); + x22_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$1"))); + x22_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$2"))); + x22_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$3"))); + x22_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$4"))); + x22_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$5"))); + x22_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$6"))); + x22_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$7"))); + x22_upper.add(factory.tuple("Event$1").product(factory.tuple("Time$8"))); + x22_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$0"))); + x22_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$1"))); + x22_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$2"))); + x22_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$3"))); + x22_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$4"))); + x22_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$5"))); + x22_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$6"))); + x22_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$7"))); + x22_upper.add(factory.tuple("Event$2").product(factory.tuple("Time$8"))); + x22_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$0"))); + x22_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$1"))); + x22_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$2"))); + x22_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$3"))); + x22_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$4"))); + x22_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$5"))); + x22_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$6"))); + x22_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$7"))); + x22_upper.add(factory.tuple("Event$3").product(factory.tuple("Time$8"))); + x22_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$0"))); + x22_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$1"))); + x22_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$2"))); + x22_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$3"))); + x22_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$4"))); + x22_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$5"))); + x22_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$6"))); + x22_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$7"))); + x22_upper.add(factory.tuple("Event$4").product(factory.tuple("Time$8"))); + x22_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$0"))); + x22_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$1"))); + x22_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$2"))); + x22_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$3"))); + x22_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$4"))); + x22_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$5"))); + x22_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$6"))); + x22_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$7"))); + x22_upper.add(factory.tuple("Event$5").product(factory.tuple("Time$8"))); + x22_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$0"))); + x22_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$1"))); + x22_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$2"))); + x22_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$3"))); + x22_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$4"))); + x22_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$5"))); + x22_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$6"))); + x22_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$7"))); + x22_upper.add(factory.tuple("Event$6").product(factory.tuple("Time$8"))); + x22_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$0"))); + x22_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$1"))); + x22_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$2"))); + x22_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$3"))); + x22_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$4"))); + x22_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$5"))); + x22_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$6"))); + x22_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$7"))); + x22_upper.add(factory.tuple("Event$7").product(factory.tuple("Time$8"))); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(2); + x23_upper.add(factory.tuple("Event$0").product(factory.tuple("Guest$0"))); + x23_upper.add(factory.tuple("Event$0").product(factory.tuple("Guest$1"))); + x23_upper.add(factory.tuple("Event$0").product(factory.tuple("Guest$2"))); + x23_upper.add(factory.tuple("Event$1").product(factory.tuple("Guest$0"))); + x23_upper.add(factory.tuple("Event$1").product(factory.tuple("Guest$1"))); + x23_upper.add(factory.tuple("Event$1").product(factory.tuple("Guest$2"))); + x23_upper.add(factory.tuple("Event$2").product(factory.tuple("Guest$0"))); + x23_upper.add(factory.tuple("Event$2").product(factory.tuple("Guest$1"))); + x23_upper.add(factory.tuple("Event$2").product(factory.tuple("Guest$2"))); + x23_upper.add(factory.tuple("Event$3").product(factory.tuple("Guest$0"))); + x23_upper.add(factory.tuple("Event$3").product(factory.tuple("Guest$1"))); + x23_upper.add(factory.tuple("Event$3").product(factory.tuple("Guest$2"))); + x23_upper.add(factory.tuple("Event$4").product(factory.tuple("Guest$0"))); + x23_upper.add(factory.tuple("Event$4").product(factory.tuple("Guest$1"))); + x23_upper.add(factory.tuple("Event$4").product(factory.tuple("Guest$2"))); + x23_upper.add(factory.tuple("Event$5").product(factory.tuple("Guest$0"))); + x23_upper.add(factory.tuple("Event$5").product(factory.tuple("Guest$1"))); + x23_upper.add(factory.tuple("Event$5").product(factory.tuple("Guest$2"))); + x23_upper.add(factory.tuple("Event$6").product(factory.tuple("Guest$0"))); + x23_upper.add(factory.tuple("Event$6").product(factory.tuple("Guest$1"))); + x23_upper.add(factory.tuple("Event$6").product(factory.tuple("Guest$2"))); + x23_upper.add(factory.tuple("Event$7").product(factory.tuple("Guest$0"))); + x23_upper.add(factory.tuple("Event$7").product(factory.tuple("Guest$1"))); + x23_upper.add(factory.tuple("Event$7").product(factory.tuple("Guest$2"))); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(2); + x24_upper.add(factory.tuple("Event$0").product(factory.tuple("Room$0"))); + x24_upper.add(factory.tuple("Event$0").product(factory.tuple("Room$1"))); + x24_upper.add(factory.tuple("Event$0").product(factory.tuple("Room$2"))); + x24_upper.add(factory.tuple("Event$1").product(factory.tuple("Room$0"))); + x24_upper.add(factory.tuple("Event$1").product(factory.tuple("Room$1"))); + x24_upper.add(factory.tuple("Event$1").product(factory.tuple("Room$2"))); + x24_upper.add(factory.tuple("Event$2").product(factory.tuple("Room$0"))); + x24_upper.add(factory.tuple("Event$2").product(factory.tuple("Room$1"))); + x24_upper.add(factory.tuple("Event$2").product(factory.tuple("Room$2"))); + x24_upper.add(factory.tuple("Event$3").product(factory.tuple("Room$0"))); + x24_upper.add(factory.tuple("Event$3").product(factory.tuple("Room$1"))); + x24_upper.add(factory.tuple("Event$3").product(factory.tuple("Room$2"))); + x24_upper.add(factory.tuple("Event$4").product(factory.tuple("Room$0"))); + x24_upper.add(factory.tuple("Event$4").product(factory.tuple("Room$1"))); + x24_upper.add(factory.tuple("Event$4").product(factory.tuple("Room$2"))); + x24_upper.add(factory.tuple("Event$5").product(factory.tuple("Room$0"))); + x24_upper.add(factory.tuple("Event$5").product(factory.tuple("Room$1"))); + x24_upper.add(factory.tuple("Event$5").product(factory.tuple("Room$2"))); + x24_upper.add(factory.tuple("Event$6").product(factory.tuple("Room$0"))); + x24_upper.add(factory.tuple("Event$6").product(factory.tuple("Room$1"))); + x24_upper.add(factory.tuple("Event$6").product(factory.tuple("Room$2"))); + x24_upper.add(factory.tuple("Event$7").product(factory.tuple("Room$0"))); + x24_upper.add(factory.tuple("Event$7").product(factory.tuple("Room$1"))); + x24_upper.add(factory.tuple("Event$7").product(factory.tuple("Room$2"))); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(2); + x25_upper.add(factory.tuple("Event$0").product(factory.tuple("Key$0"))); + x25_upper.add(factory.tuple("Event$0").product(factory.tuple("Key$1"))); + x25_upper.add(factory.tuple("Event$0").product(factory.tuple("Key$2"))); + x25_upper.add(factory.tuple("Event$0").product(factory.tuple("Key$3"))); + x25_upper.add(factory.tuple("Event$0").product(factory.tuple("Key$4"))); + x25_upper.add(factory.tuple("Event$1").product(factory.tuple("Key$0"))); + x25_upper.add(factory.tuple("Event$1").product(factory.tuple("Key$1"))); + x25_upper.add(factory.tuple("Event$1").product(factory.tuple("Key$2"))); + x25_upper.add(factory.tuple("Event$1").product(factory.tuple("Key$3"))); + x25_upper.add(factory.tuple("Event$1").product(factory.tuple("Key$4"))); + x25_upper.add(factory.tuple("Event$2").product(factory.tuple("Key$0"))); + x25_upper.add(factory.tuple("Event$2").product(factory.tuple("Key$1"))); + x25_upper.add(factory.tuple("Event$2").product(factory.tuple("Key$2"))); + x25_upper.add(factory.tuple("Event$2").product(factory.tuple("Key$3"))); + x25_upper.add(factory.tuple("Event$2").product(factory.tuple("Key$4"))); + x25_upper.add(factory.tuple("Event$3").product(factory.tuple("Key$0"))); + x25_upper.add(factory.tuple("Event$3").product(factory.tuple("Key$1"))); + x25_upper.add(factory.tuple("Event$3").product(factory.tuple("Key$2"))); + x25_upper.add(factory.tuple("Event$3").product(factory.tuple("Key$3"))); + x25_upper.add(factory.tuple("Event$3").product(factory.tuple("Key$4"))); + x25_upper.add(factory.tuple("Event$4").product(factory.tuple("Key$0"))); + x25_upper.add(factory.tuple("Event$4").product(factory.tuple("Key$1"))); + x25_upper.add(factory.tuple("Event$4").product(factory.tuple("Key$2"))); + x25_upper.add(factory.tuple("Event$4").product(factory.tuple("Key$3"))); + x25_upper.add(factory.tuple("Event$4").product(factory.tuple("Key$4"))); + x25_upper.add(factory.tuple("Event$5").product(factory.tuple("Key$0"))); + x25_upper.add(factory.tuple("Event$5").product(factory.tuple("Key$1"))); + x25_upper.add(factory.tuple("Event$5").product(factory.tuple("Key$2"))); + x25_upper.add(factory.tuple("Event$5").product(factory.tuple("Key$3"))); + x25_upper.add(factory.tuple("Event$5").product(factory.tuple("Key$4"))); + x25_upper.add(factory.tuple("Event$6").product(factory.tuple("Key$0"))); + x25_upper.add(factory.tuple("Event$6").product(factory.tuple("Key$1"))); + x25_upper.add(factory.tuple("Event$6").product(factory.tuple("Key$2"))); + x25_upper.add(factory.tuple("Event$6").product(factory.tuple("Key$3"))); + x25_upper.add(factory.tuple("Event$6").product(factory.tuple("Key$4"))); + x25_upper.add(factory.tuple("Event$7").product(factory.tuple("Key$0"))); + x25_upper.add(factory.tuple("Event$7").product(factory.tuple("Key$1"))); + x25_upper.add(factory.tuple("Event$7").product(factory.tuple("Key$2"))); + x25_upper.add(factory.tuple("Event$7").product(factory.tuple("Key$3"))); + x25_upper.add(factory.tuple("Event$7").product(factory.tuple("Key$4"))); + bounds.bound(x25, x25_upper); + + TupleSet x26_upper = factory.noneOf(1); + x26_upper.add(factory.tuple("Time$0")); + x26_upper.add(factory.tuple("Time$1")); + x26_upper.add(factory.tuple("Time$2")); + x26_upper.add(factory.tuple("Time$3")); + x26_upper.add(factory.tuple("Time$4")); + x26_upper.add(factory.tuple("Time$5")); + x26_upper.add(factory.tuple("Time$6")); + x26_upper.add(factory.tuple("Time$7")); + x26_upper.add(factory.tuple("Time$8")); + bounds.bound(x26, x26_upper); + + TupleSet x27_upper = factory.noneOf(2); + x27_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$0"))); + x27_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$1"))); + x27_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$2"))); + x27_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$3"))); + x27_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$4"))); + x27_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$5"))); + x27_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$6"))); + x27_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$7"))); + x27_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$8"))); + x27_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$0"))); + x27_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$1"))); + x27_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$2"))); + x27_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$3"))); + x27_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$4"))); + x27_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$5"))); + x27_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$6"))); + x27_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$7"))); + x27_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$8"))); + x27_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$0"))); + x27_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$1"))); + x27_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$2"))); + x27_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$3"))); + x27_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$4"))); + x27_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$5"))); + x27_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$6"))); + x27_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$7"))); + x27_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$8"))); + x27_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$0"))); + x27_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$1"))); + x27_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$2"))); + x27_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$3"))); + x27_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$4"))); + x27_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$5"))); + x27_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$6"))); + x27_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$7"))); + x27_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$8"))); + x27_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$0"))); + x27_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$1"))); + x27_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$2"))); + x27_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$3"))); + x27_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$4"))); + x27_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$5"))); + x27_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$6"))); + x27_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$7"))); + x27_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$8"))); + x27_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$0"))); + x27_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$1"))); + x27_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$2"))); + x27_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$3"))); + x27_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$4"))); + x27_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$5"))); + x27_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$6"))); + x27_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$7"))); + x27_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$8"))); + x27_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$0"))); + x27_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$1"))); + x27_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$2"))); + x27_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$3"))); + x27_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$4"))); + x27_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$5"))); + x27_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$6"))); + x27_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$7"))); + x27_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$8"))); + x27_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$0"))); + x27_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$1"))); + x27_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$2"))); + x27_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$3"))); + x27_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$4"))); + x27_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$5"))); + x27_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$6"))); + x27_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$7"))); + x27_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$8"))); + x27_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$0"))); + x27_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$1"))); + x27_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$2"))); + x27_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$3"))); + x27_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$4"))); + x27_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$5"))); + x27_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$6"))); + x27_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$7"))); + x27_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$8"))); + bounds.bound(x27, x27_upper); + + TupleSet x28_upper = factory.noneOf(1); + x28_upper.add(factory.tuple("Key$0")); + x28_upper.add(factory.tuple("Key$1")); + x28_upper.add(factory.tuple("Key$2")); + x28_upper.add(factory.tuple("Key$3")); + x28_upper.add(factory.tuple("Key$4")); + bounds.bound(x28, x28_upper); + + TupleSet x29_upper = factory.noneOf(2); + x29_upper.add(factory.tuple("Key$0").product(factory.tuple("Key$0"))); + x29_upper.add(factory.tuple("Key$0").product(factory.tuple("Key$1"))); + x29_upper.add(factory.tuple("Key$0").product(factory.tuple("Key$2"))); + x29_upper.add(factory.tuple("Key$0").product(factory.tuple("Key$3"))); + x29_upper.add(factory.tuple("Key$0").product(factory.tuple("Key$4"))); + x29_upper.add(factory.tuple("Key$1").product(factory.tuple("Key$0"))); + x29_upper.add(factory.tuple("Key$1").product(factory.tuple("Key$1"))); + x29_upper.add(factory.tuple("Key$1").product(factory.tuple("Key$2"))); + x29_upper.add(factory.tuple("Key$1").product(factory.tuple("Key$3"))); + x29_upper.add(factory.tuple("Key$1").product(factory.tuple("Key$4"))); + x29_upper.add(factory.tuple("Key$2").product(factory.tuple("Key$0"))); + x29_upper.add(factory.tuple("Key$2").product(factory.tuple("Key$1"))); + x29_upper.add(factory.tuple("Key$2").product(factory.tuple("Key$2"))); + x29_upper.add(factory.tuple("Key$2").product(factory.tuple("Key$3"))); + x29_upper.add(factory.tuple("Key$2").product(factory.tuple("Key$4"))); + x29_upper.add(factory.tuple("Key$3").product(factory.tuple("Key$0"))); + x29_upper.add(factory.tuple("Key$3").product(factory.tuple("Key$1"))); + x29_upper.add(factory.tuple("Key$3").product(factory.tuple("Key$2"))); + x29_upper.add(factory.tuple("Key$3").product(factory.tuple("Key$3"))); + x29_upper.add(factory.tuple("Key$3").product(factory.tuple("Key$4"))); + x29_upper.add(factory.tuple("Key$4").product(factory.tuple("Key$0"))); + x29_upper.add(factory.tuple("Key$4").product(factory.tuple("Key$1"))); + x29_upper.add(factory.tuple("Key$4").product(factory.tuple("Key$2"))); + x29_upper.add(factory.tuple("Key$4").product(factory.tuple("Key$3"))); + x29_upper.add(factory.tuple("Key$4").product(factory.tuple("Key$4"))); + bounds.bound(x29, x29_upper); + + TupleSet x30_upper = factory.noneOf(1); + x30_upper.add(factory.tuple("Time$0")); + x30_upper.add(factory.tuple("Time$1")); + x30_upper.add(factory.tuple("Time$2")); + x30_upper.add(factory.tuple("Time$3")); + x30_upper.add(factory.tuple("Time$4")); + x30_upper.add(factory.tuple("Time$5")); + x30_upper.add(factory.tuple("Time$6")); + x30_upper.add(factory.tuple("Time$7")); + x30_upper.add(factory.tuple("Time$8")); + bounds.bound(x30, x30_upper); + + TupleSet x31_upper = factory.noneOf(1); + x31_upper.add(factory.tuple("Key$0")); + x31_upper.add(factory.tuple("Key$1")); + x31_upper.add(factory.tuple("Key$2")); + x31_upper.add(factory.tuple("Key$3")); + x31_upper.add(factory.tuple("Key$4")); + bounds.bound(x31, x31_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x34=x11.intersection(x12); + Formula x33=x34.no(); + Expression x37=x11.union(x12); + Expression x36=x37.intersection(x13); + Formula x35=x36.no(); + Variable x40=Variable.unary("NoBadEntry_this"); + Decls x39=x40.oneOf(x8); + Expression x42=x40.join(x16); + Formula x41=x42.in(x6); + Formula x38=x41.forAll(x39); + Expression x44=x16.join(Expression.UNIV); + Formula x43=x44.in(x8); + Variable x48=Variable.unary("NoBadEntry_this"); + Decls x47=x48.oneOf(x8); + Expression x52=x48.join(x17); + Expression x54=x48.join(x16); + Expression x53=x54.product(x7); + Formula x51=x52.in(x53); + Variable x57=Variable.unary(""); + Decls x56=x57.oneOf(x54); + Expression x59=x57.join(x52); + Formula x58=x59.in(x7); + Formula x55=x58.forAll(x56); + Formula x50=x51.and(x55); + Variable x62=Variable.unary(""); + Decls x61=x62.oneOf(x7); + Expression x65=x52.join(x62); + Formula x64=x65.one(); + Expression x67=x48.join(x16); + Formula x66=x65.in(x67); + Formula x63=x64.and(x66); + Formula x60=x63.forAll(x61); + Formula x49=x50.and(x60); + Formula x46=x49.forAll(x47); + Expression x70=x17.join(Expression.UNIV); + Expression x69=x70.join(Expression.UNIV); + Formula x68=x69.in(x8); + Expression x75=x9.product(x18); + Expression x74=x9.join(x75); + Expression x77=x8.product(x6); + Expression x76=x77.product(x7); + Formula x73=x74.in(x76); + Variable x81=Variable.unary(""); + Decls x80=x81.oneOf(Expression.UNIV); + Variable x83=Variable.unary(""); + Decls x82=x83.oneOf(Expression.UNIV); + Decls x79=x80.and(x82); + Expression x88=x83.product(x81); + Expression x89=x8.product(x6); + Formula x87=x88.in(x89); + Variable x92=Variable.unary(""); + Decls x91=x92.oneOf(x8); + Expression x95=x92.join(x88); + Formula x94=x95.lone(); + Formula x96=x95.in(x6); + Formula x93=x94.and(x96); + Formula x90=x93.forAll(x91); + Formula x86=x87.and(x90); + Variable x99=Variable.unary(""); + Decls x98=x99.oneOf(x6); + Expression x101=x88.join(x99); + Formula x100=x101.in(x8); + Formula x97=x100.forAll(x98); + Formula x85=x86.and(x97); + Expression x104=x83.join(x74); + Expression x103=x81.join(x104); + Formula x102=x103.in(x7); + Formula x84=x85.implies(x102); + Formula x78=x84.forAll(x79); + Formula x72=x73.and(x78); + Variable x107=Variable.unary(""); + Decls x106=x107.oneOf(x7); + Expression x111=x74.join(x107); + Expression x112=x8.product(x6); + Formula x110=x111.in(x112); + Variable x115=Variable.unary(""); + Decls x114=x115.oneOf(x8); + Expression x118=x115.join(x111); + Formula x117=x118.lone(); + Formula x119=x118.in(x6); + Formula x116=x117.and(x119); + Formula x113=x116.forAll(x114); + Formula x109=x110.and(x113); + Variable x122=Variable.unary(""); + Decls x121=x122.oneOf(x6); + Expression x124=x111.join(x122); + Formula x123=x124.in(x8); + Formula x120=x123.forAll(x121); + Formula x108=x109.and(x120); + Formula x105=x108.forAll(x106); + Formula x71=x72.and(x105); + Expression x127=x9.product(x19); + Expression x126=x9.join(x127); + Expression x129=x8.product(x10); + Expression x128=x129.product(x7); + Formula x125=x126.in(x128); + Variable x132=Variable.unary("NoBadEntry_this"); + Decls x131=x132.oneOf(x10); + Expression x134=x132.join(x20); + Expression x135=x6.product(x7); + Formula x133=x134.in(x135); + Formula x130=x133.forAll(x131); + Expression x138=x20.join(Expression.UNIV); + Expression x137=x138.join(Expression.UNIV); + Formula x136=x137.in(x10); + Variable x141=Variable.unary("NoBadEntry_this"); + Decls x140=x141.oneOf(x11); + Expression x145=x141.join(x25); + Expression x148=x141.join(x23); + Expression x147=x148.join(x20); + Expression x149=x141.join(x21); + Expression x146=x147.join(x149); + Formula x144=x145.in(x146); + Expression x153=x141.join(x25); + Expression x156=x141.join(x24); + Expression x155=x156.join(x17); + Expression x157=x141.join(x21); + Expression x154=x155.join(x157); + Formula x152=x153.eq(x154); + Expression x160=x141.join(x22); + Expression x159=x155.join(x160); + Expression x162=x141.join(x21); + Expression x161=x155.join(x162); + Formula x158=x159.eq(x161); + Formula x151=x152.and(x158); + Expression x165=x141.join(x25); + Expression x170=x141.join(x21); + Expression x169=x155.join(x170); + Expression x171=x29.closure(); + Expression x168=x169.join(x171); + Expression x173=x141.join(x24); + Expression x172=x173.join(x16); + Expression x167=x168.intersection(x172); + Expression x175=x29.closure(); + Expression x174=x167.join(x175); + Expression x166=x167.difference(x174); + Formula x164=x165.eq(x166); + Expression x178=x141.join(x22); + Expression x177=x155.join(x178); + Expression x179=x141.join(x25); + Formula x176=x177.eq(x179); + Formula x163=x164.and(x176); + Formula x150=x151.or(x163); + Formula x143=x144.and(x150); + Expression x182=x141.join(x22); + Expression x181=x17.join(x182); + Expression x185=x141.join(x21); + Expression x184=x17.join(x185); + Expression x187=x141.join(x24); + Expression x188=x141.join(x25); + Expression x186=x187.product(x188); + Expression x183=x184.override(x186); + Formula x180=x181.eq(x183); + Formula x142=x143.and(x180); + Formula x139=x142.forAll(x140); + Variable x191=Variable.unary("NoBadEntry_this"); + Decls x190=x191.oneOf(x12); + Expression x196=x191.join(x22); + Expression x195=x20.join(x196); + Expression x199=x191.join(x21); + Expression x198=x20.join(x199); + Expression x201=x191.join(x23); + Expression x202=x191.join(x25); + Expression x200=x201.product(x202); + Expression x197=x198.union(x200); + Formula x194=x195.eq(x197); + Expression x206=x191.join(x24); + Expression x208=x191.join(x21); + Expression x207=x19.join(x208); + Expression x205=x206.join(x207); + Formula x204=x205.no(); + Expression x211=x191.join(x22); + Expression x210=x19.join(x211); + Expression x214=x191.join(x21); + Expression x213=x19.join(x214); + Expression x216=x191.join(x24); + Expression x217=x191.join(x23); + Expression x215=x216.product(x217); + Expression x212=x213.union(x215); + Formula x209=x210.eq(x212); + Formula x203=x204.and(x209); + Formula x193=x194.and(x203); + Expression x221=x191.join(x22); + Expression x220=x18.join(x221); + Expression x224=x191.join(x21); + Expression x223=x18.join(x224); + Expression x226=x191.join(x24); + Expression x227=x191.join(x25); + Expression x225=x226.product(x227); + Expression x222=x223.override(x225); + Formula x219=x220.eq(x222); + Expression x229=x191.join(x25); + Expression x234=x191.join(x24); + Expression x236=x191.join(x21); + Expression x235=x18.join(x236); + Expression x233=x234.join(x235); + Expression x237=x29.closure(); + Expression x232=x233.join(x237); + Expression x239=x191.join(x24); + Expression x238=x239.join(x16); + Expression x231=x232.intersection(x238); + Expression x241=x29.closure(); + Expression x240=x231.join(x241); + Expression x230=x231.difference(x240); + Formula x228=x229.eq(x230); + Formula x218=x219.and(x228); + Formula x192=x193.and(x218); + Formula x189=x192.forAll(x190); + Variable x244=Variable.unary("NoBadEntry_this"); + Decls x243=x244.oneOf(x37); + Expression x247=x244.join(x24); + Formula x246=x247.one(); + Formula x248=x247.in(x8); + Formula x245=x246.and(x248); + Formula x242=x245.forAll(x243); + Expression x250=x24.join(Expression.UNIV); + Formula x249=x250.in(x37); + Variable x253=Variable.unary("NoBadEntry_this"); + Decls x252=x253.oneOf(x37); + Expression x256=x253.join(x25); + Formula x255=x256.one(); + Formula x257=x256.in(x6); + Formula x254=x255.and(x257); + Formula x251=x254.forAll(x252); + Expression x259=x25.join(Expression.UNIV); + Formula x258=x259.in(x37); + Variable x262=Variable.unary("NoBadEntry_this"); + Decls x261=x262.oneOf(x13); + Expression x267=x262.join(x21); + Expression x266=x19.join(x267); + Expression x268=x262.join(x23); + Expression x265=x266.join(x268); + Formula x264=x265.some(); + Expression x271=x262.join(x22); + Expression x270=x19.join(x271); + Expression x274=x262.join(x21); + Expression x273=x19.join(x274); + Expression x276=x262.join(x23); + Expression x275=x8.product(x276); + Expression x272=x273.difference(x275); + Formula x269=x270.eq(x272); + Formula x263=x264.and(x269); + Formula x260=x263.forAll(x261); + Variable x279=Variable.unary("NoBadEntry_this"); + Expression x280=x37.union(x13); + Decls x278=x279.oneOf(x280); + Expression x283=x279.join(x21); + Formula x282=x283.one(); + Formula x284=x283.in(x7); + Formula x281=x282.and(x284); + Formula x277=x281.forAll(x278); + Expression x286=x21.join(Expression.UNIV); + Formula x285=x286.in(x280); + Variable x289=Variable.unary("NoBadEntry_this"); + Decls x288=x289.oneOf(x280); + Expression x292=x289.join(x22); + Formula x291=x292.one(); + Formula x293=x292.in(x7); + Formula x290=x291.and(x293); + Formula x287=x290.forAll(x288); + Expression x295=x22.join(Expression.UNIV); + Formula x294=x295.in(x280); + Variable x298=Variable.unary("NoBadEntry_this"); + Decls x297=x298.oneOf(x280); + Expression x301=x298.join(x23); + Formula x300=x301.one(); + Formula x302=x301.in(x10); + Formula x299=x300.and(x302); + Formula x296=x299.forAll(x297); + Expression x304=x23.join(Expression.UNIV); + Formula x303=x304.in(x280); + Expression x307=x14.product(x26); + Expression x306=x14.join(x307); + Formula x305=x306.in(x7); + Expression x310=x14.product(x27); + Expression x309=x14.join(x310); + Expression x311=x7.product(x7); + Formula x308=x309.in(x311); + Formula x312=x27.totalOrder(x7,x26,x30); + Expression x315=x15.product(x28); + Expression x314=x15.join(x315); + Formula x313=x314.in(x6); + Expression x318=x15.product(x29); + Expression x317=x15.join(x318); + Expression x319=x6.product(x6); + Formula x316=x317.in(x319); + Formula x320=x29.totalOrder(x6,x28,x31); + Expression x324=x8.product(x6); + Formula x323=x16.in(x324); + Variable x327=Variable.unary(""); + Decls x326=x327.oneOf(x8); + Expression x329=x327.join(x16); + Formula x328=x329.in(x6); + Formula x325=x328.forAll(x326); + Formula x322=x323.and(x325); + Variable x332=Variable.unary(""); + Decls x331=x332.oneOf(x6); + Expression x335=x16.join(x332); + Formula x334=x335.lone(); + Formula x336=x335.in(x8); + Formula x333=x334.and(x336); + Formula x330=x333.forAll(x331); + Formula x321=x322.and(x330); + Expression x341=x10.join(x20); + Expression x340=x341.join(x26); + Formula x339=x340.no(); + Expression x343=x19.join(x26); + Formula x342=x343.no(); + Formula x338=x339.and(x342); + Variable x346=Variable.unary("init_r"); + Decls x345=x346.oneOf(x8); + Expression x349=x18.join(x26); + Expression x348=x346.join(x349); + Expression x351=x346.join(x17); + Expression x350=x351.join(x26); + Formula x347=x348.eq(x350); + Formula x344=x347.forAll(x345); + Formula x337=x338.and(x344); + Variable x354=Variable.unary("NoBadEntry_t"); + Expression x357=x27.join(x7); + Expression x356=x7.difference(x357); + Expression x355=x7.difference(x356); + Decls x353=x354.oneOf(x355); + Variable x360=Variable.unary("NoBadEntry_e"); + Decls x359=x360.oneOf(x280); + Expression x364=x360.join(x21); + Formula x363=x364.eq(x354); + Expression x368=x360.join(x22); + Expression x369=x354.join(x27); + Formula x367=x368.eq(x369); + Expression x374=x127.join(x354); + Expression x375=x127.join(x369); + Formula x373=x374.eq(x375); + Formula x372=x373.not(); + Formula x371=x372.not(); + Expression x377=x12.union(x13); + Formula x376=x360.in(x377); + Formula x370=x371.or(x376); + Formula x366=x367.and(x370); + Expression x383=x75.join(x354); + Expression x384=x75.join(x369); + Formula x382=x383.eq(x384); + Formula x381=x382.not(); + Expression x387=x20.join(x354); + Expression x388=x20.join(x369); + Formula x386=x387.eq(x388); + Formula x385=x386.not(); + Formula x380=x381.or(x385); + Formula x379=x380.not(); + Formula x389=x360.in(x12); + Formula x378=x379.or(x389); + Formula x365=x366.and(x378); + Formula x362=x363.and(x365); + Expression x394=x17.join(x354); + Expression x395=x17.join(x369); + Formula x393=x394.eq(x395); + Formula x392=x393.not(); + Formula x391=x392.not(); + Formula x396=x360.in(x11); + Formula x390=x391.or(x396); + Formula x361=x362.and(x390); + Formula x358=x361.forSome(x359); + Formula x352=x358.forAll(x353); + Variable x399=Variable.unary("NoBadEntry_c"); + Decls x398=x399.oneOf(x12); + Expression x402=x399.join(x22); + Formula x401=x402.eq(x356); + Variable x405=Variable.unary("NoBadEntry_e"); + Decls x404=x405.oneOf(x11); + Expression x409=x405.join(x21); + Expression x410=x399.join(x22); + Formula x408=x409.eq(x410); + Expression x412=x405.join(x24); + Expression x413=x399.join(x24); + Formula x411=x412.eq(x413); + Formula x407=x408.and(x411); + Expression x415=x405.join(x23); + Expression x416=x399.join(x23); + Formula x414=x415.eq(x416); + Formula x406=x407.and(x414); + Formula x403=x406.forSome(x404); + Formula x400=x401.or(x403); + Formula x397=x400.forAll(x398); + Variable x420=Variable.unary("NoBadEntry_e"); + Decls x419=x420.oneOf(x11); + Expression x425=x420.join(x24); + Expression x427=x420.join(x21); + Expression x426=x19.join(x427); + Expression x424=x425.join(x426); + Formula x423=x424.some(); + Formula x422=x423.not(); + Expression x429=x420.join(x23); + Formula x428=x429.in(x424); + Formula x421=x422.or(x428); + Formula x418=x421.forAll(x419); + Formula x417=x418.not(); + Formula x430=x0.eq(x0); + Formula x431=x1.eq(x1); + Formula x432=x2.eq(x2); + Formula x433=x3.eq(x3); + Formula x434=x4.eq(x4); + Formula x435=x5.eq(x5); + Formula x436=x6.eq(x6); + Formula x437=x7.eq(x7); + Formula x438=x8.eq(x8); + Formula x439=x9.eq(x9); + Formula x440=x10.eq(x10); + Formula x441=x11.eq(x11); + Formula x442=x12.eq(x12); + Formula x443=x13.eq(x13); + Formula x444=x14.eq(x14); + Formula x445=x15.eq(x15); + Formula x446=x16.eq(x16); + Formula x447=x17.eq(x17); + Formula x448=x18.eq(x18); + Formula x449=x19.eq(x19); + Formula x450=x20.eq(x20); + Formula x451=x21.eq(x21); + Formula x452=x22.eq(x22); + Formula x453=x23.eq(x23); + Formula x454=x24.eq(x24); + Formula x455=x25.eq(x25); + Formula x456=x26.eq(x26); + Formula x457=x27.eq(x27); + Formula x458=x28.eq(x28); + Formula x459=x29.eq(x29); + Formula x460=x30.eq(x30); + Formula x461=x31.eq(x31); + Formula x32=Formula.compose(FormulaOperator.AND, x33, x35, x38, x43, x46, x68, x71, x125, x130, x136, x139, x189, x242, x249, x251, x258, x260, x277, x285, x287, x294, x296, x303, x305, x308, x312, x313, x316, x320, x321, x337, x352, x397, x417, x430, x431, x432, x433, x434, x435, x436, x437, x438, x439, x440, x441, x442, x443, x444, x445, x446, x447, x448, x449, x450, x451, x452, x453, x454, x455, x456, x457, x458, x459, x460, x461); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x32,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsCutPasteCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsCutPasteCheck.java new file mode 100644 index 0000000..333e712 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsCutPasteCheck.java @@ -0,0 +1,536 @@ +package kodkod.examples.models.softwareAbstractions.chapter6; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "mediaAssets", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 8, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 7, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 35, + OrderedRelations = 0, + Constraints = 48 +) + + + +public final class mediaAssetsCutPasteCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/ApplicationState"); + Relation x7 = Relation.unary("this/Catalog"); + Relation x8 = Relation.unary("this/Asset"); + Relation x9 = Relation.unary("this/CatalogState"); + Relation x10 = Relation.unary("this/Undefined"); + Relation x11 = Relation.nary("this/ApplicationState.catalogs", 2); + Relation x12 = Relation.nary("this/ApplicationState.catalogState", 3); + Relation x13 = Relation.nary("this/ApplicationState.currentCatalog", 2); + Relation x14 = Relation.nary("this/ApplicationState.buffer", 2); + Relation x15 = Relation.nary("this/CatalogState.assets", 2); + Relation x16 = Relation.nary("this/CatalogState.hidden", 2); + Relation x17 = Relation.nary("this/CatalogState.showing", 2); + Relation x18 = Relation.nary("this/CatalogState.selection", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "ApplicationState$0", + "ApplicationState$1", "ApplicationState$2", "Asset$0", "Asset$1", "Asset$2", "Catalog$0", + "Catalog$1", "Catalog$2", "CatalogState$0", "CatalogState$1", "CatalogState$2", "Undefined$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("ApplicationState$0")); + x6_upper.add(factory.tuple("ApplicationState$1")); + x6_upper.add(factory.tuple("ApplicationState$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Catalog$0")); + x7_upper.add(factory.tuple("Catalog$1")); + x7_upper.add(factory.tuple("Catalog$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Asset$0")); + x8_upper.add(factory.tuple("Asset$1")); + x8_upper.add(factory.tuple("Asset$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("CatalogState$0")); + x9_upper.add(factory.tuple("CatalogState$1")); + x9_upper.add(factory.tuple("CatalogState$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Undefined$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0"))); + x11_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1"))); + x11_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2"))); + x11_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0"))); + x11_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1"))); + x11_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2"))); + x11_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0"))); + x11_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1"))); + x11_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0"))); + x13_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1"))); + x13_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2"))); + x13_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0"))); + x13_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1"))); + x13_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2"))); + x13_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0"))); + x13_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1"))); + x13_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Asset$0"))); + x14_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Asset$1"))); + x14_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Asset$2"))); + x14_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Asset$0"))); + x14_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Asset$1"))); + x14_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Asset$2"))); + x14_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Asset$0"))); + x14_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Asset$1"))); + x14_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x15_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x15_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x15_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x15_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x15_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x15_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x15_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x15_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x16_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x16_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x16_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x16_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x16_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x16_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x16_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x16_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x17_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x17_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x17_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x17_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x17_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x17_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x17_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x17_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(2); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Undefined$0"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Undefined$0"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Undefined$0"))); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("CutPaste_this"); + Decls x21=x22.oneOf(x6); + Expression x24=x22.join(x11); + Formula x23=x24.in(x7); + Formula x20=x23.forAll(x21); + Expression x26=x11.join(Expression.UNIV); + Formula x25=x26.in(x6); + Variable x30=Variable.unary("CutPaste_this"); + Decls x29=x30.oneOf(x6); + Expression x34=x30.join(x12); + Expression x36=x30.join(x11); + Expression x35=x36.product(x9); + Formula x33=x34.in(x35); + Variable x39=Variable.unary(""); + Decls x38=x39.oneOf(x36); + Expression x42=x39.join(x34); + Formula x41=x42.one(); + Formula x43=x42.in(x9); + Formula x40=x41.and(x43); + Formula x37=x40.forAll(x38); + Formula x32=x33.and(x37); + Variable x46=Variable.unary(""); + Decls x45=x46.oneOf(x9); + Expression x48=x34.join(x46); + Expression x49=x30.join(x11); + Formula x47=x48.in(x49); + Formula x44=x47.forAll(x45); + Formula x31=x32.and(x44); + Formula x28=x31.forAll(x29); + Expression x52=x12.join(Expression.UNIV); + Expression x51=x52.join(Expression.UNIV); + Formula x50=x51.in(x6); + Variable x55=Variable.unary("CutPaste_this"); + Decls x54=x55.oneOf(x6); + Expression x58=x55.join(x13); + Formula x57=x58.one(); + Expression x60=x55.join(x11); + Formula x59=x58.in(x60); + Formula x56=x57.and(x59); + Formula x53=x56.forAll(x54); + Expression x62=x13.join(Expression.UNIV); + Formula x61=x62.in(x6); + Variable x65=Variable.unary("CutPaste_this"); + Decls x64=x65.oneOf(x6); + Expression x67=x65.join(x14); + Formula x66=x67.in(x8); + Formula x63=x66.forAll(x64); + Expression x69=x14.join(Expression.UNIV); + Formula x68=x69.in(x6); + Variable x72=Variable.unary("CutPaste_this"); + Decls x71=x72.oneOf(x9); + Expression x74=x72.join(x15); + Formula x73=x74.in(x8); + Formula x70=x73.forAll(x71); + Expression x76=x15.join(Expression.UNIV); + Formula x75=x76.in(x9); + Variable x79=Variable.unary("CutPaste_this"); + Decls x78=x79.oneOf(x9); + Expression x81=x79.join(x16); + Expression x82=x79.join(x15); + Formula x80=x81.in(x82); + Formula x77=x80.forAll(x78); + Expression x84=x16.join(Expression.UNIV); + Formula x83=x84.in(x9); + Variable x87=Variable.unary("CutPaste_this"); + Decls x86=x87.oneOf(x9); + Expression x89=x87.join(x17); + Expression x90=x87.join(x15); + Formula x88=x89.in(x90); + Formula x85=x88.forAll(x86); + Expression x92=x17.join(Expression.UNIV); + Formula x91=x92.in(x9); + Expression x94=x16.intersection(x17); + Formula x93=x94.no(); + Variable x97=Variable.unary("CutPaste_this"); + Decls x96=x97.oneOf(x9); + Expression x99=x97.join(x18); + Expression x101=x97.join(x15); + Expression x100=x101.union(x10); + Formula x98=x99.in(x100); + Formula x95=x98.forAll(x96); + Expression x103=x18.join(Expression.UNIV); + Formula x102=x103.in(x9); + Variable x106=Variable.unary("CutPaste_this"); + Decls x105=x106.oneOf(x9); + Expression x109=x106.join(x16); + Expression x110=x106.join(x17); + Expression x108=x109.union(x110); + Expression x111=x106.join(x15); + Formula x107=x108.eq(x111); + Formula x104=x107.forAll(x105); + Variable x116=Variable.unary("CutPaste_xs"); + Decls x115=x116.oneOf(x6); + Variable x118=Variable.unary("CutPaste_xs'"); + Decls x117=x118.oneOf(x6); + Variable x120=Variable.unary("CutPaste_xs"); + Decls x119=x120.oneOf(x6); + Decls x114=x115.and(x117).and(x119); + Variable x127=Variable.unary("appInv_cs"); + Expression x128=x116.join(x11); + Decls x126=x127.oneOf(x128); + Expression x133=x116.join(x12); + Expression x132=x127.join(x133); + Expression x131=x132.join(x18); + Formula x130=x131.eq(x10); + Expression x136=x132.join(x18); + Formula x135=x136.some(); + Expression x138=x132.join(x18); + Expression x139=x132.join(x17); + Formula x137=x138.in(x139); + Formula x134=x135.and(x137); + Formula x129=x130.or(x134); + Formula x125=x129.forAll(x126); + Expression x148=x116.join(x13); + Expression x149=x116.join(x12); + Expression x147=x148.join(x149); + Expression x146=x147.join(x18); + Formula x145=x146.eq(x10); + Formula x144=x145.not(); + Expression x151=x118.join(x14); + Formula x150=x151.eq(x146); + Formula x143=x144.and(x150); + Variable x154=Variable.unary("cut_cs'"); + Decls x153=x154.oneOf(x9); + Expression x158=x154.join(x15); + Expression x160=x147.join(x15); + Expression x159=x160.difference(x146); + Formula x157=x158.eq(x159); + Expression x163=x154.join(x17); + Expression x165=x147.join(x17); + Expression x164=x165.difference(x146); + Formula x162=x163.eq(x164); + Expression x167=x118.join(x12); + Expression x169=x116.join(x12); + Expression x171=x116.join(x13); + Expression x170=x171.product(x154); + Expression x168=x169.override(x170); + Formula x166=x167.eq(x168); + Formula x161=x162.and(x166); + Formula x156=x157.and(x161); + Expression x173=x154.join(x18); + Formula x172=x173.eq(x10); + Formula x155=x156.and(x172); + Formula x152=x155.forSome(x153); + Formula x142=x143.and(x152); + Expression x175=x118.join(x11); + Expression x176=x116.join(x11); + Formula x174=x175.eq(x176); + Formula x141=x142.and(x174); + Expression x178=x118.join(x13); + Expression x179=x116.join(x13); + Formula x177=x178.eq(x179); + Formula x140=x141.and(x177); + Formula x124=x125.and(x140); + Expression x184=x120.join(x14); + Expression x185=x118.join(x14); + Formula x183=x184.eq(x185); + Variable x188=Variable.unary("paste_cs'"); + Decls x187=x188.oneOf(x9); + Expression x192=x188.join(x15); + Expression x196=x118.join(x13); + Expression x197=x118.join(x12); + Expression x195=x196.join(x197); + Expression x194=x195.join(x15); + Expression x193=x194.union(x185); + Formula x191=x192.eq(x193); + Expression x200=x188.join(x17); + Expression x202=x195.join(x17); + Expression x204=x195.join(x15); + Expression x203=x185.difference(x204); + Expression x201=x202.union(x203); + Formula x199=x200.eq(x201); + Expression x206=x120.join(x12); + Expression x208=x118.join(x12); + Expression x210=x118.join(x13); + Expression x209=x210.product(x188); + Expression x207=x208.override(x209); + Formula x205=x206.eq(x207); + Formula x198=x199.and(x205); + Formula x190=x191.and(x198); + Expression x212=x188.join(x18); + Expression x214=x195.join(x15); + Expression x213=x185.difference(x214); + Formula x211=x212.eq(x213); + Formula x189=x190.and(x211); + Formula x186=x189.forSome(x187); + Formula x182=x183.and(x186); + Expression x216=x120.join(x11); + Expression x217=x118.join(x11); + Formula x215=x216.eq(x217); + Formula x181=x182.and(x215); + Expression x219=x120.join(x13); + Expression x220=x118.join(x13); + Formula x218=x219.eq(x220); + Formula x180=x181.and(x218); + Formula x123=x124.and(x180); + Formula x122=x123.not(); + Expression x224=x120.join(x11); + Expression x225=x116.join(x11); + Formula x223=x224.eq(x225); + Variable x229=Variable.unary("sameApplicationState_c"); + Expression x230=x116.join(x11); + Decls x228=x229.oneOf(x230); + Expression x236=x120.join(x12); + Expression x235=x229.join(x236); + Expression x234=x235.join(x15); + Expression x239=x116.join(x12); + Expression x238=x229.join(x239); + Expression x237=x238.join(x15); + Formula x233=x234.eq(x237); + Expression x241=x235.join(x17); + Expression x242=x238.join(x17); + Formula x240=x241.eq(x242); + Formula x232=x233.and(x240); + Expression x244=x235.join(x18); + Expression x245=x238.join(x18); + Formula x243=x244.eq(x245); + Formula x231=x232.and(x243); + Formula x227=x231.forAll(x228); + Expression x247=x120.join(x14); + Expression x248=x116.join(x14); + Formula x246=x247.eq(x248); + Formula x226=x227.and(x246); + Formula x222=x223.and(x226); + Expression x250=x120.join(x13); + Expression x251=x116.join(x13); + Formula x249=x250.eq(x251); + Formula x221=x222.and(x249); + Formula x121=x122.or(x221); + Formula x113=x121.forAll(x114); + Formula x112=x113.not(); + Formula x252=x0.eq(x0); + Formula x253=x1.eq(x1); + Formula x254=x2.eq(x2); + Formula x255=x3.eq(x3); + Formula x256=x4.eq(x4); + Formula x257=x5.eq(x5); + Formula x258=x6.eq(x6); + Formula x259=x7.eq(x7); + Formula x260=x8.eq(x8); + Formula x261=x9.eq(x9); + Formula x262=x10.eq(x10); + Formula x263=x11.eq(x11); + Formula x264=x12.eq(x12); + Formula x265=x13.eq(x13); + Formula x266=x14.eq(x14); + Formula x267=x15.eq(x15); + Formula x268=x16.eq(x16); + Formula x269=x17.eq(x17); + Formula x270=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x25, x28, x50, x53, x61, x63, x68, x70, x75, x77, x83, x85, x91, x93, x95, x102, x104, x112, x252, x253, x254, x255, x256, x257, x258, x259, x260, x261, x262, x263, x264, x265, x266, x267, x268, x269, x270); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsNoBadEntryCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsNoBadEntryCheck.java new file mode 100644 index 0000000..b541951 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsNoBadEntryCheck.java @@ -0,0 +1,439 @@ +package kodkod.examples.models.softwareAbstractions.chapter6; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "mediaAssets", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 8, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 7, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 35, + OrderedRelations = 0, + Constraints = 48 +) + + +public final class mediaAssetsNoBadEntryCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/ApplicationState"); + Relation x7 = Relation.unary("this/Catalog"); + Relation x8 = Relation.unary("this/Asset"); + Relation x9 = Relation.unary("this/CatalogState"); + Relation x10 = Relation.unary("this/Undefined"); + Relation x11 = Relation.nary("this/ApplicationState.catalogs", 2); + Relation x12 = Relation.nary("this/ApplicationState.catalogState", 3); + Relation x13 = Relation.nary("this/ApplicationState.currentCatalog", 2); + Relation x14 = Relation.nary("this/ApplicationState.buffer", 2); + Relation x15 = Relation.nary("this/CatalogState.assets", 2); + Relation x16 = Relation.nary("this/CatalogState.hidden", 2); + Relation x17 = Relation.nary("this/CatalogState.showing", 2); + Relation x18 = Relation.nary("this/CatalogState.selection", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "ApplicationState$0", + "ApplicationState$1", "ApplicationState$2", "Asset$0", "Asset$1", "Asset$2", "Catalog$0", + "Catalog$1", "Catalog$2", "CatalogState$0", "CatalogState$1", "CatalogState$2", "Undefined$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("ApplicationState$0")); + x6_upper.add(factory.tuple("ApplicationState$1")); + x6_upper.add(factory.tuple("ApplicationState$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Catalog$0")); + x7_upper.add(factory.tuple("Catalog$1")); + x7_upper.add(factory.tuple("Catalog$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Asset$0")); + x8_upper.add(factory.tuple("Asset$1")); + x8_upper.add(factory.tuple("Asset$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("CatalogState$0")); + x9_upper.add(factory.tuple("CatalogState$1")); + x9_upper.add(factory.tuple("CatalogState$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Undefined$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0"))); + x11_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1"))); + x11_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2"))); + x11_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0"))); + x11_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1"))); + x11_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2"))); + x11_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0"))); + x11_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1"))); + x11_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0"))); + x13_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1"))); + x13_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2"))); + x13_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0"))); + x13_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1"))); + x13_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2"))); + x13_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0"))); + x13_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1"))); + x13_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Asset$0"))); + x14_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Asset$1"))); + x14_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Asset$2"))); + x14_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Asset$0"))); + x14_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Asset$1"))); + x14_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Asset$2"))); + x14_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Asset$0"))); + x14_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Asset$1"))); + x14_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x15_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x15_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x15_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x15_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x15_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x15_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x15_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x15_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x16_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x16_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x16_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x16_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x16_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x16_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x16_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x16_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x17_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x17_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x17_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x17_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x17_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x17_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x17_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x17_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(2); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Undefined$0"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Undefined$0"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Undefined$0"))); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("HidePreservesInv_this"); + Decls x21=x22.oneOf(x6); + Expression x24=x22.join(x11); + Formula x23=x24.in(x7); + Formula x20=x23.forAll(x21); + Expression x26=x11.join(Expression.UNIV); + Formula x25=x26.in(x6); + Variable x30=Variable.unary("HidePreservesInv_this"); + Decls x29=x30.oneOf(x6); + Expression x34=x30.join(x12); + Expression x36=x30.join(x11); + Expression x35=x36.product(x9); + Formula x33=x34.in(x35); + Variable x39=Variable.unary(""); + Decls x38=x39.oneOf(x36); + Expression x42=x39.join(x34); + Formula x41=x42.one(); + Formula x43=x42.in(x9); + Formula x40=x41.and(x43); + Formula x37=x40.forAll(x38); + Formula x32=x33.and(x37); + Variable x46=Variable.unary(""); + Decls x45=x46.oneOf(x9); + Expression x48=x34.join(x46); + Expression x49=x30.join(x11); + Formula x47=x48.in(x49); + Formula x44=x47.forAll(x45); + Formula x31=x32.and(x44); + Formula x28=x31.forAll(x29); + Expression x52=x12.join(Expression.UNIV); + Expression x51=x52.join(Expression.UNIV); + Formula x50=x51.in(x6); + Variable x55=Variable.unary("HidePreservesInv_this"); + Decls x54=x55.oneOf(x6); + Expression x58=x55.join(x13); + Formula x57=x58.one(); + Expression x60=x55.join(x11); + Formula x59=x58.in(x60); + Formula x56=x57.and(x59); + Formula x53=x56.forAll(x54); + Expression x62=x13.join(Expression.UNIV); + Formula x61=x62.in(x6); + Variable x65=Variable.unary("HidePreservesInv_this"); + Decls x64=x65.oneOf(x6); + Expression x67=x65.join(x14); + Formula x66=x67.in(x8); + Formula x63=x66.forAll(x64); + Expression x69=x14.join(Expression.UNIV); + Formula x68=x69.in(x6); + Variable x72=Variable.unary("HidePreservesInv_this"); + Decls x71=x72.oneOf(x9); + Expression x74=x72.join(x15); + Formula x73=x74.in(x8); + Formula x70=x73.forAll(x71); + Expression x76=x15.join(Expression.UNIV); + Formula x75=x76.in(x9); + Variable x79=Variable.unary("HidePreservesInv_this"); + Decls x78=x79.oneOf(x9); + Expression x81=x79.join(x16); + Expression x82=x79.join(x15); + Formula x80=x81.in(x82); + Formula x77=x80.forAll(x78); + Expression x84=x16.join(Expression.UNIV); + Formula x83=x84.in(x9); + Variable x87=Variable.unary("HidePreservesInv_this"); + Decls x86=x87.oneOf(x9); + Expression x89=x87.join(x17); + Expression x90=x87.join(x15); + Formula x88=x89.in(x90); + Formula x85=x88.forAll(x86); + Expression x92=x17.join(Expression.UNIV); + Formula x91=x92.in(x9); + Expression x94=x16.intersection(x17); + Formula x93=x94.no(); + Variable x97=Variable.unary("HidePreservesInv_this"); + Decls x96=x97.oneOf(x9); + Expression x99=x97.join(x18); + Expression x101=x97.join(x15); + Expression x100=x101.union(x10); + Formula x98=x99.in(x100); + Formula x95=x98.forAll(x96); + Expression x103=x18.join(Expression.UNIV); + Formula x102=x103.in(x9); + Variable x106=Variable.unary("HidePreservesInv_this"); + Decls x105=x106.oneOf(x9); + Expression x109=x106.join(x16); + Expression x110=x106.join(x17); + Expression x108=x109.union(x110); + Expression x111=x106.join(x15); + Formula x107=x108.eq(x111); + Formula x104=x107.forAll(x105); + Variable x116=Variable.unary("HidePreservesInv_cs"); + Decls x115=x116.oneOf(x9); + Variable x118=Variable.unary("HidePreservesInv_cs'"); + Decls x117=x118.oneOf(x9); + Decls x114=x115.and(x117); + Expression x124=x116.join(x18); + Formula x123=x124.eq(x10); + Expression x127=x116.join(x18); + Formula x126=x127.some(); + Expression x129=x116.join(x18); + Expression x130=x116.join(x17); + Formula x128=x129.in(x130); + Formula x125=x126.and(x128); + Formula x122=x123.or(x125); + Expression x135=x116.join(x18); + Formula x134=x135.eq(x10); + Formula x133=x134.not(); + Expression x138=x118.join(x16); + Expression x140=x116.join(x16); + Expression x141=x116.join(x18); + Expression x139=x140.union(x141); + Formula x137=x138.eq(x139); + Expression x143=x118.join(x15); + Expression x144=x116.join(x15); + Formula x142=x143.eq(x144); + Formula x136=x137.and(x142); + Formula x132=x133.and(x136); + Expression x146=x118.join(x18); + Formula x145=x146.eq(x10); + Formula x131=x132.and(x145); + Formula x121=x122.and(x131); + Formula x120=x121.not(); + Expression x149=x118.join(x18); + Formula x148=x149.eq(x10); + Expression x152=x118.join(x18); + Formula x151=x152.some(); + Expression x154=x118.join(x18); + Expression x155=x118.join(x17); + Formula x153=x154.in(x155); + Formula x150=x151.and(x153); + Formula x147=x148.or(x150); + Formula x119=x120.or(x147); + Formula x113=x119.forAll(x114); + Formula x112=x113.not(); + Formula x156=x0.eq(x0); + Formula x157=x1.eq(x1); + Formula x158=x2.eq(x2); + Formula x159=x3.eq(x3); + Formula x160=x4.eq(x4); + Formula x161=x5.eq(x5); + Formula x162=x6.eq(x6); + Formula x163=x7.eq(x7); + Formula x164=x8.eq(x8); + Formula x165=x9.eq(x9); + Formula x166=x10.eq(x10); + Formula x167=x11.eq(x11); + Formula x168=x12.eq(x12); + Formula x169=x13.eq(x13); + Formula x170=x14.eq(x14); + Formula x171=x15.eq(x15); + Formula x172=x16.eq(x16); + Formula x173=x17.eq(x17); + Formula x174=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x25, x28, x50, x53, x61, x63, x68, x70, x75, x77, x83, x85, x91, x93, x95, x102, x104, x112, x156, x157, x158, x159, x160, x161, x162, x163, x164, x165, x166, x167, x168, x169, x170, x171, x172, x173, x174); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsPasteCutCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsPasteCutCheck.java new file mode 100644 index 0000000..4ff1e06 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsPasteCutCheck.java @@ -0,0 +1,535 @@ +package kodkod.examples.models.softwareAbstractions.chapter6; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "mediaAssets", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 8, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 7, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 35, + OrderedRelations = 0, + Constraints = 48 +) + + +public final class mediaAssetsPasteCutCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/ApplicationState"); + Relation x7 = Relation.unary("this/Catalog"); + Relation x8 = Relation.unary("this/Asset"); + Relation x9 = Relation.unary("this/CatalogState"); + Relation x10 = Relation.unary("this/Undefined"); + Relation x11 = Relation.nary("this/ApplicationState.catalogs", 2); + Relation x12 = Relation.nary("this/ApplicationState.catalogState", 3); + Relation x13 = Relation.nary("this/ApplicationState.currentCatalog", 2); + Relation x14 = Relation.nary("this/ApplicationState.buffer", 2); + Relation x15 = Relation.nary("this/CatalogState.assets", 2); + Relation x16 = Relation.nary("this/CatalogState.hidden", 2); + Relation x17 = Relation.nary("this/CatalogState.showing", 2); + Relation x18 = Relation.nary("this/CatalogState.selection", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "ApplicationState$0", + "ApplicationState$1", "ApplicationState$2", "Asset$0", "Asset$1", "Asset$2", "Catalog$0", + "Catalog$1", "Catalog$2", "CatalogState$0", "CatalogState$1", "CatalogState$2", "Undefined$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("ApplicationState$0")); + x6_upper.add(factory.tuple("ApplicationState$1")); + x6_upper.add(factory.tuple("ApplicationState$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Catalog$0")); + x7_upper.add(factory.tuple("Catalog$1")); + x7_upper.add(factory.tuple("Catalog$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Asset$0")); + x8_upper.add(factory.tuple("Asset$1")); + x8_upper.add(factory.tuple("Asset$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("CatalogState$0")); + x9_upper.add(factory.tuple("CatalogState$1")); + x9_upper.add(factory.tuple("CatalogState$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Undefined$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0"))); + x11_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1"))); + x11_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2"))); + x11_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0"))); + x11_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1"))); + x11_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2"))); + x11_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0"))); + x11_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1"))); + x11_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0"))); + x13_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1"))); + x13_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2"))); + x13_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0"))); + x13_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1"))); + x13_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2"))); + x13_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0"))); + x13_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1"))); + x13_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Asset$0"))); + x14_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Asset$1"))); + x14_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Asset$2"))); + x14_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Asset$0"))); + x14_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Asset$1"))); + x14_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Asset$2"))); + x14_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Asset$0"))); + x14_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Asset$1"))); + x14_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x15_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x15_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x15_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x15_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x15_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x15_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x15_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x15_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x16_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x16_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x16_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x16_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x16_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x16_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x16_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x16_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x17_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x17_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x17_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x17_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x17_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x17_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x17_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x17_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(2); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Undefined$0"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Undefined$0"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Undefined$0"))); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("PasteCut_this"); + Decls x21=x22.oneOf(x6); + Expression x24=x22.join(x11); + Formula x23=x24.in(x7); + Formula x20=x23.forAll(x21); + Expression x26=x11.join(Expression.UNIV); + Formula x25=x26.in(x6); + Variable x30=Variable.unary("PasteCut_this"); + Decls x29=x30.oneOf(x6); + Expression x34=x30.join(x12); + Expression x36=x30.join(x11); + Expression x35=x36.product(x9); + Formula x33=x34.in(x35); + Variable x39=Variable.unary(""); + Decls x38=x39.oneOf(x36); + Expression x42=x39.join(x34); + Formula x41=x42.one(); + Formula x43=x42.in(x9); + Formula x40=x41.and(x43); + Formula x37=x40.forAll(x38); + Formula x32=x33.and(x37); + Variable x46=Variable.unary(""); + Decls x45=x46.oneOf(x9); + Expression x48=x34.join(x46); + Expression x49=x30.join(x11); + Formula x47=x48.in(x49); + Formula x44=x47.forAll(x45); + Formula x31=x32.and(x44); + Formula x28=x31.forAll(x29); + Expression x52=x12.join(Expression.UNIV); + Expression x51=x52.join(Expression.UNIV); + Formula x50=x51.in(x6); + Variable x55=Variable.unary("PasteCut_this"); + Decls x54=x55.oneOf(x6); + Expression x58=x55.join(x13); + Formula x57=x58.one(); + Expression x60=x55.join(x11); + Formula x59=x58.in(x60); + Formula x56=x57.and(x59); + Formula x53=x56.forAll(x54); + Expression x62=x13.join(Expression.UNIV); + Formula x61=x62.in(x6); + Variable x65=Variable.unary("PasteCut_this"); + Decls x64=x65.oneOf(x6); + Expression x67=x65.join(x14); + Formula x66=x67.in(x8); + Formula x63=x66.forAll(x64); + Expression x69=x14.join(Expression.UNIV); + Formula x68=x69.in(x6); + Variable x72=Variable.unary("PasteCut_this"); + Decls x71=x72.oneOf(x9); + Expression x74=x72.join(x15); + Formula x73=x74.in(x8); + Formula x70=x73.forAll(x71); + Expression x76=x15.join(Expression.UNIV); + Formula x75=x76.in(x9); + Variable x79=Variable.unary("PasteCut_this"); + Decls x78=x79.oneOf(x9); + Expression x81=x79.join(x16); + Expression x82=x79.join(x15); + Formula x80=x81.in(x82); + Formula x77=x80.forAll(x78); + Expression x84=x16.join(Expression.UNIV); + Formula x83=x84.in(x9); + Variable x87=Variable.unary("PasteCut_this"); + Decls x86=x87.oneOf(x9); + Expression x89=x87.join(x17); + Expression x90=x87.join(x15); + Formula x88=x89.in(x90); + Formula x85=x88.forAll(x86); + Expression x92=x17.join(Expression.UNIV); + Formula x91=x92.in(x9); + Expression x94=x16.intersection(x17); + Formula x93=x94.no(); + Variable x97=Variable.unary("PasteCut_this"); + Decls x96=x97.oneOf(x9); + Expression x99=x97.join(x18); + Expression x101=x97.join(x15); + Expression x100=x101.union(x10); + Formula x98=x99.in(x100); + Formula x95=x98.forAll(x96); + Expression x103=x18.join(Expression.UNIV); + Formula x102=x103.in(x9); + Variable x106=Variable.unary("PasteCut_this"); + Decls x105=x106.oneOf(x9); + Expression x109=x106.join(x16); + Expression x110=x106.join(x17); + Expression x108=x109.union(x110); + Expression x111=x106.join(x15); + Formula x107=x108.eq(x111); + Formula x104=x107.forAll(x105); + Variable x116=Variable.unary("PasteCut_xs"); + Decls x115=x116.oneOf(x6); + Variable x118=Variable.unary("PasteCut_xs'"); + Decls x117=x118.oneOf(x6); + Variable x120=Variable.unary("PasteCut_xs"); + Decls x119=x120.oneOf(x6); + Decls x114=x115.and(x117).and(x119); + Variable x127=Variable.unary("appInv_cs"); + Expression x128=x116.join(x11); + Decls x126=x127.oneOf(x128); + Expression x133=x116.join(x12); + Expression x132=x127.join(x133); + Expression x131=x132.join(x18); + Formula x130=x131.eq(x10); + Expression x136=x132.join(x18); + Formula x135=x136.some(); + Expression x138=x132.join(x18); + Expression x139=x132.join(x17); + Formula x137=x138.in(x139); + Formula x134=x135.and(x137); + Formula x129=x130.or(x134); + Formula x125=x129.forAll(x126); + Expression x144=x118.join(x14); + Expression x145=x116.join(x14); + Formula x143=x144.eq(x145); + Variable x148=Variable.unary("paste_cs'"); + Decls x147=x148.oneOf(x9); + Expression x152=x148.join(x15); + Expression x156=x116.join(x13); + Expression x157=x116.join(x12); + Expression x155=x156.join(x157); + Expression x154=x155.join(x15); + Expression x153=x154.union(x145); + Formula x151=x152.eq(x153); + Expression x160=x148.join(x17); + Expression x162=x155.join(x17); + Expression x164=x155.join(x15); + Expression x163=x145.difference(x164); + Expression x161=x162.union(x163); + Formula x159=x160.eq(x161); + Expression x166=x118.join(x12); + Expression x168=x116.join(x12); + Expression x170=x116.join(x13); + Expression x169=x170.product(x148); + Expression x167=x168.override(x169); + Formula x165=x166.eq(x167); + Formula x158=x159.and(x165); + Formula x150=x151.and(x158); + Expression x172=x148.join(x18); + Expression x174=x155.join(x15); + Expression x173=x145.difference(x174); + Formula x171=x172.eq(x173); + Formula x149=x150.and(x171); + Formula x146=x149.forSome(x147); + Formula x142=x143.and(x146); + Expression x176=x118.join(x11); + Expression x177=x116.join(x11); + Formula x175=x176.eq(x177); + Formula x141=x142.and(x175); + Expression x179=x118.join(x13); + Expression x180=x116.join(x13); + Formula x178=x179.eq(x180); + Formula x140=x141.and(x178); + Formula x124=x125.and(x140); + Expression x189=x118.join(x13); + Expression x190=x118.join(x12); + Expression x188=x189.join(x190); + Expression x187=x188.join(x18); + Formula x186=x187.eq(x10); + Formula x185=x186.not(); + Expression x192=x120.join(x14); + Formula x191=x192.eq(x187); + Formula x184=x185.and(x191); + Variable x195=Variable.unary("cut_cs'"); + Decls x194=x195.oneOf(x9); + Expression x199=x195.join(x15); + Expression x201=x188.join(x15); + Expression x200=x201.difference(x187); + Formula x198=x199.eq(x200); + Expression x204=x195.join(x17); + Expression x206=x188.join(x17); + Expression x205=x206.difference(x187); + Formula x203=x204.eq(x205); + Expression x208=x120.join(x12); + Expression x210=x118.join(x12); + Expression x212=x118.join(x13); + Expression x211=x212.product(x195); + Expression x209=x210.override(x211); + Formula x207=x208.eq(x209); + Formula x202=x203.and(x207); + Formula x197=x198.and(x202); + Expression x214=x195.join(x18); + Formula x213=x214.eq(x10); + Formula x196=x197.and(x213); + Formula x193=x196.forSome(x194); + Formula x183=x184.and(x193); + Expression x216=x120.join(x11); + Expression x217=x118.join(x11); + Formula x215=x216.eq(x217); + Formula x182=x183.and(x215); + Expression x219=x120.join(x13); + Expression x220=x118.join(x13); + Formula x218=x219.eq(x220); + Formula x181=x182.and(x218); + Formula x123=x124.and(x181); + Formula x122=x123.not(); + Expression x224=x120.join(x11); + Expression x225=x116.join(x11); + Formula x223=x224.eq(x225); + Variable x229=Variable.unary("sameApplicationState_c"); + Expression x230=x116.join(x11); + Decls x228=x229.oneOf(x230); + Expression x236=x120.join(x12); + Expression x235=x229.join(x236); + Expression x234=x235.join(x15); + Expression x239=x116.join(x12); + Expression x238=x229.join(x239); + Expression x237=x238.join(x15); + Formula x233=x234.eq(x237); + Expression x241=x235.join(x17); + Expression x242=x238.join(x17); + Formula x240=x241.eq(x242); + Formula x232=x233.and(x240); + Expression x244=x235.join(x18); + Expression x245=x238.join(x18); + Formula x243=x244.eq(x245); + Formula x231=x232.and(x243); + Formula x227=x231.forAll(x228); + Expression x247=x120.join(x14); + Expression x248=x116.join(x14); + Formula x246=x247.eq(x248); + Formula x226=x227.and(x246); + Formula x222=x223.and(x226); + Expression x250=x120.join(x13); + Expression x251=x116.join(x13); + Formula x249=x250.eq(x251); + Formula x221=x222.and(x249); + Formula x121=x122.or(x221); + Formula x113=x121.forAll(x114); + Formula x112=x113.not(); + Formula x252=x0.eq(x0); + Formula x253=x1.eq(x1); + Formula x254=x2.eq(x2); + Formula x255=x3.eq(x3); + Formula x256=x4.eq(x4); + Formula x257=x5.eq(x5); + Formula x258=x6.eq(x6); + Formula x259=x7.eq(x7); + Formula x260=x8.eq(x8); + Formula x261=x9.eq(x9); + Formula x262=x10.eq(x10); + Formula x263=x11.eq(x11); + Formula x264=x12.eq(x12); + Formula x265=x13.eq(x13); + Formula x266=x14.eq(x14); + Formula x267=x15.eq(x15); + Formula x268=x16.eq(x16); + Formula x269=x17.eq(x17); + Formula x270=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x25, x28, x50, x53, x61, x63, x68, x70, x75, x77, x83, x85, x91, x93, x95, x102, x104, x112, x252, x253, x254, x255, x256, x257, x258, x259, x260, x261, x262, x263, x264, x265, x266, x267, x268, x269, x270); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsPasteNotAffectHiddenCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsPasteNotAffectHiddenCheck.java new file mode 100644 index 0000000..bc2c88c --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/mediaAssetsPasteNotAffectHiddenCheck.java @@ -0,0 +1,469 @@ +package kodkod.examples.models.softwareAbstractions.chapter6; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "mediaAssets", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 8, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 7, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 35, + OrderedRelations = 0, + Constraints = 48 +) + + +public final class mediaAssetsPasteNotAffectHiddenCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/ApplicationState"); + Relation x7 = Relation.unary("this/Catalog"); + Relation x8 = Relation.unary("this/Asset"); + Relation x9 = Relation.unary("this/CatalogState"); + Relation x10 = Relation.unary("this/Undefined"); + Relation x11 = Relation.nary("this/ApplicationState.catalogs", 2); + Relation x12 = Relation.nary("this/ApplicationState.catalogState", 3); + Relation x13 = Relation.nary("this/ApplicationState.currentCatalog", 2); + Relation x14 = Relation.nary("this/ApplicationState.buffer", 2); + Relation x15 = Relation.nary("this/CatalogState.assets", 2); + Relation x16 = Relation.nary("this/CatalogState.hidden", 2); + Relation x17 = Relation.nary("this/CatalogState.showing", 2); + Relation x18 = Relation.nary("this/CatalogState.selection", 2); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "ApplicationState$0", + "ApplicationState$1", "ApplicationState$2", "Asset$0", "Asset$1", "Asset$2", "Catalog$0", + "Catalog$1", "Catalog$2", "CatalogState$0", "CatalogState$1", "CatalogState$2", "Undefined$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("ApplicationState$0")); + x6_upper.add(factory.tuple("ApplicationState$1")); + x6_upper.add(factory.tuple("ApplicationState$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Catalog$0")); + x7_upper.add(factory.tuple("Catalog$1")); + x7_upper.add(factory.tuple("Catalog$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Asset$0")); + x8_upper.add(factory.tuple("Asset$1")); + x8_upper.add(factory.tuple("Asset$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("CatalogState$0")); + x9_upper.add(factory.tuple("CatalogState$1")); + x9_upper.add(factory.tuple("CatalogState$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("Undefined$0")); + bounds.boundExactly(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(2); + x11_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0"))); + x11_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1"))); + x11_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2"))); + x11_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0"))); + x11_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1"))); + x11_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2"))); + x11_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0"))); + x11_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1"))); + x11_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(3); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1")).product(factory.tuple("CatalogState$2"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$0"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$1"))); + x12_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2")).product(factory.tuple("CatalogState$2"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$0"))); + x13_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$1"))); + x13_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Catalog$2"))); + x13_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$0"))); + x13_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$1"))); + x13_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Catalog$2"))); + x13_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$0"))); + x13_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$1"))); + x13_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Catalog$2"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Asset$0"))); + x14_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Asset$1"))); + x14_upper.add(factory.tuple("ApplicationState$0").product(factory.tuple("Asset$2"))); + x14_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Asset$0"))); + x14_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Asset$1"))); + x14_upper.add(factory.tuple("ApplicationState$1").product(factory.tuple("Asset$2"))); + x14_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Asset$0"))); + x14_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Asset$1"))); + x14_upper.add(factory.tuple("ApplicationState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x15_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x15_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x15_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x15_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x15_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x15_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x15_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x15_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x16_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x16_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x16_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x16_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x16_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x16_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x16_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x16_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(2); + x17_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x17_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x17_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x17_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x17_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x17_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x17_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x17_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x17_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(2); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$0"))); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$1"))); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Asset$2"))); + x18_upper.add(factory.tuple("CatalogState$0").product(factory.tuple("Undefined$0"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$0"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$1"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Asset$2"))); + x18_upper.add(factory.tuple("CatalogState$1").product(factory.tuple("Undefined$0"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$0"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$1"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Asset$2"))); + x18_upper.add(factory.tuple("CatalogState$2").product(factory.tuple("Undefined$0"))); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("PasteNotAffectHidden_this"); + Decls x21=x22.oneOf(x6); + Expression x24=x22.join(x11); + Formula x23=x24.in(x7); + Formula x20=x23.forAll(x21); + Expression x26=x11.join(Expression.UNIV); + Formula x25=x26.in(x6); + Variable x30=Variable.unary("PasteNotAffectHidden_this"); + Decls x29=x30.oneOf(x6); + Expression x34=x30.join(x12); + Expression x36=x30.join(x11); + Expression x35=x36.product(x9); + Formula x33=x34.in(x35); + Variable x39=Variable.unary(""); + Decls x38=x39.oneOf(x36); + Expression x42=x39.join(x34); + Formula x41=x42.one(); + Formula x43=x42.in(x9); + Formula x40=x41.and(x43); + Formula x37=x40.forAll(x38); + Formula x32=x33.and(x37); + Variable x46=Variable.unary(""); + Decls x45=x46.oneOf(x9); + Expression x48=x34.join(x46); + Expression x49=x30.join(x11); + Formula x47=x48.in(x49); + Formula x44=x47.forAll(x45); + Formula x31=x32.and(x44); + Formula x28=x31.forAll(x29); + Expression x52=x12.join(Expression.UNIV); + Expression x51=x52.join(Expression.UNIV); + Formula x50=x51.in(x6); + Variable x55=Variable.unary("PasteNotAffectHidden_this"); + Decls x54=x55.oneOf(x6); + Expression x58=x55.join(x13); + Formula x57=x58.one(); + Expression x60=x55.join(x11); + Formula x59=x58.in(x60); + Formula x56=x57.and(x59); + Formula x53=x56.forAll(x54); + Expression x62=x13.join(Expression.UNIV); + Formula x61=x62.in(x6); + Variable x65=Variable.unary("PasteNotAffectHidden_this"); + Decls x64=x65.oneOf(x6); + Expression x67=x65.join(x14); + Formula x66=x67.in(x8); + Formula x63=x66.forAll(x64); + Expression x69=x14.join(Expression.UNIV); + Formula x68=x69.in(x6); + Variable x72=Variable.unary("PasteNotAffectHidden_this"); + Decls x71=x72.oneOf(x9); + Expression x74=x72.join(x15); + Formula x73=x74.in(x8); + Formula x70=x73.forAll(x71); + Expression x76=x15.join(Expression.UNIV); + Formula x75=x76.in(x9); + Variable x79=Variable.unary("PasteNotAffectHidden_this"); + Decls x78=x79.oneOf(x9); + Expression x81=x79.join(x16); + Expression x82=x79.join(x15); + Formula x80=x81.in(x82); + Formula x77=x80.forAll(x78); + Expression x84=x16.join(Expression.UNIV); + Formula x83=x84.in(x9); + Variable x87=Variable.unary("PasteNotAffectHidden_this"); + Decls x86=x87.oneOf(x9); + Expression x89=x87.join(x17); + Expression x90=x87.join(x15); + Formula x88=x89.in(x90); + Formula x85=x88.forAll(x86); + Expression x92=x17.join(Expression.UNIV); + Formula x91=x92.in(x9); + Expression x94=x16.intersection(x17); + Formula x93=x94.no(); + Variable x97=Variable.unary("PasteNotAffectHidden_this"); + Decls x96=x97.oneOf(x9); + Expression x99=x97.join(x18); + Expression x101=x97.join(x15); + Expression x100=x101.union(x10); + Formula x98=x99.in(x100); + Formula x95=x98.forAll(x96); + Expression x103=x18.join(Expression.UNIV); + Formula x102=x103.in(x9); + Variable x106=Variable.unary("PasteNotAffectHidden_this"); + Decls x105=x106.oneOf(x9); + Expression x109=x106.join(x16); + Expression x110=x106.join(x17); + Expression x108=x109.union(x110); + Expression x111=x106.join(x15); + Formula x107=x108.eq(x111); + Formula x104=x107.forAll(x105); + Variable x116=Variable.unary("PasteNotAffectHidden_xs"); + Decls x115=x116.oneOf(x6); + Variable x118=Variable.unary("PasteNotAffectHidden_xs'"); + Decls x117=x118.oneOf(x6); + Decls x114=x115.and(x117); + Variable x124=Variable.unary("appInv_cs"); + Expression x125=x116.join(x11); + Decls x123=x124.oneOf(x125); + Expression x130=x116.join(x12); + Expression x129=x124.join(x130); + Expression x128=x129.join(x18); + Formula x127=x128.eq(x10); + Expression x133=x129.join(x18); + Formula x132=x133.some(); + Expression x135=x129.join(x18); + Expression x136=x129.join(x17); + Formula x134=x135.in(x136); + Formula x131=x132.and(x134); + Formula x126=x127.or(x131); + Formula x122=x126.forAll(x123); + Expression x141=x118.join(x14); + Expression x142=x116.join(x14); + Formula x140=x141.eq(x142); + Variable x145=Variable.unary("paste_cs'"); + Decls x144=x145.oneOf(x9); + Expression x149=x145.join(x15); + Expression x153=x116.join(x13); + Expression x154=x116.join(x12); + Expression x152=x153.join(x154); + Expression x151=x152.join(x15); + Expression x150=x151.union(x142); + Formula x148=x149.eq(x150); + Expression x157=x145.join(x17); + Expression x159=x152.join(x17); + Expression x161=x152.join(x15); + Expression x160=x142.difference(x161); + Expression x158=x159.union(x160); + Formula x156=x157.eq(x158); + Expression x163=x118.join(x12); + Expression x165=x116.join(x12); + Expression x167=x116.join(x13); + Expression x166=x167.product(x145); + Expression x164=x165.override(x166); + Formula x162=x163.eq(x164); + Formula x155=x156.and(x162); + Formula x147=x148.and(x155); + Expression x169=x145.join(x18); + Expression x171=x152.join(x15); + Expression x170=x142.difference(x171); + Formula x168=x169.eq(x170); + Formula x146=x147.and(x168); + Formula x143=x146.forSome(x144); + Formula x139=x140.and(x143); + Expression x173=x118.join(x11); + Expression x174=x116.join(x11); + Formula x172=x173.eq(x174); + Formula x138=x139.and(x172); + Expression x176=x118.join(x13); + Expression x177=x116.join(x13); + Formula x175=x176.eq(x177); + Formula x137=x138.and(x175); + Formula x121=x122.and(x137); + Formula x120=x121.not(); + Expression x181=x116.join(x13); + Expression x182=x118.join(x12); + Expression x180=x181.join(x182); + Expression x179=x180.join(x16); + Expression x185=x116.join(x12); + Expression x184=x181.join(x185); + Expression x183=x184.join(x16); + Formula x178=x179.eq(x183); + Formula x119=x120.or(x178); + Formula x113=x119.forAll(x114); + Formula x112=x113.not(); + Formula x186=x0.eq(x0); + Formula x187=x1.eq(x1); + Formula x188=x2.eq(x2); + Formula x189=x3.eq(x3); + Formula x190=x4.eq(x4); + Formula x191=x5.eq(x5); + Formula x192=x6.eq(x6); + Formula x193=x7.eq(x7); + Formula x194=x8.eq(x8); + Formula x195=x9.eq(x9); + Formula x196=x10.eq(x10); + Formula x197=x11.eq(x11); + Formula x198=x12.eq(x12); + Formula x199=x13.eq(x13); + Formula x200=x14.eq(x14); + Formula x201=x15.eq(x15); + Formula x202=x16.eq(x16); + Formula x203=x17.eq(x17); + Formula x204=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x25, x28, x50, x53, x61, x63, x68, x70, x75, x77, x83, x85, x91, x93, x95, x102, x104, x112, x186, x187, x188, x189, x190, x191, x192, x193, x194, x195, x196, x197, x198, x199, x200, x201, x202, x203, x204); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/memory/abstractMemoryWriteIdempotentCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/memory/abstractMemoryWriteIdempotentCheck.java new file mode 100644 index 0000000..47f3bba --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/memory/abstractMemoryWriteIdempotentCheck.java @@ -0,0 +1,253 @@ +package kodkod.examples.models.softwareAbstractions.chapter6.memory; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "abstractMemory", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 1, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 1, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 5, + OrderedRelations = 0, + Constraints = 8 +) + + + +public final class abstractMemoryWriteIdempotentCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Addr"); + Relation x7 = Relation.unary("this/Data"); + Relation x8 = Relation.unary("this/Memory"); + Relation x9 = Relation.nary("this/Memory.data", 3); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Addr$0", + "Addr$1", "Addr$2", "Data$0", "Data$1", "Data$2", "Memory$0", + "Memory$1", "Memory$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Addr$0")); + x6_upper.add(factory.tuple("Addr$1")); + x6_upper.add(factory.tuple("Addr$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Data$0")); + x7_upper.add(factory.tuple("Data$1")); + x7_upper.add(factory.tuple("Data$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Memory$0")); + x8_upper.add(factory.tuple("Memory$1")); + x8_upper.add(factory.tuple("Memory$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(3); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$0")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$0")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$0")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$1")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$1")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$1")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$2")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$2")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$2")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$0")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$0")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$0")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$1")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$1")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$1")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$2")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$2")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$2")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$0")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$0")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$0")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$1")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$1")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$1")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$2")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$2")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$2")).product(factory.tuple("Data$2"))); + bounds.bound(x9, x9_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x13=Variable.unary("WriteIdempotent_this"); + Decls x12=x13.oneOf(x8); + Expression x17=x13.join(x9); + Expression x18=x6.product(x7); + Formula x16=x17.in(x18); + Variable x21=Variable.unary(""); + Decls x20=x21.oneOf(x6); + Expression x24=x21.join(x17); + Formula x23=x24.lone(); + Formula x25=x24.in(x7); + Formula x22=x23.and(x25); + Formula x19=x22.forAll(x20); + Formula x15=x16.and(x19); + Variable x28=Variable.unary(""); + Decls x27=x28.oneOf(x7); + Expression x30=x17.join(x28); + Formula x29=x30.in(x6); + Formula x26=x29.forAll(x27); + Formula x14=x15.and(x26); + Formula x11=x14.forAll(x12); + Expression x33=x9.join(Expression.UNIV); + Expression x32=x33.join(Expression.UNIV); + Formula x31=x32.in(x8); + Variable x38=Variable.unary("WriteIdempotent_m"); + Decls x37=x38.oneOf(x8); + Variable x40=Variable.unary("WriteIdempotent_m'"); + Decls x39=x40.oneOf(x8); + Decls x36=x37.and(x39); + Expression x44=x38.intersection(x40); + Formula x43=x44.no(); + Expression x46=x38.join(x9); + Expression x47=x40.join(x9); + Formula x45=x46.eq(x47); + Formula x42=x43.and(x45); + Formula x41=x42.not(); + Formula x35=x41.forAll(x36); + Variable x52=Variable.unary("WriteIdempotent_m"); + Decls x51=x52.oneOf(x8); + Variable x54=Variable.unary("WriteIdempotent_m'"); + Decls x53=x54.oneOf(x8); + Variable x56=Variable.unary("WriteIdempotent_m"); + Decls x55=x56.oneOf(x8); + Variable x58=Variable.unary("WriteIdempotent_a"); + Decls x57=x58.oneOf(x6); + Variable x60=Variable.unary("WriteIdempotent_d"); + Decls x59=x60.oneOf(x7); + Decls x50=x51.and(x53).and(x55).and(x57).and(x59); + Expression x65=x54.join(x9); + Expression x67=x52.join(x9); + Expression x68=x58.product(x60); + Expression x66=x67.override(x68); + Formula x64=x65.eq(x66); + Expression x70=x56.join(x9); + Expression x72=x54.join(x9); + Expression x73=x58.product(x60); + Expression x71=x72.override(x73); + Formula x69=x70.eq(x71); + Formula x63=x64.and(x69); + Formula x62=x63.not(); + Formula x74=x54.eq(x56); + Formula x61=x62.or(x74); + Formula x49=x61.forAll(x50); + Formula x48=x49.not(); + Formula x75=x0.eq(x0); + Formula x76=x1.eq(x1); + Formula x77=x2.eq(x2); + Formula x78=x3.eq(x3); + Formula x79=x4.eq(x4); + Formula x80=x5.eq(x5); + Formula x81=x6.eq(x6); + Formula x82=x7.eq(x7); + Formula x83=x8.eq(x8); + Formula x84=x9.eq(x9); + Formula x10=Formula.compose(FormulaOperator.AND, x11, x31, x35, x48, x75, x76, x77, x78, x79, x80, x81, x82, x83, x84); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x10,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/memory/abstractMemoryWriteReadCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/memory/abstractMemoryWriteReadCheck.java new file mode 100644 index 0000000..14eb827 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/memory/abstractMemoryWriteReadCheck.java @@ -0,0 +1,254 @@ +package kodkod.examples.models.softwareAbstractions.chapter6.memory; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "abstractMemory", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 1, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 1, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 5, + OrderedRelations = 0, + Constraints = 8 +) + + + +public final class abstractMemoryWriteReadCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Addr"); + Relation x7 = Relation.unary("this/Data"); + Relation x8 = Relation.unary("this/Memory"); + Relation x9 = Relation.nary("this/Memory.data", 3); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Addr$0", + "Addr$1", "Addr$2", "Data$0", "Data$1", "Data$2", "Memory$0", + "Memory$1", "Memory$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Addr$0")); + x6_upper.add(factory.tuple("Addr$1")); + x6_upper.add(factory.tuple("Addr$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Data$0")); + x7_upper.add(factory.tuple("Data$1")); + x7_upper.add(factory.tuple("Data$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Memory$0")); + x8_upper.add(factory.tuple("Memory$1")); + x8_upper.add(factory.tuple("Memory$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(3); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$0")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$0")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$0")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$1")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$1")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$1")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$2")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$2")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$0").product(factory.tuple("Addr$2")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$0")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$0")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$0")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$1")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$1")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$1")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$2")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$2")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$1").product(factory.tuple("Addr$2")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$0")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$0")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$0")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$1")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$1")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$1")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$2")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$2")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("Memory$2").product(factory.tuple("Addr$2")).product(factory.tuple("Data$2"))); + bounds.bound(x9, x9_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x13=Variable.unary("WriteRead_this"); + Decls x12=x13.oneOf(x8); + Expression x17=x13.join(x9); + Expression x18=x6.product(x7); + Formula x16=x17.in(x18); + Variable x21=Variable.unary(""); + Decls x20=x21.oneOf(x6); + Expression x24=x21.join(x17); + Formula x23=x24.lone(); + Formula x25=x24.in(x7); + Formula x22=x23.and(x25); + Formula x19=x22.forAll(x20); + Formula x15=x16.and(x19); + Variable x28=Variable.unary(""); + Decls x27=x28.oneOf(x7); + Expression x30=x17.join(x28); + Formula x29=x30.in(x6); + Formula x26=x29.forAll(x27); + Formula x14=x15.and(x26); + Formula x11=x14.forAll(x12); + Expression x33=x9.join(Expression.UNIV); + Expression x32=x33.join(Expression.UNIV); + Formula x31=x32.in(x8); + Variable x38=Variable.unary("WriteRead_m"); + Decls x37=x38.oneOf(x8); + Variable x40=Variable.unary("WriteRead_m'"); + Decls x39=x40.oneOf(x8); + Decls x36=x37.and(x39); + Expression x44=x38.intersection(x40); + Formula x43=x44.no(); + Expression x46=x38.join(x9); + Expression x47=x40.join(x9); + Formula x45=x46.eq(x47); + Formula x42=x43.and(x45); + Formula x41=x42.not(); + Formula x35=x41.forAll(x36); + Variable x52=Variable.unary("WriteRead_m"); + Decls x51=x52.oneOf(x8); + Variable x54=Variable.unary("WriteRead_m'"); + Decls x53=x54.oneOf(x8); + Variable x56=Variable.unary("WriteRead_a"); + Decls x55=x56.oneOf(x6); + Variable x58=Variable.unary("WriteRead_d1"); + Decls x57=x58.oneOf(x7); + Variable x60=Variable.unary("WriteRead_d2"); + Decls x59=x60.oneOf(x7); + Decls x50=x51.and(x53).and(x55).and(x57).and(x59); + Expression x65=x54.join(x9); + Expression x67=x52.join(x9); + Expression x68=x56.product(x58); + Expression x66=x67.override(x68); + Formula x64=x65.eq(x66); + Expression x73=x54.join(x9); + Expression x72=x56.join(x73); + Formula x71=x72.some(); + Formula x70=x71.not(); + Formula x74=x60.eq(x72); + Formula x69=x70.or(x74); + Formula x63=x64.and(x69); + Formula x62=x63.not(); + Formula x75=x58.eq(x60); + Formula x61=x62.or(x75); + Formula x49=x61.forAll(x50); + Formula x48=x49.not(); + Formula x76=x0.eq(x0); + Formula x77=x1.eq(x1); + Formula x78=x2.eq(x2); + Formula x79=x3.eq(x3); + Formula x80=x4.eq(x4); + Formula x81=x5.eq(x5); + Formula x82=x6.eq(x6); + Formula x83=x7.eq(x7); + Formula x84=x8.eq(x8); + Formula x85=x9.eq(x9); + Formula x10=Formula.compose(FormulaOperator.AND, x11, x31, x35, x48, x76, x77, x78, x79, x80, x81, x82, x83, x84, x85); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x10,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/memory/cacheMemoryLoadNotObservableCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/memory/cacheMemoryLoadNotObservableCheck.java new file mode 100644 index 0000000..6db5482 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/memory/cacheMemoryLoadNotObservableCheck.java @@ -0,0 +1,333 @@ +package kodkod.examples.models.softwareAbstractions.chapter6.memory; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "cacheMemory", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 1, + TernaryRelations =2, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 3, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 12 +) + + + +public final class cacheMemoryLoadNotObservableCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Addr"); + Relation x7 = Relation.unary("this/Data"); + Relation x8 = Relation.unary("this/CacheSystem"); + Relation x9 = Relation.nary("this/CacheSystem.main", 3); + Relation x10 = Relation.nary("this/CacheSystem.cache", 3); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Addr$0", + "Addr$1", "Addr$2", "CacheSystem$0", "CacheSystem$1", "CacheSystem$2", "Data$0", + "Data$1", "Data$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Addr$0")); + x6_upper.add(factory.tuple("Addr$1")); + x6_upper.add(factory.tuple("Addr$2")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Data$0")); + x7_upper.add(factory.tuple("Data$1")); + x7_upper.add(factory.tuple("Data$2")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("CacheSystem$0")); + x8_upper.add(factory.tuple("CacheSystem$1")); + x8_upper.add(factory.tuple("CacheSystem$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(3); + x9_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$0")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$0")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$0")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$1")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$1")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$1")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$2")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$2")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$2")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$0")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$0")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$0")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$1")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$1")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$1")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$2")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$2")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$2")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$0")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$0")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$0")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$1")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$1")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$1")).product(factory.tuple("Data$2"))); + x9_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$2")).product(factory.tuple("Data$0"))); + x9_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$2")).product(factory.tuple("Data$1"))); + x9_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$2")).product(factory.tuple("Data$2"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(3); + x10_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$0")).product(factory.tuple("Data$0"))); + x10_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$0")).product(factory.tuple("Data$1"))); + x10_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$0")).product(factory.tuple("Data$2"))); + x10_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$1")).product(factory.tuple("Data$0"))); + x10_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$1")).product(factory.tuple("Data$1"))); + x10_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$1")).product(factory.tuple("Data$2"))); + x10_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$2")).product(factory.tuple("Data$0"))); + x10_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$2")).product(factory.tuple("Data$1"))); + x10_upper.add(factory.tuple("CacheSystem$0").product(factory.tuple("Addr$2")).product(factory.tuple("Data$2"))); + x10_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$0")).product(factory.tuple("Data$0"))); + x10_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$0")).product(factory.tuple("Data$1"))); + x10_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$0")).product(factory.tuple("Data$2"))); + x10_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$1")).product(factory.tuple("Data$0"))); + x10_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$1")).product(factory.tuple("Data$1"))); + x10_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$1")).product(factory.tuple("Data$2"))); + x10_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$2")).product(factory.tuple("Data$0"))); + x10_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$2")).product(factory.tuple("Data$1"))); + x10_upper.add(factory.tuple("CacheSystem$1").product(factory.tuple("Addr$2")).product(factory.tuple("Data$2"))); + x10_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$0")).product(factory.tuple("Data$0"))); + x10_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$0")).product(factory.tuple("Data$1"))); + x10_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$0")).product(factory.tuple("Data$2"))); + x10_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$1")).product(factory.tuple("Data$0"))); + x10_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$1")).product(factory.tuple("Data$1"))); + x10_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$1")).product(factory.tuple("Data$2"))); + x10_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$2")).product(factory.tuple("Data$0"))); + x10_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$2")).product(factory.tuple("Data$1"))); + x10_upper.add(factory.tuple("CacheSystem$2").product(factory.tuple("Addr$2")).product(factory.tuple("Data$2"))); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x14=Variable.unary("LoadNotObservable_this"); + Decls x13=x14.oneOf(x8); + Expression x18=x14.join(x9); + Expression x19=x6.product(x7); + Formula x17=x18.in(x19); + Variable x22=Variable.unary(""); + Decls x21=x22.oneOf(x6); + Expression x25=x22.join(x18); + Formula x24=x25.lone(); + Formula x26=x25.in(x7); + Formula x23=x24.and(x26); + Formula x20=x23.forAll(x21); + Formula x16=x17.and(x20); + Variable x29=Variable.unary(""); + Decls x28=x29.oneOf(x7); + Expression x31=x18.join(x29); + Formula x30=x31.in(x6); + Formula x27=x30.forAll(x28); + Formula x15=x16.and(x27); + Formula x12=x15.forAll(x13); + Expression x34=x9.join(Expression.UNIV); + Expression x33=x34.join(Expression.UNIV); + Formula x32=x33.in(x8); + Variable x38=Variable.unary("LoadNotObservable_this"); + Decls x37=x38.oneOf(x8); + Expression x42=x38.join(x10); + Expression x43=x6.product(x7); + Formula x41=x42.in(x43); + Variable x46=Variable.unary(""); + Decls x45=x46.oneOf(x6); + Expression x49=x46.join(x42); + Formula x48=x49.lone(); + Formula x50=x49.in(x7); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Formula x40=x41.and(x44); + Variable x53=Variable.unary(""); + Decls x52=x53.oneOf(x7); + Expression x55=x42.join(x53); + Formula x54=x55.in(x6); + Formula x51=x54.forAll(x52); + Formula x39=x40.and(x51); + Formula x36=x39.forAll(x37); + Expression x58=x10.join(Expression.UNIV); + Expression x57=x58.join(Expression.UNIV); + Formula x56=x57.in(x8); + Variable x63=Variable.unary("LoadNotObservable_c"); + Decls x62=x63.oneOf(x8); + Variable x65=Variable.unary("LoadNotObservable_c'"); + Decls x64=x65.oneOf(x8); + Variable x67=Variable.unary("LoadNotObservable_c"); + Decls x66=x67.oneOf(x8); + Variable x69=Variable.unary("LoadNotObservable_a1"); + Decls x68=x69.oneOf(x6); + Variable x71=Variable.unary("LoadNotObservable_a2"); + Decls x70=x71.oneOf(x6); + Variable x73=Variable.unary("LoadNotObservable_d1"); + Decls x72=x73.oneOf(x7); + Variable x75=Variable.unary("LoadNotObservable_d2"); + Decls x74=x75.oneOf(x7); + Variable x77=Variable.unary("LoadNotObservable_d3"); + Decls x76=x77.oneOf(x7); + Decls x61=x62.and(x64).and(x66).and(x68).and(x70).and(x72).and(x74).and(x76); + Formula x83=x75.some(); + Expression x86=x63.join(x10); + Expression x85=x71.join(x86); + Formula x84=x75.eq(x85); + Formula x82=x83.and(x84); + Expression x90=x65.join(x9); + Expression x91=x63.join(x9); + Formula x89=x90.eq(x91); + Expression x93=x65.join(x10); + Expression x95=x63.join(x10); + Expression x96=x69.product(x73); + Expression x94=x95.override(x96); + Formula x92=x93.eq(x94); + Formula x88=x89.and(x92); + Formula x98=x77.some(); + Expression x101=x67.join(x10); + Expression x100=x71.join(x101); + Formula x99=x77.eq(x100); + Formula x97=x98.and(x99); + Formula x87=x88.and(x97); + Formula x81=x82.and(x87); + Variable x105=Variable.unary("load_addrs"); + Expression x108=x65.join(x9); + Expression x107=x108.join(x7); + Expression x110=x65.join(x10); + Expression x109=x110.join(x7); + Expression x106=x107.difference(x109); + Decls x104=x105.setOf(x106); + Expression x112=x67.join(x10); + Expression x114=x65.join(x10); + Expression x116=x105.product(Expression.UNIV); + Expression x117=x65.join(x9); + Expression x115=x116.intersection(x117); + Expression x113=x114.override(x115); + Formula x111=x112.eq(x113); + Formula x103=x111.forSome(x104); + Expression x119=x67.join(x9); + Expression x120=x65.join(x9); + Formula x118=x119.eq(x120); + Formula x102=x103.and(x118); + Formula x80=x81.and(x102); + Formula x79=x80.not(); + Formula x123=x69.eq(x71); + Expression x122=x123.thenElse(x73,x75); + Formula x121=x77.eq(x122); + Formula x78=x79.or(x121); + Formula x60=x78.forAll(x61); + Formula x59=x60.not(); + Formula x124=x0.eq(x0); + Formula x125=x1.eq(x1); + Formula x126=x2.eq(x2); + Formula x127=x3.eq(x3); + Formula x128=x4.eq(x4); + Formula x129=x5.eq(x5); + Formula x130=x6.eq(x6); + Formula x131=x7.eq(x7); + Formula x132=x8.eq(x8); + Formula x133=x9.eq(x9); + Formula x134=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x32, x36, x56, x59, x124, x125, x126, x127, x128, x129, x130, x131, x132, x133, x134); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2AtLeastOneElectedCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2AtLeastOneElectedCheck.java new file mode 100644 index 0000000..095c66e --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2AtLeastOneElectedCheck.java @@ -0,0 +1,537 @@ +package kodkod.examples.models.softwareAbstractions.chapter6; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ringElection2", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 7, + TransitiveClosure = 3, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 10, + OrderedRelations = 2, + Constraints = 17 +) + + +public final class ringElection2AtLeastOneElectedCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Time"); + Relation x7 = Relation.unary("this/Process"); + Relation x8 = Relation.unary("TO/Ord"); + Relation x9 = Relation.unary("PO/Ord"); + Relation x10 = Relation.nary("this/Process.succ", 2); + Relation x11 = Relation.nary("this/Process.toSend", 3); + Relation x12 = Relation.nary("this/Process.elected", 2); + Relation x13 = Relation.unary("TO/Ord.First"); + Relation x14 = Relation.nary("TO/Ord.Next", 2); + Relation x15 = Relation.unary("PO/Ord.First"); + Relation x16 = Relation.nary("PO/Ord.Next", 2); + Relation x17 = Relation.unary(""); + Relation x18 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "PO/Ord$0", + "Process$0", "Process$1", "Process$2", "TO/Ord$0", "Time$0", "Time$1", + "Time$2", "Time$3", "Time$4", "Time$5", "Time$6" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Time$0")); + x6_upper.add(factory.tuple("Time$1")); + x6_upper.add(factory.tuple("Time$2")); + x6_upper.add(factory.tuple("Time$3")); + x6_upper.add(factory.tuple("Time$4")); + x6_upper.add(factory.tuple("Time$5")); + x6_upper.add(factory.tuple("Time$6")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Process$0")); + x7_upper.add(factory.tuple("Process$1")); + x7_upper.add(factory.tuple("Process$2")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("TO/Ord$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("PO/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x10_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x10_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x10_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x10_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x10_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x10_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x10_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x10_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(3); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$6"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$2"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$3"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$4"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$5"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$6"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$3"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$4"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$5"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$6"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$3"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$4"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$5"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$6"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Time$0")); + x13_upper.add(factory.tuple("Time$1")); + x13_upper.add(factory.tuple("Time$2")); + x13_upper.add(factory.tuple("Time$3")); + x13_upper.add(factory.tuple("Time$4")); + x13_upper.add(factory.tuple("Time$5")); + x13_upper.add(factory.tuple("Time$6")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$6"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("Process$0")); + x15_upper.add(factory.tuple("Process$1")); + x15_upper.add(factory.tuple("Process$2")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x16_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x16_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x16_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x16_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x16_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x16_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x16_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x16_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("Time$0")); + x17_upper.add(factory.tuple("Time$1")); + x17_upper.add(factory.tuple("Time$2")); + x17_upper.add(factory.tuple("Time$3")); + x17_upper.add(factory.tuple("Time$4")); + x17_upper.add(factory.tuple("Time$5")); + x17_upper.add(factory.tuple("Time$6")); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Process$0")); + x18_upper.add(factory.tuple("Process$1")); + x18_upper.add(factory.tuple("Process$2")); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("AtLeastOneElected_this"); + Decls x21=x22.oneOf(x7); + Expression x25=x22.join(x10); + Formula x24=x25.one(); + Formula x26=x25.in(x7); + Formula x23=x24.and(x26); + Formula x20=x23.forAll(x21); + Expression x28=x10.join(Expression.UNIV); + Formula x27=x28.in(x7); + Variable x32=Variable.unary("AtLeastOneElected_this"); + Decls x31=x32.oneOf(x7); + Expression x34=x32.join(x11); + Expression x35=x7.product(x6); + Formula x33=x34.in(x35); + Formula x30=x33.forAll(x31); + Expression x38=x11.join(Expression.UNIV); + Expression x37=x38.join(Expression.UNIV); + Formula x36=x37.in(x7); + Variable x41=Variable.unary("AtLeastOneElected_this"); + Decls x40=x41.oneOf(x7); + Expression x43=x41.join(x12); + Formula x42=x43.in(x6); + Formula x39=x42.forAll(x40); + Expression x45=x12.join(Expression.UNIV); + Formula x44=x45.in(x7); + Expression x48=x8.product(x13); + Expression x47=x8.join(x48); + Formula x46=x47.in(x6); + Expression x51=x8.product(x14); + Expression x50=x8.join(x51); + Expression x52=x6.product(x6); + Formula x49=x50.in(x52); + Formula x53=x14.totalOrder(x6,x13,x17); + Expression x56=x9.product(x15); + Expression x55=x9.join(x56); + Formula x54=x55.in(x7); + Expression x59=x9.product(x16); + Expression x58=x9.join(x59); + Expression x60=x7.product(x7); + Formula x57=x58.in(x60); + Formula x61=x16.totalOrder(x7,x15,x18); + Variable x64=Variable.unary("AtLeastOneElected_p"); + Decls x63=x64.oneOf(x7); + Expression x67=x10.closure(); + Expression x66=x64.join(x67); + Formula x65=x7.in(x66); + Formula x62=x65.forAll(x63); + Expression x69=x12.join(x13); + Formula x68=x69.no(); + Variable x72=Variable.unary("AtLeastOneElected_t"); + Expression x73=x6.difference(x13); + Decls x71=x72.oneOf(x73); + Expression x75=x12.join(x72); + Variable x78=Variable.unary("AtLeastOneElected_p"); + Decls x77=x78.oneOf(x7); + Expression x82=x78.join(x11); + Expression x81=x82.join(x72); + Expression x84=x78.join(x11); + Expression x86=x14.transpose(); + Expression x85=x72.join(x86); + Expression x83=x84.join(x85); + Expression x80=x81.difference(x83); + Formula x79=x78.in(x80); + Expression x76=x79.comprehension(x77); + Formula x74=x75.eq(x76); + Formula x70=x74.forAll(x71); + Variable x89=Variable.unary("init_p"); + Decls x88=x89.oneOf(x7); + Expression x92=x89.join(x11); + Expression x91=x92.join(x13); + Formula x90=x91.eq(x89); + Formula x87=x90.forAll(x88); + Variable x95=Variable.unary("AtLeastOneElected_t"); + Expression x98=x14.join(x6); + Expression x97=x6.difference(x98); + Expression x96=x6.difference(x97); + Decls x94=x95.oneOf(x96); + Variable x101=Variable.unary("AtLeastOneElected_p"); + Decls x100=x101.oneOf(x7); + Variable x106=Variable.unary("step_id"); + Expression x108=x101.join(x11); + Expression x107=x108.join(x95); + Decls x105=x106.oneOf(x107); + Expression x112=x95.join(x14); + Expression x111=x108.join(x112); + Expression x114=x108.join(x95); + Expression x113=x114.difference(x106); + Formula x110=x111.eq(x113); + Expression x118=x101.join(x10); + Expression x117=x118.join(x11); + Expression x116=x117.join(x112); + Expression x120=x117.join(x95); + Expression x123=x101.join(x10); + Expression x125=x16.transpose(); + Expression x124=x125.closure(); + Expression x122=x123.join(x124); + Expression x121=x106.difference(x122); + Expression x119=x120.union(x121); + Formula x115=x116.eq(x119); + Formula x109=x110.and(x115); + Formula x104=x109.forSome(x105); + Variable x128=Variable.unary("step_id"); + Expression x131=x10.join(x101); + Expression x130=x131.join(x11); + Expression x129=x130.join(x95); + Decls x127=x128.oneOf(x129); + Expression x134=x130.join(x112); + Expression x136=x130.join(x95); + Expression x135=x136.difference(x128); + Formula x133=x134.eq(x135); + Expression x140=x131.join(x10); + Expression x139=x140.join(x11); + Expression x138=x139.join(x112); + Expression x142=x139.join(x95); + Expression x145=x131.join(x10); + Expression x147=x16.transpose(); + Expression x146=x147.closure(); + Expression x144=x145.join(x146); + Expression x143=x128.difference(x144); + Expression x141=x142.union(x143); + Formula x137=x138.eq(x141); + Formula x132=x133.and(x137); + Formula x126=x132.forSome(x127); + Formula x103=x104.or(x126); + Expression x150=x101.join(x11); + Expression x149=x150.join(x95); + Expression x152=x101.join(x11); + Expression x151=x152.join(x112); + Formula x148=x149.eq(x151); + Formula x102=x103.or(x148); + Formula x99=x102.forAll(x100); + Formula x93=x99.forAll(x94); + Variable x158=Variable.unary("progress_t"); + Expression x159=x6.difference(x97); + Decls x157=x158.oneOf(x159); + Expression x164=x7.join(x11); + Expression x163=x164.join(x158); + Formula x162=x163.some(); + Formula x161=x162.not(); + Variable x167=Variable.unary("progress_p"); + Decls x166=x167.oneOf(x7); + Expression x171=x167.join(x11); + Expression x170=x171.join(x158); + Expression x173=x167.join(x11); + Expression x174=x158.join(x14); + Expression x172=x173.join(x174); + Formula x169=x170.eq(x172); + Formula x168=x169.not(); + Formula x165=x168.forSome(x166); + Formula x160=x161.or(x165); + Formula x156=x160.forAll(x157); + Formula x155=x156.not(); + Expression x176=x12.join(x6); + Formula x175=x176.some(); + Formula x154=x155.or(x175); + Formula x153=x154.not(); + Formula x177=x0.eq(x0); + Formula x178=x1.eq(x1); + Formula x179=x2.eq(x2); + Formula x180=x3.eq(x3); + Formula x181=x4.eq(x4); + Formula x182=x5.eq(x5); + Formula x183=x6.eq(x6); + Formula x184=x7.eq(x7); + Formula x185=x8.eq(x8); + Formula x186=x9.eq(x9); + Formula x187=x10.eq(x10); + Formula x188=x11.eq(x11); + Formula x189=x12.eq(x12); + Formula x190=x13.eq(x13); + Formula x191=x14.eq(x14); + Formula x192=x15.eq(x15); + Formula x193=x16.eq(x16); + Formula x194=x17.eq(x17); + Formula x195=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x27, x30, x36, x39, x44, x46, x49, x53, x54, x57, x61, x62, x68, x70, x87, x93, x153, x177, x178, x179, x180, x181, x182, x183, x184, x185, x186, x187, x188, x189, x190, x191, x192, x193, x194, x195); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2AtMostOneElectedCheck.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2AtMostOneElectedCheck.java new file mode 100644 index 0000000..404916c --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2AtMostOneElectedCheck.java @@ -0,0 +1,516 @@ +package kodkod.examples.models.softwareAbstractions.chapter6; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ringElection2", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 7, + TransitiveClosure = 3, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 10, + OrderedRelations = 2, + Constraints = 17 +) + + +public final class ringElection2AtMostOneElectedCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Time"); + Relation x7 = Relation.unary("this/Process"); + Relation x8 = Relation.unary("TO/Ord"); + Relation x9 = Relation.unary("PO/Ord"); + Relation x10 = Relation.nary("this/Process.succ", 2); + Relation x11 = Relation.nary("this/Process.toSend", 3); + Relation x12 = Relation.nary("this/Process.elected", 2); + Relation x13 = Relation.unary("TO/Ord.First"); + Relation x14 = Relation.nary("TO/Ord.Next", 2); + Relation x15 = Relation.unary("PO/Ord.First"); + Relation x16 = Relation.nary("PO/Ord.Next", 2); + Relation x17 = Relation.unary(""); + Relation x18 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "PO/Ord$0", + "Process$0", "Process$1", "Process$2", "TO/Ord$0", "Time$0", "Time$1", + "Time$2", "Time$3", "Time$4", "Time$5", "Time$6" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Time$0")); + x6_upper.add(factory.tuple("Time$1")); + x6_upper.add(factory.tuple("Time$2")); + x6_upper.add(factory.tuple("Time$3")); + x6_upper.add(factory.tuple("Time$4")); + x6_upper.add(factory.tuple("Time$5")); + x6_upper.add(factory.tuple("Time$6")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Process$0")); + x7_upper.add(factory.tuple("Process$1")); + x7_upper.add(factory.tuple("Process$2")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("TO/Ord$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("PO/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x10_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x10_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x10_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x10_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x10_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x10_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x10_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x10_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(3); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$6"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$2"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$3"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$4"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$5"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$6"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$3"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$4"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$5"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$6"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$3"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$4"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$5"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$6"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Time$0")); + x13_upper.add(factory.tuple("Time$1")); + x13_upper.add(factory.tuple("Time$2")); + x13_upper.add(factory.tuple("Time$3")); + x13_upper.add(factory.tuple("Time$4")); + x13_upper.add(factory.tuple("Time$5")); + x13_upper.add(factory.tuple("Time$6")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$6"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("Process$0")); + x15_upper.add(factory.tuple("Process$1")); + x15_upper.add(factory.tuple("Process$2")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x16_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x16_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x16_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x16_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x16_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x16_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x16_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x16_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("Time$0")); + x17_upper.add(factory.tuple("Time$1")); + x17_upper.add(factory.tuple("Time$2")); + x17_upper.add(factory.tuple("Time$3")); + x17_upper.add(factory.tuple("Time$4")); + x17_upper.add(factory.tuple("Time$5")); + x17_upper.add(factory.tuple("Time$6")); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Process$0")); + x18_upper.add(factory.tuple("Process$1")); + x18_upper.add(factory.tuple("Process$2")); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("AtMostOneElected_this"); + Decls x21=x22.oneOf(x7); + Expression x25=x22.join(x10); + Formula x24=x25.one(); + Formula x26=x25.in(x7); + Formula x23=x24.and(x26); + Formula x20=x23.forAll(x21); + Expression x28=x10.join(Expression.UNIV); + Formula x27=x28.in(x7); + Variable x32=Variable.unary("AtMostOneElected_this"); + Decls x31=x32.oneOf(x7); + Expression x34=x32.join(x11); + Expression x35=x7.product(x6); + Formula x33=x34.in(x35); + Formula x30=x33.forAll(x31); + Expression x38=x11.join(Expression.UNIV); + Expression x37=x38.join(Expression.UNIV); + Formula x36=x37.in(x7); + Variable x41=Variable.unary("AtMostOneElected_this"); + Decls x40=x41.oneOf(x7); + Expression x43=x41.join(x12); + Formula x42=x43.in(x6); + Formula x39=x42.forAll(x40); + Expression x45=x12.join(Expression.UNIV); + Formula x44=x45.in(x7); + Expression x48=x8.product(x13); + Expression x47=x8.join(x48); + Formula x46=x47.in(x6); + Expression x51=x8.product(x14); + Expression x50=x8.join(x51); + Expression x52=x6.product(x6); + Formula x49=x50.in(x52); + Formula x53=x14.totalOrder(x6,x13,x17); + Expression x56=x9.product(x15); + Expression x55=x9.join(x56); + Formula x54=x55.in(x7); + Expression x59=x9.product(x16); + Expression x58=x9.join(x59); + Expression x60=x7.product(x7); + Formula x57=x58.in(x60); + Formula x61=x16.totalOrder(x7,x15,x18); + Variable x64=Variable.unary("AtMostOneElected_p"); + Decls x63=x64.oneOf(x7); + Expression x67=x10.closure(); + Expression x66=x64.join(x67); + Formula x65=x7.in(x66); + Formula x62=x65.forAll(x63); + Expression x69=x12.join(x13); + Formula x68=x69.no(); + Variable x72=Variable.unary("AtMostOneElected_t"); + Expression x73=x6.difference(x13); + Decls x71=x72.oneOf(x73); + Expression x75=x12.join(x72); + Variable x78=Variable.unary("AtMostOneElected_p"); + Decls x77=x78.oneOf(x7); + Expression x82=x78.join(x11); + Expression x81=x82.join(x72); + Expression x84=x78.join(x11); + Expression x86=x14.transpose(); + Expression x85=x72.join(x86); + Expression x83=x84.join(x85); + Expression x80=x81.difference(x83); + Formula x79=x78.in(x80); + Expression x76=x79.comprehension(x77); + Formula x74=x75.eq(x76); + Formula x70=x74.forAll(x71); + Variable x89=Variable.unary("init_p"); + Decls x88=x89.oneOf(x7); + Expression x92=x89.join(x11); + Expression x91=x92.join(x13); + Formula x90=x91.eq(x89); + Formula x87=x90.forAll(x88); + Variable x95=Variable.unary("AtMostOneElected_t"); + Expression x98=x14.join(x6); + Expression x97=x6.difference(x98); + Expression x96=x6.difference(x97); + Decls x94=x95.oneOf(x96); + Variable x101=Variable.unary("AtMostOneElected_p"); + Decls x100=x101.oneOf(x7); + Variable x106=Variable.unary("step_id"); + Expression x108=x101.join(x11); + Expression x107=x108.join(x95); + Decls x105=x106.oneOf(x107); + Expression x112=x95.join(x14); + Expression x111=x108.join(x112); + Expression x114=x108.join(x95); + Expression x113=x114.difference(x106); + Formula x110=x111.eq(x113); + Expression x118=x101.join(x10); + Expression x117=x118.join(x11); + Expression x116=x117.join(x112); + Expression x120=x117.join(x95); + Expression x123=x101.join(x10); + Expression x125=x16.transpose(); + Expression x124=x125.closure(); + Expression x122=x123.join(x124); + Expression x121=x106.difference(x122); + Expression x119=x120.union(x121); + Formula x115=x116.eq(x119); + Formula x109=x110.and(x115); + Formula x104=x109.forSome(x105); + Variable x128=Variable.unary("step_id"); + Expression x131=x10.join(x101); + Expression x130=x131.join(x11); + Expression x129=x130.join(x95); + Decls x127=x128.oneOf(x129); + Expression x134=x130.join(x112); + Expression x136=x130.join(x95); + Expression x135=x136.difference(x128); + Formula x133=x134.eq(x135); + Expression x140=x131.join(x10); + Expression x139=x140.join(x11); + Expression x138=x139.join(x112); + Expression x142=x139.join(x95); + Expression x145=x131.join(x10); + Expression x147=x16.transpose(); + Expression x146=x147.closure(); + Expression x144=x145.join(x146); + Expression x143=x128.difference(x144); + Expression x141=x142.union(x143); + Formula x137=x138.eq(x141); + Formula x132=x133.and(x137); + Formula x126=x132.forSome(x127); + Formula x103=x104.or(x126); + Expression x150=x101.join(x11); + Expression x149=x150.join(x95); + Expression x152=x101.join(x11); + Expression x151=x152.join(x112); + Formula x148=x149.eq(x151); + Formula x102=x103.or(x148); + Formula x99=x102.forAll(x100); + Formula x93=x99.forAll(x94); + Expression x155=x12.join(x6); + Formula x154=x155.lone(); + Formula x153=x154.not(); + Formula x156=x0.eq(x0); + Formula x157=x1.eq(x1); + Formula x158=x2.eq(x2); + Formula x159=x3.eq(x3); + Formula x160=x4.eq(x4); + Formula x161=x5.eq(x5); + Formula x162=x6.eq(x6); + Formula x163=x7.eq(x7); + Formula x164=x8.eq(x8); + Formula x165=x9.eq(x9); + Formula x166=x10.eq(x10); + Formula x167=x11.eq(x11); + Formula x168=x12.eq(x12); + Formula x169=x13.eq(x13); + Formula x170=x14.eq(x14); + Formula x171=x15.eq(x15); + Formula x172=x16.eq(x16); + Formula x173=x17.eq(x17); + Formula x174=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x27, x30, x36, x39, x44, x46, x49, x53, x54, x57, x61, x62, x68, x70, x87, x93, x153, x156, x157, x158, x159, x160, x161, x162, x163, x164, x165, x166, x167, x168, x169, x170, x171, x172, x173, x174); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2LooplessPathRun.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2LooplessPathRun.java new file mode 100644 index 0000000..523abc4 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2LooplessPathRun.java @@ -0,0 +1,698 @@ +package kodkod.examples.models.softwareAbstractions.chapter6; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + + +@ExampleMetadata( + Name = "ringElection2", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 7, + TransitiveClosure = 3, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 10, + OrderedRelations = 2, + Constraints = 17 +) + + +public final class ringElection2LooplessPathRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Time"); + Relation x7 = Relation.unary("this/Process"); + Relation x8 = Relation.unary("TO/Ord"); + Relation x9 = Relation.unary("PO/Ord"); + Relation x10 = Relation.nary("this/Process.succ", 2); + Relation x11 = Relation.nary("this/Process.toSend", 3); + Relation x12 = Relation.nary("this/Process.elected", 2); + Relation x13 = Relation.unary("TO/Ord.First"); + Relation x14 = Relation.nary("TO/Ord.Next", 2); + Relation x15 = Relation.unary("PO/Ord.First"); + Relation x16 = Relation.nary("PO/Ord.Next", 2); + Relation x17 = Relation.unary(""); + Relation x18 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "PO/Ord$0", + "Process$0", "Process$1", "Process$2", "TO/Ord$0", "Time$0", "Time$1", + "Time$10", "Time$11", "Time$2", "Time$3", "Time$4", "Time$5", + "Time$6", "Time$7", "Time$8", "Time$9" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Time$0")); + x6_upper.add(factory.tuple("Time$1")); + x6_upper.add(factory.tuple("Time$2")); + x6_upper.add(factory.tuple("Time$3")); + x6_upper.add(factory.tuple("Time$4")); + x6_upper.add(factory.tuple("Time$5")); + x6_upper.add(factory.tuple("Time$6")); + x6_upper.add(factory.tuple("Time$7")); + x6_upper.add(factory.tuple("Time$8")); + x6_upper.add(factory.tuple("Time$9")); + x6_upper.add(factory.tuple("Time$10")); + x6_upper.add(factory.tuple("Time$11")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Process$0")); + x7_upper.add(factory.tuple("Process$1")); + x7_upper.add(factory.tuple("Process$2")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("TO/Ord$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("PO/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x10_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x10_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x10_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x10_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x10_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x10_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x10_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x10_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(3); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$7"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$8"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$9"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$10"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$11"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$7"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$8"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$9"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$10"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$11"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$7"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$8"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$9"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$10"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$11"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$7"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$8"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$9"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$10"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$11"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$7"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$8"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$9"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$10"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$11"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$7"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$8"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$9"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$10"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$11"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$7"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$8"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$9"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$10"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$11"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$7"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$8"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$9"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$10"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$11"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$4"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$5"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$6"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$7"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$8"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$9"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$10"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$11"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$2"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$3"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$4"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$5"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$6"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$7"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$8"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$9"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$10"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$11"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$3"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$4"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$5"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$6"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$7"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$8"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$9"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$10"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$11"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$3"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$4"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$5"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$6"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$7"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$8"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$9"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$10"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$11"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Time$0")); + x13_upper.add(factory.tuple("Time$1")); + x13_upper.add(factory.tuple("Time$2")); + x13_upper.add(factory.tuple("Time$3")); + x13_upper.add(factory.tuple("Time$4")); + x13_upper.add(factory.tuple("Time$5")); + x13_upper.add(factory.tuple("Time$6")); + x13_upper.add(factory.tuple("Time$7")); + x13_upper.add(factory.tuple("Time$8")); + x13_upper.add(factory.tuple("Time$9")); + x13_upper.add(factory.tuple("Time$10")); + x13_upper.add(factory.tuple("Time$11")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$7"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$8"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$9"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$10"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$11"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$7"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$8"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$9"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$10"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$11"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$7"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$8"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$9"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$10"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$11"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$7"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$8"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$9"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$10"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$11"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$7"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$8"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$9"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$10"))); + x14_upper.add(factory.tuple("Time$4").product(factory.tuple("Time$11"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$7"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$8"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$9"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$10"))); + x14_upper.add(factory.tuple("Time$5").product(factory.tuple("Time$11"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$7"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$8"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$9"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$10"))); + x14_upper.add(factory.tuple("Time$6").product(factory.tuple("Time$11"))); + x14_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$7"))); + x14_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$8"))); + x14_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$9"))); + x14_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$10"))); + x14_upper.add(factory.tuple("Time$7").product(factory.tuple("Time$11"))); + x14_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$7"))); + x14_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$8"))); + x14_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$9"))); + x14_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$10"))); + x14_upper.add(factory.tuple("Time$8").product(factory.tuple("Time$11"))); + x14_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$7"))); + x14_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$8"))); + x14_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$9"))); + x14_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$10"))); + x14_upper.add(factory.tuple("Time$9").product(factory.tuple("Time$11"))); + x14_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$7"))); + x14_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$8"))); + x14_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$9"))); + x14_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$10"))); + x14_upper.add(factory.tuple("Time$10").product(factory.tuple("Time$11"))); + x14_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$4"))); + x14_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$5"))); + x14_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$6"))); + x14_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$7"))); + x14_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$8"))); + x14_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$9"))); + x14_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$10"))); + x14_upper.add(factory.tuple("Time$11").product(factory.tuple("Time$11"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("Process$0")); + x15_upper.add(factory.tuple("Process$1")); + x15_upper.add(factory.tuple("Process$2")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x16_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x16_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x16_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x16_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x16_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x16_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x16_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x16_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("Time$0")); + x17_upper.add(factory.tuple("Time$1")); + x17_upper.add(factory.tuple("Time$2")); + x17_upper.add(factory.tuple("Time$3")); + x17_upper.add(factory.tuple("Time$4")); + x17_upper.add(factory.tuple("Time$5")); + x17_upper.add(factory.tuple("Time$6")); + x17_upper.add(factory.tuple("Time$7")); + x17_upper.add(factory.tuple("Time$8")); + x17_upper.add(factory.tuple("Time$9")); + x17_upper.add(factory.tuple("Time$10")); + x17_upper.add(factory.tuple("Time$11")); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Process$0")); + x18_upper.add(factory.tuple("Process$1")); + x18_upper.add(factory.tuple("Process$2")); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("looplessPath_this"); + Decls x21=x22.oneOf(x7); + Expression x25=x22.join(x10); + Formula x24=x25.one(); + Formula x26=x25.in(x7); + Formula x23=x24.and(x26); + Formula x20=x23.forAll(x21); + Expression x28=x10.join(Expression.UNIV); + Formula x27=x28.in(x7); + Variable x32=Variable.unary("looplessPath_this"); + Decls x31=x32.oneOf(x7); + Expression x34=x32.join(x11); + Expression x35=x7.product(x6); + Formula x33=x34.in(x35); + Formula x30=x33.forAll(x31); + Expression x38=x11.join(Expression.UNIV); + Expression x37=x38.join(Expression.UNIV); + Formula x36=x37.in(x7); + Variable x41=Variable.unary("looplessPath_this"); + Decls x40=x41.oneOf(x7); + Expression x43=x41.join(x12); + Formula x42=x43.in(x6); + Formula x39=x42.forAll(x40); + Expression x45=x12.join(Expression.UNIV); + Formula x44=x45.in(x7); + Expression x48=x8.product(x13); + Expression x47=x8.join(x48); + Formula x46=x47.in(x6); + Expression x51=x8.product(x14); + Expression x50=x8.join(x51); + Expression x52=x6.product(x6); + Formula x49=x50.in(x52); + Formula x53=x14.totalOrder(x6,x13,x17); + Expression x56=x9.product(x15); + Expression x55=x9.join(x56); + Formula x54=x55.in(x7); + Expression x59=x9.product(x16); + Expression x58=x9.join(x59); + Expression x60=x7.product(x7); + Formula x57=x58.in(x60); + Formula x61=x16.totalOrder(x7,x15,x18); + Variable x64=Variable.unary("looplessPath_p"); + Decls x63=x64.oneOf(x7); + Expression x67=x10.closure(); + Expression x66=x64.join(x67); + Formula x65=x7.in(x66); + Formula x62=x65.forAll(x63); + Expression x69=x12.join(x13); + Formula x68=x69.no(); + Variable x72=Variable.unary("looplessPath_t"); + Expression x73=x6.difference(x13); + Decls x71=x72.oneOf(x73); + Expression x75=x12.join(x72); + Variable x78=Variable.unary("looplessPath_p"); + Decls x77=x78.oneOf(x7); + Expression x82=x78.join(x11); + Expression x81=x82.join(x72); + Expression x84=x78.join(x11); + Expression x86=x14.transpose(); + Expression x85=x72.join(x86); + Expression x83=x84.join(x85); + Expression x80=x81.difference(x83); + Formula x79=x78.in(x80); + Expression x76=x79.comprehension(x77); + Formula x74=x75.eq(x76); + Formula x70=x74.forAll(x71); + Variable x89=Variable.unary("init_p"); + Decls x88=x89.oneOf(x7); + Expression x92=x89.join(x11); + Expression x91=x92.join(x13); + Formula x90=x91.eq(x89); + Formula x87=x90.forAll(x88); + Variable x95=Variable.unary("looplessPath_t"); + Expression x98=x14.join(x6); + Expression x97=x6.difference(x98); + Expression x96=x6.difference(x97); + Decls x94=x95.oneOf(x96); + Variable x101=Variable.unary("looplessPath_p"); + Decls x100=x101.oneOf(x7); + Variable x106=Variable.unary("step_id"); + Expression x108=x101.join(x11); + Expression x107=x108.join(x95); + Decls x105=x106.oneOf(x107); + Expression x112=x95.join(x14); + Expression x111=x108.join(x112); + Expression x114=x108.join(x95); + Expression x113=x114.difference(x106); + Formula x110=x111.eq(x113); + Expression x118=x101.join(x10); + Expression x117=x118.join(x11); + Expression x116=x117.join(x112); + Expression x120=x117.join(x95); + Expression x123=x101.join(x10); + Expression x125=x16.transpose(); + Expression x124=x125.closure(); + Expression x122=x123.join(x124); + Expression x121=x106.difference(x122); + Expression x119=x120.union(x121); + Formula x115=x116.eq(x119); + Formula x109=x110.and(x115); + Formula x104=x109.forSome(x105); + Variable x128=Variable.unary("step_id"); + Expression x131=x10.join(x101); + Expression x130=x131.join(x11); + Expression x129=x130.join(x95); + Decls x127=x128.oneOf(x129); + Expression x134=x130.join(x112); + Expression x136=x130.join(x95); + Expression x135=x136.difference(x128); + Formula x133=x134.eq(x135); + Expression x140=x131.join(x10); + Expression x139=x140.join(x11); + Expression x138=x139.join(x112); + Expression x142=x139.join(x95); + Expression x145=x131.join(x10); + Expression x147=x16.transpose(); + Expression x146=x147.closure(); + Expression x144=x145.join(x146); + Expression x143=x128.difference(x144); + Expression x141=x142.union(x143); + Formula x137=x138.eq(x141); + Formula x132=x133.and(x137); + Formula x126=x132.forSome(x127); + Formula x103=x104.or(x126); + Expression x150=x101.join(x11); + Expression x149=x150.join(x95); + Expression x152=x101.join(x11); + Expression x151=x152.join(x112); + Formula x148=x149.eq(x151); + Formula x102=x103.or(x148); + Formula x99=x102.forAll(x100); + Formula x93=x99.forAll(x94); + Variable x156=Variable.unary("looplessPath_t"); + Decls x155=x156.oneOf(x6); + Variable x158=Variable.unary("looplessPath_t'"); + Decls x157=x158.oneOf(x6); + Decls x154=x155.and(x157); + Expression x162=x156.intersection(x158); + Formula x161=x162.no(); + Expression x164=x11.join(x156); + Expression x165=x11.join(x158); + Formula x163=x164.eq(x165); + Formula x160=x161.and(x163); + Formula x159=x160.not(); + Formula x153=x159.forAll(x154); + Formula x166=x0.eq(x0); + Formula x167=x1.eq(x1); + Formula x168=x2.eq(x2); + Formula x169=x3.eq(x3); + Formula x170=x4.eq(x4); + Formula x171=x5.eq(x5); + Formula x172=x6.eq(x6); + Formula x173=x7.eq(x7); + Formula x174=x8.eq(x8); + Formula x175=x9.eq(x9); + Formula x176=x10.eq(x10); + Formula x177=x11.eq(x11); + Formula x178=x12.eq(x12); + Formula x179=x13.eq(x13); + Formula x180=x14.eq(x14); + Formula x181=x15.eq(x15); + Formula x182=x16.eq(x16); + Formula x183=x17.eq(x17); + Formula x184=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x27, x30, x36, x39, x44, x46, x49, x53, x54, x57, x61, x62, x68, x70, x87, x93, x153, x166, x167, x168, x169, x170, x171, x172, x173, x174, x175, x176, x177, x178, x179, x180, x181, x182, x183, x184); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2ShowRun.java b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2ShowRun.java new file mode 100644 index 0000000..77961fb --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/softwareAbstractions/chapter6/ringElection2ShowRun.java @@ -0,0 +1,437 @@ +package kodkod.examples.models.softwareAbstractions.chapter6; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + + +@ExampleMetadata( + Name = "ringElection2", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 5, + TernaryRelations =1, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 7, + TransitiveClosure = 3, + NestedQuantifiers = 2, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 10, + OrderedRelations = 2, + Constraints = 17 +) + + +public final class ringElection2ShowRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Time"); + Relation x7 = Relation.unary("this/Process"); + Relation x8 = Relation.unary("TO/Ord"); + Relation x9 = Relation.unary("PO/Ord"); + Relation x10 = Relation.nary("this/Process.succ", 2); + Relation x11 = Relation.nary("this/Process.toSend", 3); + Relation x12 = Relation.nary("this/Process.elected", 2); + Relation x13 = Relation.unary("TO/Ord.First"); + Relation x14 = Relation.nary("TO/Ord.Next", 2); + Relation x15 = Relation.unary("PO/Ord.First"); + Relation x16 = Relation.nary("PO/Ord.Next", 2); + Relation x17 = Relation.unary(""); + Relation x18 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "PO/Ord$0", + "Process$0", "Process$1", "Process$2", "TO/Ord$0", "Time$0", "Time$1", + "Time$2", "Time$3" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Time$0")); + x6_upper.add(factory.tuple("Time$1")); + x6_upper.add(factory.tuple("Time$2")); + x6_upper.add(factory.tuple("Time$3")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Process$0")); + x7_upper.add(factory.tuple("Process$1")); + x7_upper.add(factory.tuple("Process$2")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("TO/Ord$0")); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("PO/Ord$0")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x10_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x10_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x10_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x10_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x10_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x10_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x10_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x10_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(3); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1")).product(factory.tuple("Time$3"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$0"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$1"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$2"))); + x11_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2")).product(factory.tuple("Time$3"))); + bounds.bound(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$0"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$1"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$2"))); + x12_upper.add(factory.tuple("Process$0").product(factory.tuple("Time$3"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$0"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$1"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$2"))); + x12_upper.add(factory.tuple("Process$1").product(factory.tuple("Time$3"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$0"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$1"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$2"))); + x12_upper.add(factory.tuple("Process$2").product(factory.tuple("Time$3"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(1); + x13_upper.add(factory.tuple("Time$0")); + x13_upper.add(factory.tuple("Time$1")); + x13_upper.add(factory.tuple("Time$2")); + x13_upper.add(factory.tuple("Time$3")); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$0").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$1").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$2").product(factory.tuple("Time$3"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$0"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$1"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$2"))); + x14_upper.add(factory.tuple("Time$3").product(factory.tuple("Time$3"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(1); + x15_upper.add(factory.tuple("Process$0")); + x15_upper.add(factory.tuple("Process$1")); + x15_upper.add(factory.tuple("Process$2")); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(2); + x16_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$0"))); + x16_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$1"))); + x16_upper.add(factory.tuple("Process$0").product(factory.tuple("Process$2"))); + x16_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$0"))); + x16_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$1"))); + x16_upper.add(factory.tuple("Process$1").product(factory.tuple("Process$2"))); + x16_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$0"))); + x16_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$1"))); + x16_upper.add(factory.tuple("Process$2").product(factory.tuple("Process$2"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(1); + x17_upper.add(factory.tuple("Time$0")); + x17_upper.add(factory.tuple("Time$1")); + x17_upper.add(factory.tuple("Time$2")); + x17_upper.add(factory.tuple("Time$3")); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(1); + x18_upper.add(factory.tuple("Process$0")); + x18_upper.add(factory.tuple("Process$1")); + x18_upper.add(factory.tuple("Process$2")); + bounds.bound(x18, x18_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x22=Variable.unary("show_this"); + Decls x21=x22.oneOf(x7); + Expression x25=x22.join(x10); + Formula x24=x25.one(); + Formula x26=x25.in(x7); + Formula x23=x24.and(x26); + Formula x20=x23.forAll(x21); + Expression x28=x10.join(Expression.UNIV); + Formula x27=x28.in(x7); + Variable x32=Variable.unary("show_this"); + Decls x31=x32.oneOf(x7); + Expression x34=x32.join(x11); + Expression x35=x7.product(x6); + Formula x33=x34.in(x35); + Formula x30=x33.forAll(x31); + Expression x38=x11.join(Expression.UNIV); + Expression x37=x38.join(Expression.UNIV); + Formula x36=x37.in(x7); + Variable x41=Variable.unary("show_this"); + Decls x40=x41.oneOf(x7); + Expression x43=x41.join(x12); + Formula x42=x43.in(x6); + Formula x39=x42.forAll(x40); + Expression x45=x12.join(Expression.UNIV); + Formula x44=x45.in(x7); + Expression x48=x8.product(x13); + Expression x47=x8.join(x48); + Formula x46=x47.in(x6); + Expression x51=x8.product(x14); + Expression x50=x8.join(x51); + Expression x52=x6.product(x6); + Formula x49=x50.in(x52); + Formula x53=x14.totalOrder(x6,x13,x17); + Expression x56=x9.product(x15); + Expression x55=x9.join(x56); + Formula x54=x55.in(x7); + Expression x59=x9.product(x16); + Expression x58=x9.join(x59); + Expression x60=x7.product(x7); + Formula x57=x58.in(x60); + Formula x61=x16.totalOrder(x7,x15,x18); + Variable x64=Variable.unary("show_p"); + Decls x63=x64.oneOf(x7); + Expression x67=x10.closure(); + Expression x66=x64.join(x67); + Formula x65=x7.in(x66); + Formula x62=x65.forAll(x63); + Expression x69=x12.join(x13); + Formula x68=x69.no(); + Variable x72=Variable.unary("show_t"); + Expression x73=x6.difference(x13); + Decls x71=x72.oneOf(x73); + Expression x75=x12.join(x72); + Variable x78=Variable.unary("show_p"); + Decls x77=x78.oneOf(x7); + Expression x82=x78.join(x11); + Expression x81=x82.join(x72); + Expression x84=x78.join(x11); + Expression x86=x14.transpose(); + Expression x85=x72.join(x86); + Expression x83=x84.join(x85); + Expression x80=x81.difference(x83); + Formula x79=x78.in(x80); + Expression x76=x79.comprehension(x77); + Formula x74=x75.eq(x76); + Formula x70=x74.forAll(x71); + Variable x89=Variable.unary("init_p"); + Decls x88=x89.oneOf(x7); + Expression x92=x89.join(x11); + Expression x91=x92.join(x13); + Formula x90=x91.eq(x89); + Formula x87=x90.forAll(x88); + Variable x95=Variable.unary("show_t"); + Expression x98=x14.join(x6); + Expression x97=x6.difference(x98); + Expression x96=x6.difference(x97); + Decls x94=x95.oneOf(x96); + Variable x101=Variable.unary("show_p"); + Decls x100=x101.oneOf(x7); + Variable x106=Variable.unary("step_id"); + Expression x108=x101.join(x11); + Expression x107=x108.join(x95); + Decls x105=x106.oneOf(x107); + Expression x112=x95.join(x14); + Expression x111=x108.join(x112); + Expression x114=x108.join(x95); + Expression x113=x114.difference(x106); + Formula x110=x111.eq(x113); + Expression x118=x101.join(x10); + Expression x117=x118.join(x11); + Expression x116=x117.join(x112); + Expression x120=x117.join(x95); + Expression x123=x101.join(x10); + Expression x125=x16.transpose(); + Expression x124=x125.closure(); + Expression x122=x123.join(x124); + Expression x121=x106.difference(x122); + Expression x119=x120.union(x121); + Formula x115=x116.eq(x119); + Formula x109=x110.and(x115); + Formula x104=x109.forSome(x105); + Variable x128=Variable.unary("step_id"); + Expression x131=x10.join(x101); + Expression x130=x131.join(x11); + Expression x129=x130.join(x95); + Decls x127=x128.oneOf(x129); + Expression x134=x130.join(x112); + Expression x136=x130.join(x95); + Expression x135=x136.difference(x128); + Formula x133=x134.eq(x135); + Expression x140=x131.join(x10); + Expression x139=x140.join(x11); + Expression x138=x139.join(x112); + Expression x142=x139.join(x95); + Expression x145=x131.join(x10); + Expression x147=x16.transpose(); + Expression x146=x147.closure(); + Expression x144=x145.join(x146); + Expression x143=x128.difference(x144); + Expression x141=x142.union(x143); + Formula x137=x138.eq(x141); + Formula x132=x133.and(x137); + Formula x126=x132.forSome(x127); + Formula x103=x104.or(x126); + Expression x150=x101.join(x11); + Expression x149=x150.join(x95); + Expression x152=x101.join(x11); + Expression x151=x152.join(x112); + Formula x148=x149.eq(x151); + Formula x102=x103.or(x148); + Formula x99=x102.forAll(x100); + Formula x93=x99.forAll(x94); + Formula x153=x12.some(); + Formula x154=x0.eq(x0); + Formula x155=x1.eq(x1); + Formula x156=x2.eq(x2); + Formula x157=x3.eq(x3); + Formula x158=x4.eq(x4); + Formula x159=x5.eq(x5); + Formula x160=x6.eq(x6); + Formula x161=x7.eq(x7); + Formula x162=x8.eq(x8); + Formula x163=x9.eq(x9); + Formula x164=x10.eq(x10); + Formula x165=x11.eq(x11); + Formula x166=x12.eq(x12); + Formula x167=x13.eq(x13); + Formula x168=x14.eq(x14); + Formula x169=x15.eq(x15); + Formula x170=x16.eq(x16); + Formula x171=x17.eq(x17); + Formula x172=x18.eq(x18); + Formula x19=Formula.compose(FormulaOperator.AND, x20, x27, x30, x36, x39, x44, x46, x49, x53, x54, x57, x61, x62, x68, x70, x87, x93, x153, x154, x155, x156, x157, x158, x159, x160, x161, x162, x163, x164, x165, x166, x167, x168, x169, x170, x171, x172); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x19,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/messaging/messagingOutOfOrderRun.java b/Source/kodkod/examples/kodkod/examples/models/util/messaging/messagingOutOfOrderRun.java new file mode 100644 index 0000000..af090cd --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/messaging/messagingOutOfOrderRun.java @@ -0,0 +1,1044 @@ +package kodkod.examples.models.util.messaging; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "messaging", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 7, + TernaryRelations =6, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 28, + TransitiveClosure = 4, + NestedQuantifiers = 1, + SetCardinality = 1, + Additions = 0, + Subtractions = 0, + Comparison = 17, + OrderedRelations = 1, + Constraints = 37 +) + + + +public final class messagingOutOfOrderRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Node"); + Relation x7 = Relation.unary("this/MsgState"); + Relation x8 = Relation.unary("this/Msg"); + Relation x9 = Relation.unary("this/Tick"); + Relation x10 = Relation.unary("this/NodeState"); + Relation x11 = Relation.unary("ord/Ord"); + Relation x12 = Relation.nary("this/MsgState.from", 2); + Relation x13 = Relation.nary("this/MsgState.to", 2); + Relation x14 = Relation.nary("this/Msg.state", 2); + Relation x15 = Relation.nary("this/Msg.sentOn", 2); + Relation x16 = Relation.nary("this/Msg.readOn", 3); + Relation x17 = Relation.nary("this/Tick.state", 3); + Relation x18 = Relation.nary("this/Tick.visible", 3); + Relation x19 = Relation.nary("this/Tick.read", 3); + Relation x20 = Relation.nary("this/Tick.sent", 3); + Relation x21 = Relation.nary("this/Tick.available", 2); + Relation x22 = Relation.nary("this/Tick.needsToSend", 3); + Relation x23 = Relation.unary("ord/Ord.First"); + Relation x24 = Relation.nary("ord/Ord.Next", 2); + Relation x25 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Msg$0", + "Msg$1", "Msg$2", "Msg$3", "MsgState$0", "MsgState$1", "MsgState$2", + "MsgState$3", "Node$0", "Node$1", "Node$2", "Node$3", "NodeState$0", + "NodeState$1", "NodeState$2", "NodeState$3", "Tick$0", "Tick$1", "Tick$2", + "Tick$3", "ord/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Node$0")); + x6_upper.add(factory.tuple("Node$1")); + x6_upper.add(factory.tuple("Node$2")); + x6_upper.add(factory.tuple("Node$3")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("MsgState$0")); + x7_upper.add(factory.tuple("MsgState$1")); + x7_upper.add(factory.tuple("MsgState$2")); + x7_upper.add(factory.tuple("MsgState$3")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Msg$0")); + x8_upper.add(factory.tuple("Msg$1")); + x8_upper.add(factory.tuple("Msg$2")); + x8_upper.add(factory.tuple("Msg$3")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Tick$0")); + x9_upper.add(factory.tuple("Tick$1")); + x9_upper.add(factory.tuple("Tick$2")); + x9_upper.add(factory.tuple("Tick$3")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("NodeState$0")); + x10_upper.add(factory.tuple("NodeState$1")); + x10_upper.add(factory.tuple("NodeState$2")); + x10_upper.add(factory.tuple("NodeState$3")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("ord/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("MsgState$0").product(factory.tuple("Node$0"))); + x12_upper.add(factory.tuple("MsgState$0").product(factory.tuple("Node$1"))); + x12_upper.add(factory.tuple("MsgState$0").product(factory.tuple("Node$2"))); + x12_upper.add(factory.tuple("MsgState$0").product(factory.tuple("Node$3"))); + x12_upper.add(factory.tuple("MsgState$1").product(factory.tuple("Node$0"))); + x12_upper.add(factory.tuple("MsgState$1").product(factory.tuple("Node$1"))); + x12_upper.add(factory.tuple("MsgState$1").product(factory.tuple("Node$2"))); + x12_upper.add(factory.tuple("MsgState$1").product(factory.tuple("Node$3"))); + x12_upper.add(factory.tuple("MsgState$2").product(factory.tuple("Node$0"))); + x12_upper.add(factory.tuple("MsgState$2").product(factory.tuple("Node$1"))); + x12_upper.add(factory.tuple("MsgState$2").product(factory.tuple("Node$2"))); + x12_upper.add(factory.tuple("MsgState$2").product(factory.tuple("Node$3"))); + x12_upper.add(factory.tuple("MsgState$3").product(factory.tuple("Node$0"))); + x12_upper.add(factory.tuple("MsgState$3").product(factory.tuple("Node$1"))); + x12_upper.add(factory.tuple("MsgState$3").product(factory.tuple("Node$2"))); + x12_upper.add(factory.tuple("MsgState$3").product(factory.tuple("Node$3"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("MsgState$0").product(factory.tuple("Node$0"))); + x13_upper.add(factory.tuple("MsgState$0").product(factory.tuple("Node$1"))); + x13_upper.add(factory.tuple("MsgState$0").product(factory.tuple("Node$2"))); + x13_upper.add(factory.tuple("MsgState$0").product(factory.tuple("Node$3"))); + x13_upper.add(factory.tuple("MsgState$1").product(factory.tuple("Node$0"))); + x13_upper.add(factory.tuple("MsgState$1").product(factory.tuple("Node$1"))); + x13_upper.add(factory.tuple("MsgState$1").product(factory.tuple("Node$2"))); + x13_upper.add(factory.tuple("MsgState$1").product(factory.tuple("Node$3"))); + x13_upper.add(factory.tuple("MsgState$2").product(factory.tuple("Node$0"))); + x13_upper.add(factory.tuple("MsgState$2").product(factory.tuple("Node$1"))); + x13_upper.add(factory.tuple("MsgState$2").product(factory.tuple("Node$2"))); + x13_upper.add(factory.tuple("MsgState$2").product(factory.tuple("Node$3"))); + x13_upper.add(factory.tuple("MsgState$3").product(factory.tuple("Node$0"))); + x13_upper.add(factory.tuple("MsgState$3").product(factory.tuple("Node$1"))); + x13_upper.add(factory.tuple("MsgState$3").product(factory.tuple("Node$2"))); + x13_upper.add(factory.tuple("MsgState$3").product(factory.tuple("Node$3"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Msg$0").product(factory.tuple("MsgState$0"))); + x14_upper.add(factory.tuple("Msg$0").product(factory.tuple("MsgState$1"))); + x14_upper.add(factory.tuple("Msg$0").product(factory.tuple("MsgState$2"))); + x14_upper.add(factory.tuple("Msg$0").product(factory.tuple("MsgState$3"))); + x14_upper.add(factory.tuple("Msg$1").product(factory.tuple("MsgState$0"))); + x14_upper.add(factory.tuple("Msg$1").product(factory.tuple("MsgState$1"))); + x14_upper.add(factory.tuple("Msg$1").product(factory.tuple("MsgState$2"))); + x14_upper.add(factory.tuple("Msg$1").product(factory.tuple("MsgState$3"))); + x14_upper.add(factory.tuple("Msg$2").product(factory.tuple("MsgState$0"))); + x14_upper.add(factory.tuple("Msg$2").product(factory.tuple("MsgState$1"))); + x14_upper.add(factory.tuple("Msg$2").product(factory.tuple("MsgState$2"))); + x14_upper.add(factory.tuple("Msg$2").product(factory.tuple("MsgState$3"))); + x14_upper.add(factory.tuple("Msg$3").product(factory.tuple("MsgState$0"))); + x14_upper.add(factory.tuple("Msg$3").product(factory.tuple("MsgState$1"))); + x14_upper.add(factory.tuple("Msg$3").product(factory.tuple("MsgState$2"))); + x14_upper.add(factory.tuple("Msg$3").product(factory.tuple("MsgState$3"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("Msg$0").product(factory.tuple("Tick$0"))); + x15_upper.add(factory.tuple("Msg$0").product(factory.tuple("Tick$1"))); + x15_upper.add(factory.tuple("Msg$0").product(factory.tuple("Tick$2"))); + x15_upper.add(factory.tuple("Msg$0").product(factory.tuple("Tick$3"))); + x15_upper.add(factory.tuple("Msg$1").product(factory.tuple("Tick$0"))); + x15_upper.add(factory.tuple("Msg$1").product(factory.tuple("Tick$1"))); + x15_upper.add(factory.tuple("Msg$1").product(factory.tuple("Tick$2"))); + x15_upper.add(factory.tuple("Msg$1").product(factory.tuple("Tick$3"))); + x15_upper.add(factory.tuple("Msg$2").product(factory.tuple("Tick$0"))); + x15_upper.add(factory.tuple("Msg$2").product(factory.tuple("Tick$1"))); + x15_upper.add(factory.tuple("Msg$2").product(factory.tuple("Tick$2"))); + x15_upper.add(factory.tuple("Msg$2").product(factory.tuple("Tick$3"))); + x15_upper.add(factory.tuple("Msg$3").product(factory.tuple("Tick$0"))); + x15_upper.add(factory.tuple("Msg$3").product(factory.tuple("Tick$1"))); + x15_upper.add(factory.tuple("Msg$3").product(factory.tuple("Tick$2"))); + x15_upper.add(factory.tuple("Msg$3").product(factory.tuple("Tick$3"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(3); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$0")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$0")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$0")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$0")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$1")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$1")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$1")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$1")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$2")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$2")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$2")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$2")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$3")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$3")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$3")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$3")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$0")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$0")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$0")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$0")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$1")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$1")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$1")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$1")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$2")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$2")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$2")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$2")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$3")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$3")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$3")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$3")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$0")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$0")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$0")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$0")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$1")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$1")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$1")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$1")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$2")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$2")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$2")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$2")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$3")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$3")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$3")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$2").product(factory.tuple("Node$3")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$0")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$0")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$0")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$0")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$1")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$1")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$1")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$1")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$2")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$2")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$2")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$2")).product(factory.tuple("Tick$3"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$3")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$3")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$3")).product(factory.tuple("Tick$2"))); + x16_upper.add(factory.tuple("Msg$3").product(factory.tuple("Node$3")).product(factory.tuple("Tick$3"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(3); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("NodeState$3"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$2"))); + x17_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("NodeState$3"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x18_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(3); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x19_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(3); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x20_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("Tick$0").product(factory.tuple("Msg$0"))); + x21_upper.add(factory.tuple("Tick$0").product(factory.tuple("Msg$1"))); + x21_upper.add(factory.tuple("Tick$0").product(factory.tuple("Msg$2"))); + x21_upper.add(factory.tuple("Tick$0").product(factory.tuple("Msg$3"))); + x21_upper.add(factory.tuple("Tick$1").product(factory.tuple("Msg$0"))); + x21_upper.add(factory.tuple("Tick$1").product(factory.tuple("Msg$1"))); + x21_upper.add(factory.tuple("Tick$1").product(factory.tuple("Msg$2"))); + x21_upper.add(factory.tuple("Tick$1").product(factory.tuple("Msg$3"))); + x21_upper.add(factory.tuple("Tick$2").product(factory.tuple("Msg$0"))); + x21_upper.add(factory.tuple("Tick$2").product(factory.tuple("Msg$1"))); + x21_upper.add(factory.tuple("Tick$2").product(factory.tuple("Msg$2"))); + x21_upper.add(factory.tuple("Tick$2").product(factory.tuple("Msg$3"))); + x21_upper.add(factory.tuple("Tick$3").product(factory.tuple("Msg$0"))); + x21_upper.add(factory.tuple("Tick$3").product(factory.tuple("Msg$1"))); + x21_upper.add(factory.tuple("Tick$3").product(factory.tuple("Msg$2"))); + x21_upper.add(factory.tuple("Tick$3").product(factory.tuple("Msg$3"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(3); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$2").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$0")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$1")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$2")).product(factory.tuple("Msg$3"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$2"))); + x22_upper.add(factory.tuple("Tick$3").product(factory.tuple("Node$3")).product(factory.tuple("Msg$3"))); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(1); + x23_upper.add(factory.tuple("Tick$0")); + x23_upper.add(factory.tuple("Tick$1")); + x23_upper.add(factory.tuple("Tick$2")); + x23_upper.add(factory.tuple("Tick$3")); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(2); + x24_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$0"))); + x24_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$1"))); + x24_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$2"))); + x24_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$3"))); + x24_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$0"))); + x24_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$1"))); + x24_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$2"))); + x24_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$3"))); + x24_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$0"))); + x24_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$1"))); + x24_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$2"))); + x24_upper.add(factory.tuple("Tick$2").product(factory.tuple("Tick$3"))); + x24_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$0"))); + x24_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$1"))); + x24_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$2"))); + x24_upper.add(factory.tuple("Tick$3").product(factory.tuple("Tick$3"))); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(1); + x25_upper.add(factory.tuple("Tick$0")); + x25_upper.add(factory.tuple("Tick$1")); + x25_upper.add(factory.tuple("Tick$2")); + x25_upper.add(factory.tuple("Tick$3")); + bounds.bound(x25, x25_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x29=Variable.unary("OutOfOrder_this"); + Decls x28=x29.oneOf(x7); + Expression x32=x29.join(x12); + Formula x31=x32.one(); + Formula x33=x32.in(x6); + Formula x30=x31.and(x33); + Formula x27=x30.forAll(x28); + Expression x35=x12.join(Expression.UNIV); + Formula x34=x35.in(x7); + Variable x39=Variable.unary("OutOfOrder_this"); + Decls x38=x39.oneOf(x7); + Expression x41=x39.join(x13); + Formula x40=x41.in(x6); + Formula x37=x40.forAll(x38); + Expression x43=x13.join(Expression.UNIV); + Formula x42=x43.in(x7); + Variable x46=Variable.unary("OutOfOrder_this"); + Decls x45=x46.oneOf(x8); + Expression x49=x46.join(x14); + Formula x48=x49.one(); + Formula x50=x49.in(x7); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x52=x14.join(Expression.UNIV); + Formula x51=x52.in(x8); + Variable x55=Variable.unary("OutOfOrder_this"); + Decls x54=x55.oneOf(x8); + Expression x58=x55.join(x15); + Formula x57=x58.one(); + Formula x59=x58.in(x9); + Formula x56=x57.and(x59); + Formula x53=x56.forAll(x54); + Expression x61=x15.join(Expression.UNIV); + Formula x60=x61.in(x8); + Variable x64=Variable.unary("OutOfOrder_this"); + Decls x63=x64.oneOf(x8); + Expression x68=x64.join(x16); + Expression x69=x6.product(x9); + Formula x67=x68.in(x69); + Variable x72=Variable.unary(""); + Decls x71=x72.oneOf(x6); + Expression x75=x72.join(x68); + Formula x74=x75.lone(); + Formula x76=x75.in(x9); + Formula x73=x74.and(x76); + Formula x70=x73.forAll(x71); + Formula x66=x67.and(x70); + Variable x79=Variable.unary(""); + Decls x78=x79.oneOf(x9); + Expression x81=x68.join(x79); + Formula x80=x81.in(x6); + Formula x77=x80.forAll(x78); + Formula x65=x66.and(x77); + Formula x62=x65.forAll(x63); + Expression x84=x16.join(Expression.UNIV); + Expression x83=x84.join(Expression.UNIV); + Formula x82=x83.in(x8); + Variable x87=Variable.unary("OutOfOrder_this"); + Decls x86=x87.oneOf(x8); + Expression x90=x87.join(x16); + Expression x89=x90.join(x9); + Expression x92=x87.join(x14); + Expression x91=x92.join(x13); + Formula x88=x89.in(x91); + Formula x85=x88.forAll(x86); + Variable x95=Variable.unary("OutOfOrder_this"); + Decls x94=x95.oneOf(x9); + Expression x99=x95.join(x17); + Expression x100=x6.product(x10); + Formula x98=x99.in(x100); + Variable x103=Variable.unary(""); + Decls x102=x103.oneOf(x6); + Expression x106=x103.join(x99); + Formula x105=x106.one(); + Formula x107=x106.in(x10); + Formula x104=x105.and(x107); + Formula x101=x104.forAll(x102); + Formula x97=x98.and(x101); + Variable x110=Variable.unary(""); + Decls x109=x110.oneOf(x10); + Expression x112=x99.join(x110); + Formula x111=x112.in(x6); + Formula x108=x111.forAll(x109); + Formula x96=x97.and(x108); + Formula x93=x96.forAll(x94); + Expression x115=x17.join(Expression.UNIV); + Expression x114=x115.join(Expression.UNIV); + Formula x113=x114.in(x9); + Variable x118=Variable.unary("OutOfOrder_this"); + Decls x117=x118.oneOf(x9); + Expression x120=x118.join(x18); + Expression x121=x6.product(x8); + Formula x119=x120.in(x121); + Formula x116=x119.forAll(x117); + Expression x124=x18.join(Expression.UNIV); + Expression x123=x124.join(Expression.UNIV); + Formula x122=x123.in(x9); + Variable x127=Variable.unary("OutOfOrder_this"); + Decls x126=x127.oneOf(x9); + Expression x129=x127.join(x19); + Expression x130=x6.product(x8); + Formula x128=x129.in(x130); + Formula x125=x128.forAll(x126); + Expression x133=x19.join(Expression.UNIV); + Expression x132=x133.join(Expression.UNIV); + Formula x131=x132.in(x9); + Variable x136=Variable.unary("OutOfOrder_this"); + Decls x135=x136.oneOf(x9); + Expression x138=x136.join(x20); + Expression x139=x6.product(x8); + Formula x137=x138.in(x139); + Formula x134=x137.forAll(x135); + Expression x142=x20.join(Expression.UNIV); + Expression x141=x142.join(Expression.UNIV); + Formula x140=x141.in(x9); + Variable x145=Variable.unary("OutOfOrder_this"); + Decls x144=x145.oneOf(x9); + Expression x147=x145.join(x21); + Formula x146=x147.in(x8); + Formula x143=x146.forAll(x144); + Expression x149=x21.join(Expression.UNIV); + Formula x148=x149.in(x9); + Variable x152=Variable.unary("OutOfOrder_this"); + Decls x151=x152.oneOf(x9); + Expression x154=x152.join(x22); + Expression x155=x6.product(x8); + Formula x153=x154.in(x155); + Formula x150=x153.forAll(x151); + Expression x158=x22.join(Expression.UNIV); + Expression x157=x158.join(Expression.UNIV); + Formula x156=x157.in(x9); + Expression x161=x11.product(x23); + Expression x160=x11.join(x161); + Formula x159=x160.in(x9); + Expression x164=x11.product(x24); + Expression x163=x11.join(x164); + Expression x165=x9.product(x9); + Formula x162=x163.in(x165); + Formula x166=x24.totalOrder(x9,x23,x25); + Expression x169=x23.join(x18); + Expression x168=x6.join(x169); + Formula x167=x168.no(); + Variable x172=Variable.unary("OutOfOrder_pre"); + Expression x175=x24.join(x9); + Expression x174=x9.difference(x175); + Expression x173=x9.difference(x174); + Decls x171=x172.oneOf(x173); + Expression x178=x172.join(x24); + Expression x177=x178.join(x21); + Expression x180=x172.join(x21); + Expression x182=x172.join(x20); + Expression x181=x6.join(x182); + Expression x179=x180.difference(x181); + Formula x176=x177.eq(x179); + Formula x170=x176.forAll(x171); + Variable x185=Variable.unary("OutOfOrder_t"); + Decls x184=x185.oneOf(x9); + Expression x190=x185.join(x20); + Expression x189=x6.join(x190); + Expression x191=x185.join(x21); + Formula x188=x189.in(x191); + Expression x197=x185.join(x20); + Expression x196=x6.join(x197); + Expression x195=x196.join(x15); + Formula x194=x195.in(x185); + Expression x200=x185.join(x20); + Expression x199=x6.join(x200); + Expression x202=x185.join(x20); + Expression x201=x6.join(x202); + Formula x198=x199.eq(x201); + Formula x193=x194.and(x198); + Variable x206=Variable.unary("OutOfOrder_n"); + Decls x205=x206.oneOf(x6); + Variable x208=Variable.unary("OutOfOrder_m"); + Decls x207=x208.oneOf(x8); + Decls x204=x205.and(x207); + Expression x213=x208.join(x16); + Expression x212=x206.join(x213); + Formula x211=x212.eq(x185); + Formula x210=x211.not(); + Expression x216=x185.join(x19); + Expression x215=x206.join(x216); + Formula x214=x208.in(x215); + Formula x209=x210.or(x214); + Formula x203=x209.forAll(x204); + Formula x192=x193.and(x203); + Formula x187=x188.and(x192); + Expression x223=x185.join(x19); + Expression x222=x6.join(x223); + Expression x221=x222.join(x16); + Expression x220=x6.join(x221); + Formula x219=x220.in(x185); + Variable x226=Variable.unary("OutOfOrder_n"); + Decls x225=x226.oneOf(x6); + Expression x231=x185.join(x20); + Expression x230=x226.join(x231); + Expression x229=x230.join(x14); + Expression x228=x229.join(x12); + Formula x227=x228.in(x226); + Formula x224=x227.forAll(x225); + Formula x218=x219.and(x224); + Variable x235=Variable.unary("OutOfOrder_n"); + Decls x234=x235.oneOf(x6); + Variable x237=Variable.unary("OutOfOrder_m"); + Decls x236=x237.oneOf(x8); + Decls x233=x234.and(x236); + Expression x243=x185.join(x18); + Expression x242=x235.join(x243); + Formula x241=x237.in(x242); + Formula x240=x241.not(); + Expression x247=x237.join(x14); + Expression x246=x247.join(x13); + Formula x245=x235.in(x246); + Expression x249=x237.join(x15); + Expression x252=x24.transpose(); + Expression x251=x252.closure(); + Expression x250=x185.join(x251); + Formula x248=x249.in(x250); + Formula x244=x245.and(x248); + Formula x239=x240.or(x244); + Expression x257=x185.join(x19); + Expression x256=x235.join(x257); + Formula x255=x237.in(x256); + Formula x254=x255.not(); + Expression x263=x24.closure(); + Expression x262=x185.join(x263); + Expression x261=x262.join(x18); + Expression x260=x235.join(x261); + Formula x259=x237.in(x260); + Formula x258=x259.not(); + Formula x253=x254.or(x258); + Formula x238=x239.and(x253); + Formula x232=x238.forAll(x233); + Formula x217=x218.and(x232); + Formula x186=x187.and(x217); + Formula x183=x186.forAll(x184); + Expression x266=x9.join(x20); + Expression x265=x6.join(x266); + Formula x264=x8.in(x265); + Formula x267=x19.in(x18); + Variable x272=Variable.unary("ReadInOrder_n1"); + Decls x271=x272.oneOf(x6); + Variable x274=Variable.unary("ReadInOrder_n2"); + Decls x273=x274.oneOf(x6); + Decls x270=x271.and(x273); + Variable x278=Variable.unary("ReadInOrder_m1"); + Decls x277=x278.oneOf(x8); + Variable x280=Variable.unary("ReadInOrder_m2"); + Decls x279=x280.oneOf(x8); + Decls x276=x277.and(x279); + Expression x287=x278.join(x14); + Expression x286=x287.join(x12); + Formula x285=x286.eq(x272); + Expression x291=x280.join(x14); + Expression x290=x291.join(x12); + Formula x289=x290.eq(x272); + Expression x294=x280.join(x14); + Expression x293=x294.join(x13); + Formula x292=x293.eq(x274); + Formula x288=x289.and(x292); + Formula x284=x285.and(x288); + Expression x297=x278.join(x14); + Expression x296=x297.join(x13); + Formula x295=x296.eq(x274); + Formula x283=x284.and(x295); + Formula x282=x283.not(); + Expression x304=x278.join(x16); + Expression x303=x274.join(x304); + Formula x302=x303.some(); + Expression x307=x280.join(x16); + Expression x306=x274.join(x307); + Formula x305=x306.some(); + Formula x301=x302.and(x305); + Expression x310=x278.join(x16); + Expression x309=x274.join(x310); + Expression x313=x280.join(x16); + Expression x312=x274.join(x313); + Expression x315=x24.transpose(); + Expression x314=x315.closure(); + Expression x311=x312.join(x314); + Formula x308=x309.in(x311); + Formula x300=x301.and(x308); + Formula x299=x300.not(); + Expression x318=x278.join(x15); + Expression x319=x280.join(x15); + Formula x317=x318.eq(x319); + Expression x323=x24.transpose(); + Expression x322=x323.closure(); + Expression x321=x319.join(x322); + Formula x320=x318.in(x321); + Formula x316=x317.or(x320); + Formula x298=x299.or(x316); + Formula x281=x282.or(x298); + Formula x275=x281.forAll(x276); + Formula x269=x275.forAll(x270); + Formula x268=x269.not(); + IntExpression x325=x8.count(); + IntExpression x326=IntConstant.constant(2); + Formula x324=x325.eq(x326); + Formula x327=x0.eq(x0); + Formula x328=x1.eq(x1); + Formula x329=x2.eq(x2); + Formula x330=x3.eq(x3); + Formula x331=x4.eq(x4); + Formula x332=x5.eq(x5); + Formula x333=x6.eq(x6); + Formula x334=x7.eq(x7); + Formula x335=x8.eq(x8); + Formula x336=x9.eq(x9); + Formula x337=x10.eq(x10); + Formula x338=x11.eq(x11); + Formula x339=x12.eq(x12); + Formula x340=x13.eq(x13); + Formula x341=x14.eq(x14); + Formula x342=x15.eq(x15); + Formula x343=x16.eq(x16); + Formula x344=x17.eq(x17); + Formula x345=x18.eq(x18); + Formula x346=x19.eq(x19); + Formula x347=x20.eq(x20); + Formula x348=x21.eq(x21); + Formula x349=x22.eq(x22); + Formula x350=x23.eq(x23); + Formula x351=x24.eq(x24); + Formula x352=x25.eq(x25); + Formula x26=Formula.compose(FormulaOperator.AND, x27, x34, x37, x42, x44, x51, x53, x60, x62, x82, x85, x93, x113, x116, x122, x125, x131, x134, x140, x143, x148, x150, x156, x159, x162, x166, x167, x170, x183, x264, x267, x268, x324, x327, x328, x329, x330, x331, x332, x333, x334, x335, x336, x337, x338, x339, x340, x341, x342, x343, x344, x345, x346, x347, x348, x349, x350, x351, x352); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x26,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/messaging/messagingSomeStateRun.java b/Source/kodkod/examples/kodkod/examples/models/util/messaging/messagingSomeStateRun.java new file mode 100644 index 0000000..ed08192 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/messaging/messagingSomeStateRun.java @@ -0,0 +1,562 @@ +package kodkod.examples.models.util.messaging; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "messaging", + Note = "", + IsCheck = false, + PartialModel = true, + BinaryRelations = 7, + TernaryRelations =6, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 28, + TransitiveClosure = 2, + NestedQuantifiers = 1, + SetCardinality = 1, + Additions = 0, + Subtractions = 0, + Comparison = 17, + OrderedRelations = 1, + Constraints = 37 +) + + + +public final class messagingSomeStateRun { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/Node"); + Relation x7 = Relation.unary("this/MsgState"); + Relation x8 = Relation.unary("this/Msg"); + Relation x9 = Relation.unary("this/Tick"); + Relation x10 = Relation.unary("this/NodeState"); + Relation x11 = Relation.unary("ord/Ord"); + Relation x12 = Relation.nary("this/MsgState.from", 2); + Relation x13 = Relation.nary("this/MsgState.to", 2); + Relation x14 = Relation.nary("this/Msg.state", 2); + Relation x15 = Relation.nary("this/Msg.sentOn", 2); + Relation x16 = Relation.nary("this/Msg.readOn", 3); + Relation x17 = Relation.nary("this/Tick.state", 3); + Relation x18 = Relation.nary("this/Tick.visible", 3); + Relation x19 = Relation.nary("this/Tick.read", 3); + Relation x20 = Relation.nary("this/Tick.sent", 3); + Relation x21 = Relation.nary("this/Tick.available", 2); + Relation x22 = Relation.nary("this/Tick.needsToSend", 3); + Relation x23 = Relation.unary("ord/Ord.First"); + Relation x24 = Relation.nary("ord/Ord.Next", 2); + Relation x25 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Msg$0", + "Msg$1", "MsgState$0", "MsgState$1", "Node$0", "Node$1", "NodeState$0", + "NodeState$1", "Tick$0", "Tick$1", "ord/Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("Node$0")); + x6_upper.add(factory.tuple("Node$1")); + bounds.bound(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("MsgState$0")); + x7_upper.add(factory.tuple("MsgState$1")); + bounds.bound(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("Msg$0")); + x8_upper.add(factory.tuple("Msg$1")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("Tick$0")); + x9_upper.add(factory.tuple("Tick$1")); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("NodeState$0")); + x10_upper.add(factory.tuple("NodeState$1")); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("ord/Ord$0")); + bounds.boundExactly(x11, x11_upper); + + TupleSet x12_upper = factory.noneOf(2); + x12_upper.add(factory.tuple("MsgState$0").product(factory.tuple("Node$0"))); + x12_upper.add(factory.tuple("MsgState$0").product(factory.tuple("Node$1"))); + x12_upper.add(factory.tuple("MsgState$1").product(factory.tuple("Node$0"))); + x12_upper.add(factory.tuple("MsgState$1").product(factory.tuple("Node$1"))); + bounds.bound(x12, x12_upper); + + TupleSet x13_upper = factory.noneOf(2); + x13_upper.add(factory.tuple("MsgState$0").product(factory.tuple("Node$0"))); + x13_upper.add(factory.tuple("MsgState$0").product(factory.tuple("Node$1"))); + x13_upper.add(factory.tuple("MsgState$1").product(factory.tuple("Node$0"))); + x13_upper.add(factory.tuple("MsgState$1").product(factory.tuple("Node$1"))); + bounds.bound(x13, x13_upper); + + TupleSet x14_upper = factory.noneOf(2); + x14_upper.add(factory.tuple("Msg$0").product(factory.tuple("MsgState$0"))); + x14_upper.add(factory.tuple("Msg$0").product(factory.tuple("MsgState$1"))); + x14_upper.add(factory.tuple("Msg$1").product(factory.tuple("MsgState$0"))); + x14_upper.add(factory.tuple("Msg$1").product(factory.tuple("MsgState$1"))); + bounds.bound(x14, x14_upper); + + TupleSet x15_upper = factory.noneOf(2); + x15_upper.add(factory.tuple("Msg$0").product(factory.tuple("Tick$0"))); + x15_upper.add(factory.tuple("Msg$0").product(factory.tuple("Tick$1"))); + x15_upper.add(factory.tuple("Msg$1").product(factory.tuple("Tick$0"))); + x15_upper.add(factory.tuple("Msg$1").product(factory.tuple("Tick$1"))); + bounds.bound(x15, x15_upper); + + TupleSet x16_upper = factory.noneOf(3); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$0")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$0")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$1")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$0").product(factory.tuple("Node$1")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$0")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$0")).product(factory.tuple("Tick$1"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$1")).product(factory.tuple("Tick$0"))); + x16_upper.add(factory.tuple("Msg$1").product(factory.tuple("Node$1")).product(factory.tuple("Tick$1"))); + bounds.bound(x16, x16_upper); + + TupleSet x17_upper = factory.noneOf(3); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("NodeState$1"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$0"))); + x17_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("NodeState$1"))); + bounds.bound(x17, x17_upper); + + TupleSet x18_upper = factory.noneOf(3); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x18_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + bounds.bound(x18, x18_upper); + + TupleSet x19_upper = factory.noneOf(3); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x19_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + bounds.bound(x19, x19_upper); + + TupleSet x20_upper = factory.noneOf(3); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x20_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + bounds.bound(x20, x20_upper); + + TupleSet x21_upper = factory.noneOf(2); + x21_upper.add(factory.tuple("Tick$0").product(factory.tuple("Msg$0"))); + x21_upper.add(factory.tuple("Tick$0").product(factory.tuple("Msg$1"))); + x21_upper.add(factory.tuple("Tick$1").product(factory.tuple("Msg$0"))); + x21_upper.add(factory.tuple("Tick$1").product(factory.tuple("Msg$1"))); + bounds.bound(x21, x21_upper); + + TupleSet x22_upper = factory.noneOf(3); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$0").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$0")).product(factory.tuple("Msg$1"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$0"))); + x22_upper.add(factory.tuple("Tick$1").product(factory.tuple("Node$1")).product(factory.tuple("Msg$1"))); + bounds.bound(x22, x22_upper); + + TupleSet x23_upper = factory.noneOf(1); + x23_upper.add(factory.tuple("Tick$0")); + x23_upper.add(factory.tuple("Tick$1")); + bounds.bound(x23, x23_upper); + + TupleSet x24_upper = factory.noneOf(2); + x24_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$0"))); + x24_upper.add(factory.tuple("Tick$0").product(factory.tuple("Tick$1"))); + x24_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$0"))); + x24_upper.add(factory.tuple("Tick$1").product(factory.tuple("Tick$1"))); + bounds.bound(x24, x24_upper); + + TupleSet x25_upper = factory.noneOf(1); + x25_upper.add(factory.tuple("Tick$0")); + x25_upper.add(factory.tuple("Tick$1")); + bounds.bound(x25, x25_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Variable x29=Variable.unary("SomeState_this"); + Decls x28=x29.oneOf(x7); + Expression x32=x29.join(x12); + Formula x31=x32.one(); + Formula x33=x32.in(x6); + Formula x30=x31.and(x33); + Formula x27=x30.forAll(x28); + Expression x35=x12.join(Expression.UNIV); + Formula x34=x35.in(x7); + Variable x39=Variable.unary("SomeState_this"); + Decls x38=x39.oneOf(x7); + Expression x41=x39.join(x13); + Formula x40=x41.in(x6); + Formula x37=x40.forAll(x38); + Expression x43=x13.join(Expression.UNIV); + Formula x42=x43.in(x7); + Variable x46=Variable.unary("SomeState_this"); + Decls x45=x46.oneOf(x8); + Expression x49=x46.join(x14); + Formula x48=x49.one(); + Formula x50=x49.in(x7); + Formula x47=x48.and(x50); + Formula x44=x47.forAll(x45); + Expression x52=x14.join(Expression.UNIV); + Formula x51=x52.in(x8); + Variable x55=Variable.unary("SomeState_this"); + Decls x54=x55.oneOf(x8); + Expression x58=x55.join(x15); + Formula x57=x58.one(); + Formula x59=x58.in(x9); + Formula x56=x57.and(x59); + Formula x53=x56.forAll(x54); + Expression x61=x15.join(Expression.UNIV); + Formula x60=x61.in(x8); + Variable x64=Variable.unary("SomeState_this"); + Decls x63=x64.oneOf(x8); + Expression x68=x64.join(x16); + Expression x69=x6.product(x9); + Formula x67=x68.in(x69); + Variable x72=Variable.unary(""); + Decls x71=x72.oneOf(x6); + Expression x75=x72.join(x68); + Formula x74=x75.lone(); + Formula x76=x75.in(x9); + Formula x73=x74.and(x76); + Formula x70=x73.forAll(x71); + Formula x66=x67.and(x70); + Variable x79=Variable.unary(""); + Decls x78=x79.oneOf(x9); + Expression x81=x68.join(x79); + Formula x80=x81.in(x6); + Formula x77=x80.forAll(x78); + Formula x65=x66.and(x77); + Formula x62=x65.forAll(x63); + Expression x84=x16.join(Expression.UNIV); + Expression x83=x84.join(Expression.UNIV); + Formula x82=x83.in(x8); + Variable x87=Variable.unary("SomeState_this"); + Decls x86=x87.oneOf(x8); + Expression x90=x87.join(x16); + Expression x89=x90.join(x9); + Expression x92=x87.join(x14); + Expression x91=x92.join(x13); + Formula x88=x89.in(x91); + Formula x85=x88.forAll(x86); + Variable x95=Variable.unary("SomeState_this"); + Decls x94=x95.oneOf(x9); + Expression x99=x95.join(x17); + Expression x100=x6.product(x10); + Formula x98=x99.in(x100); + Variable x103=Variable.unary(""); + Decls x102=x103.oneOf(x6); + Expression x106=x103.join(x99); + Formula x105=x106.one(); + Formula x107=x106.in(x10); + Formula x104=x105.and(x107); + Formula x101=x104.forAll(x102); + Formula x97=x98.and(x101); + Variable x110=Variable.unary(""); + Decls x109=x110.oneOf(x10); + Expression x112=x99.join(x110); + Formula x111=x112.in(x6); + Formula x108=x111.forAll(x109); + Formula x96=x97.and(x108); + Formula x93=x96.forAll(x94); + Expression x115=x17.join(Expression.UNIV); + Expression x114=x115.join(Expression.UNIV); + Formula x113=x114.in(x9); + Variable x118=Variable.unary("SomeState_this"); + Decls x117=x118.oneOf(x9); + Expression x120=x118.join(x18); + Expression x121=x6.product(x8); + Formula x119=x120.in(x121); + Formula x116=x119.forAll(x117); + Expression x124=x18.join(Expression.UNIV); + Expression x123=x124.join(Expression.UNIV); + Formula x122=x123.in(x9); + Variable x127=Variable.unary("SomeState_this"); + Decls x126=x127.oneOf(x9); + Expression x129=x127.join(x19); + Expression x130=x6.product(x8); + Formula x128=x129.in(x130); + Formula x125=x128.forAll(x126); + Expression x133=x19.join(Expression.UNIV); + Expression x132=x133.join(Expression.UNIV); + Formula x131=x132.in(x9); + Variable x136=Variable.unary("SomeState_this"); + Decls x135=x136.oneOf(x9); + Expression x138=x136.join(x20); + Expression x139=x6.product(x8); + Formula x137=x138.in(x139); + Formula x134=x137.forAll(x135); + Expression x142=x20.join(Expression.UNIV); + Expression x141=x142.join(Expression.UNIV); + Formula x140=x141.in(x9); + Variable x145=Variable.unary("SomeState_this"); + Decls x144=x145.oneOf(x9); + Expression x147=x145.join(x21); + Formula x146=x147.in(x8); + Formula x143=x146.forAll(x144); + Expression x149=x21.join(Expression.UNIV); + Formula x148=x149.in(x9); + Variable x152=Variable.unary("SomeState_this"); + Decls x151=x152.oneOf(x9); + Expression x154=x152.join(x22); + Expression x155=x6.product(x8); + Formula x153=x154.in(x155); + Formula x150=x153.forAll(x151); + Expression x158=x22.join(Expression.UNIV); + Expression x157=x158.join(Expression.UNIV); + Formula x156=x157.in(x9); + Expression x161=x11.product(x23); + Expression x160=x11.join(x161); + Formula x159=x160.in(x9); + Expression x164=x11.product(x24); + Expression x163=x11.join(x164); + Expression x165=x9.product(x9); + Formula x162=x163.in(x165); + Formula x166=x24.totalOrder(x9,x23,x25); + Expression x169=x23.join(x18); + Expression x168=x6.join(x169); + Formula x167=x168.no(); + Variable x172=Variable.unary("SomeState_pre"); + Expression x175=x24.join(x9); + Expression x174=x9.difference(x175); + Expression x173=x9.difference(x174); + Decls x171=x172.oneOf(x173); + Expression x178=x172.join(x24); + Expression x177=x178.join(x21); + Expression x180=x172.join(x21); + Expression x182=x172.join(x20); + Expression x181=x6.join(x182); + Expression x179=x180.difference(x181); + Formula x176=x177.eq(x179); + Formula x170=x176.forAll(x171); + Variable x185=Variable.unary("SomeState_t"); + Decls x184=x185.oneOf(x9); + Expression x190=x185.join(x20); + Expression x189=x6.join(x190); + Expression x191=x185.join(x21); + Formula x188=x189.in(x191); + Expression x197=x185.join(x20); + Expression x196=x6.join(x197); + Expression x195=x196.join(x15); + Formula x194=x195.in(x185); + Expression x200=x185.join(x20); + Expression x199=x6.join(x200); + Expression x202=x185.join(x20); + Expression x201=x6.join(x202); + Formula x198=x199.eq(x201); + Formula x193=x194.and(x198); + Variable x206=Variable.unary("SomeState_n"); + Decls x205=x206.oneOf(x6); + Variable x208=Variable.unary("SomeState_m"); + Decls x207=x208.oneOf(x8); + Decls x204=x205.and(x207); + Expression x213=x208.join(x16); + Expression x212=x206.join(x213); + Formula x211=x212.eq(x185); + Formula x210=x211.not(); + Expression x216=x185.join(x19); + Expression x215=x206.join(x216); + Formula x214=x208.in(x215); + Formula x209=x210.or(x214); + Formula x203=x209.forAll(x204); + Formula x192=x193.and(x203); + Formula x187=x188.and(x192); + Expression x223=x185.join(x19); + Expression x222=x6.join(x223); + Expression x221=x222.join(x16); + Expression x220=x6.join(x221); + Formula x219=x220.in(x185); + Variable x226=Variable.unary("SomeState_n"); + Decls x225=x226.oneOf(x6); + Expression x231=x185.join(x20); + Expression x230=x226.join(x231); + Expression x229=x230.join(x14); + Expression x228=x229.join(x12); + Formula x227=x228.in(x226); + Formula x224=x227.forAll(x225); + Formula x218=x219.and(x224); + Variable x235=Variable.unary("SomeState_n"); + Decls x234=x235.oneOf(x6); + Variable x237=Variable.unary("SomeState_m"); + Decls x236=x237.oneOf(x8); + Decls x233=x234.and(x236); + Expression x243=x185.join(x18); + Expression x242=x235.join(x243); + Formula x241=x237.in(x242); + Formula x240=x241.not(); + Expression x247=x237.join(x14); + Expression x246=x247.join(x13); + Formula x245=x235.in(x246); + Expression x249=x237.join(x15); + Expression x252=x24.transpose(); + Expression x251=x252.closure(); + Expression x250=x185.join(x251); + Formula x248=x249.in(x250); + Formula x244=x245.and(x248); + Formula x239=x240.or(x244); + Expression x257=x185.join(x19); + Expression x256=x235.join(x257); + Formula x255=x237.in(x256); + Formula x254=x255.not(); + Expression x263=x24.closure(); + Expression x262=x185.join(x263); + Expression x261=x262.join(x18); + Expression x260=x235.join(x261); + Formula x259=x237.in(x260); + Formula x258=x259.not(); + Formula x253=x254.or(x258); + Formula x238=x239.and(x253); + Formula x232=x238.forAll(x233); + Formula x217=x218.and(x232); + Formula x186=x187.and(x217); + Formula x183=x186.forAll(x184); + Expression x266=x9.join(x20); + Expression x265=x6.join(x266); + Formula x264=x8.in(x265); + Formula x267=x19.in(x18); + IntExpression x269=x6.count(); + IntExpression x270=IntConstant.constant(1); + Formula x268=x269.gt(x270); + Formula x271=x0.eq(x0); + Formula x272=x1.eq(x1); + Formula x273=x2.eq(x2); + Formula x274=x3.eq(x3); + Formula x275=x4.eq(x4); + Formula x276=x5.eq(x5); + Formula x277=x6.eq(x6); + Formula x278=x7.eq(x7); + Formula x279=x8.eq(x8); + Formula x280=x9.eq(x9); + Formula x281=x10.eq(x10); + Formula x282=x11.eq(x11); + Formula x283=x12.eq(x12); + Formula x284=x13.eq(x13); + Formula x285=x14.eq(x14); + Formula x286=x15.eq(x15); + Formula x287=x16.eq(x16); + Formula x288=x17.eq(x17); + Formula x289=x18.eq(x18); + Formula x290=x19.eq(x19); + Formula x291=x20.eq(x20); + Formula x292=x21.eq(x21); + Formula x293=x22.eq(x22); + Formula x294=x23.eq(x23); + Formula x295=x24.eq(x24); + Formula x296=x25.eq(x25); + Formula x26=Formula.compose(FormulaOperator.AND, x27, x34, x37, x42, x44, x51, x53, x60, x62, x82, x85, x93, x113, x116, x122, x125, x131, x134, x140, x143, x148, x150, x156, x159, x162, x166, x167, x170, x183, x264, x267, x268, x271, x272, x273, x274, x275, x276, x277, x278, x279, x280, x281, x282, x283, x284, x285, x286, x287, x288, x289, x290, x291, x292, x293, x294, x295, x296); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x26,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/trace/traceTotalCheck.java b/Source/kodkod/examples/kodkod/examples/models/util/trace/traceTotalCheck.java new file mode 100644 index 0000000..a15c401 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/trace/traceTotalCheck.java @@ -0,0 +1,229 @@ +package kodkod.examples.models.util.trace; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "trace", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 6, + TransitiveClosure = 2, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 1, + Constraints = 4 +) + + + +public final class traceTotalCheck { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/elem"); + Relation x7 = Relation.unary("this/Ord"); + Relation x8 = Relation.unary("this/back"); + Relation x9 = Relation.unary("this/Ord.First"); + Relation x10 = Relation.nary("this/Ord.Next", 2); + Relation x11 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Ord$0", + "elem$0", "elem$1", "elem$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("elem$0")); + x6_upper.add(factory.tuple("elem$1")); + x6_upper.add(factory.tuple("elem$2")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Ord$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("elem$0")); + x8_upper.add(factory.tuple("elem$1")); + x8_upper.add(factory.tuple("elem$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(1); + x9_upper.add(factory.tuple("elem$0")); + x9_upper.add(factory.tuple("elem$1")); + x9_upper.add(factory.tuple("elem$2")); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(2); + x10_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$0"))); + x10_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$1"))); + x10_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$2"))); + x10_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$0"))); + x10_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$1"))); + x10_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$2"))); + x10_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$0"))); + x10_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$1"))); + x10_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$2"))); + bounds.bound(x10, x10_upper); + + TupleSet x11_upper = factory.noneOf(1); + x11_upper.add(factory.tuple("elem$0")); + x11_upper.add(factory.tuple("elem$1")); + x11_upper.add(factory.tuple("elem$2")); + bounds.bound(x11, x11_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Formula x13=x8.in(x6); + Formula x14=x8.lone(); + Expression x17=x7.product(x9); + Expression x16=x7.join(x17); + Formula x15=x16.in(x6); + Expression x20=x7.product(x10); + Expression x19=x7.join(x20); + Expression x21=x6.product(x6); + Formula x18=x19.in(x21); + Formula x22=x10.totalOrder(x6,x9,x11); + Expression x29=x10.join(x6); + Expression x28=x6.difference(x29); + Expression x27=x28.product(x8); + Formula x26=x27.no(); + Formula x25=x26.not(); + Variable x34=Variable.unary(""); + Decls x33=x34.oneOf(x6); + Formula x38=x34.eq(x9); + Expression x41=x10.union(x27); + Expression x40=x41.join(x34); + Formula x39=x40.one(); + Formula x37=x38.or(x39); + Expression x45=x41.join(x6); + Expression x44=x6.difference(x45); + Formula x43=x34.eq(x44); + Expression x47=x34.join(x41); + Formula x46=x47.one(); + Formula x42=x43.or(x46); + Formula x36=x37.and(x42); + Expression x51=x41.closure(); + Expression x50=x34.join(x51); + Formula x49=x34.in(x50); + Formula x48=x49.not(); + Formula x35=x36.and(x48); + Formula x32=x35.forAll(x33); + Expression x54=x41.reflexiveClosure(); + Expression x53=x9.join(x54); + Formula x52=x6.in(x53); + Formula x31=x32.and(x52); + Expression x56=x41.join(x9); + Formula x55=x56.no(); + Formula x30=x31.and(x55); + Formula x24=x25.or(x30); + Formula x23=x24.not(); + Formula x57=x0.eq(x0); + Formula x58=x1.eq(x1); + Formula x59=x2.eq(x2); + Formula x60=x3.eq(x3); + Formula x61=x4.eq(x4); + Formula x62=x5.eq(x5); + Formula x63=x6.eq(x6); + Formula x64=x7.eq(x7); + Formula x65=x8.eq(x8); + Formula x66=x9.eq(x9); + Formula x67=x10.eq(x10); + Formula x68=x11.eq(x11); + Formula x12=Formula.compose(FormulaOperator.AND, x13, x14, x15, x18, x22, x23, x57, x58, x59, x60, x61, x62, x63, x64, x65, x66, x67, x68); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x12,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck0.java b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck0.java new file mode 100644 index 0000000..e9941cc --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck0.java @@ -0,0 +1,339 @@ +package kodkod.examples.models.util.types; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ordering", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 4, + TransitiveClosure = 12, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 32 +) + +public final class orderingCorrectCheck0 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/elem"); + Relation x7 = Relation.unary("this/Ord"); + Relation x8 = Relation.unary("this/Ord.First"); + Relation x9 = Relation.nary("this/Ord.Next", 2); + Relation x10 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Ord$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + bounds.boundExactly(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x7.product(x8); + Expression x13=x7.join(x14); + Formula x12=x13.in(x6); + Expression x17=x7.product(x9); + Expression x16=x7.join(x17); + Expression x18=x6.product(x6); + Formula x15=x16.in(x18); + Formula x19=x9.totalOrder(x6,x8,x10); + Variable x25=Variable.unary("correct_b"); + Decls x24=x25.oneOf(x6); + Expression x29=x25.join(x9); + Formula x28=x29.lone(); + Expression x32=x9.transpose(); + Expression x31=x25.join(x32); + Formula x30=x31.lone(); + Formula x27=x28.and(x30); + Expression x36=x9.closure(); + Expression x35=x25.join(x36); + Formula x34=x25.in(x35); + Formula x33=x34.not(); + Formula x26=x27.and(x33); + Formula x23=x26.forAll(x24); + Expression x40=x8.join(x32); + Formula x39=x40.no(); + Variable x45=Variable.unary("correct_b"); + Decls x44=x45.oneOf(x6); + Formula x50=x45.eq(x8); + Formula x49=x50.not(); + Expression x54=x9.join(x6); + Expression x53=x6.difference(x54); + Formula x52=x45.eq(x53); + Formula x51=x52.not(); + Formula x48=x49.and(x51); + Formula x47=x48.not(); + Expression x57=x45.join(x32); + Formula x56=x57.one(); + Expression x59=x45.join(x9); + Formula x58=x59.one(); + Formula x55=x56.and(x58); + Formula x46=x47.or(x55); + Formula x43=x46.forAll(x44); + Expression x63=x9.closure(); + Expression x69=Expression.INTS.union(x5); + Expression x68=x69.union(x6); + Expression x67=x68.union(x7); + Expression x66=x67.product(Expression.UNIV); + Expression x64=Expression.IDEN.intersection(x66); + Expression x62=x63.union(x64); + Expression x61=x8.join(x62); + Formula x60=x6.eq(x61); + Formula x42=x43.and(x60); + Variable x75=Variable.unary("correct_a"); + Decls x74=x75.oneOf(x6); + Variable x77=Variable.unary("correct_b"); + Decls x76=x77.oneOf(x6); + Decls x73=x74.and(x76); + Expression x81=x75.intersection(x77); + Formula x80=x81.no(); + Formula x79=x80.not(); + Expression x85=x9.closure(); + Expression x84=x77.join(x85); + Formula x83=x75.in(x84); + Expression x89=x9.transpose(); + Expression x88=x89.closure(); + Expression x87=x77.join(x88); + Formula x86=x75.in(x87); + Formula x82=x83.or(x86); + Formula x78=x79.or(x82); + Formula x72=x78.forAll(x73); + Formula x41=x42.and(x72); + Formula x38=x39.and(x41); + Formula x95=x6.one(); + Formula x94=x95.not(); + Formula x93=x94.not(); + Formula x98=x8.one(); + Formula x101=x53.one(); + Expression x103=x8.join(x9); + Formula x102=x103.one(); + Formula x100=x101.and(x102); + Expression x105=x53.join(x32); + Formula x104=x105.one(); + Formula x99=x100.and(x104); + Formula x97=x98.and(x99); + Formula x107=x8.eq(x53); + Formula x106=x107.not(); + Formula x96=x97.and(x106); + Formula x92=x93.or(x96); + Variable x111=Variable.unary("correct_a"); + Decls x110=x111.oneOf(x6); + Variable x113=Variable.unary("correct_b"); + Decls x112=x113.oneOf(x6); + Decls x109=x110.and(x112); + Expression x118=x111.intersection(x113); + Formula x117=x118.no(); + Expression x121=x9.closure(); + Expression x120=x113.join(x121); + Formula x119=x111.in(x120); + Formula x116=x117.and(x119); + Expression x124=x89.closure(); + Expression x123=x113.join(x124); + Formula x122=x111.in(x123); + Formula x115=x116.and(x122); + Formula x114=x115.not(); + Formula x108=x114.forAll(x109); + Formula x91=x92.and(x108); + Variable x128=Variable.unary("correct_a"); + Decls x127=x128.oneOf(x6); + Variable x130=Variable.unary("correct_b"); + Decls x129=x130.oneOf(x6); + Variable x132=Variable.unary("correct_c"); + Decls x131=x132.oneOf(x6); + Decls x126=x127.and(x129).and(x131); + Expression x138=x128.union(x130); + Expression x137=x138.intersection(x132); + Formula x136=x137.no(); + Expression x140=x128.intersection(x130); + Formula x139=x140.no(); + Formula x135=x136.and(x139); + Formula x134=x135.not(); + Expression x146=x9.closure(); + Expression x145=x128.join(x146); + Formula x144=x130.in(x145); + Expression x149=x9.closure(); + Expression x148=x130.join(x149); + Formula x147=x132.in(x148); + Formula x143=x144.and(x147); + Formula x142=x143.not(); + Expression x152=x9.closure(); + Expression x151=x128.join(x152); + Formula x150=x132.in(x151); + Formula x141=x142.or(x150); + Formula x133=x134.or(x141); + Formula x125=x133.forAll(x126); + Formula x90=x91.and(x125); + Formula x37=x38.and(x90); + Formula x22=x23.and(x37); + Expression x156=x53.join(x9); + Formula x155=x156.no(); + Formula x160=x6.one(); + Formula x159=x160.not(); + Formula x163=x8.eq(x6); + Formula x165=x53.eq(x6); + Formula x166=x9.no(); + Formula x164=x165.and(x166); + Formula x162=x163.and(x164); + Formula x167=x89.no(); + Formula x161=x162.and(x167); + Formula x158=x159.or(x161); + Variable x171=Variable.unary("correct_a"); + Decls x170=x171.oneOf(x6); + Variable x173=Variable.unary("correct_b"); + Decls x172=x173.oneOf(x6); + Variable x175=Variable.unary("correct_c"); + Decls x174=x175.oneOf(x6); + Decls x169=x170.and(x172).and(x174); + Expression x181=x171.union(x173); + Expression x180=x181.intersection(x175); + Formula x179=x180.no(); + Expression x183=x171.intersection(x173); + Formula x182=x183.no(); + Formula x178=x179.and(x182); + Formula x177=x178.not(); + Expression x189=x89.closure(); + Expression x188=x171.join(x189); + Formula x187=x173.in(x188); + Expression x192=x89.closure(); + Expression x191=x173.join(x192); + Formula x190=x175.in(x191); + Formula x186=x187.and(x190); + Formula x185=x186.not(); + Expression x195=x89.closure(); + Expression x194=x171.join(x195); + Formula x193=x175.in(x194); + Formula x184=x185.or(x193); + Formula x176=x177.or(x184); + Formula x168=x176.forAll(x169); + Formula x157=x158.and(x168); + Formula x154=x155.and(x157); + Expression x197=x9.transpose(); + Formula x196=x89.eq(x197); + Formula x153=x154.and(x196); + Formula x21=x22.and(x153); + Formula x20=x21.not(); + Formula x198=x0.eq(x0); + Formula x199=x1.eq(x1); + Formula x200=x2.eq(x2); + Formula x201=x3.eq(x3); + Formula x202=x4.eq(x4); + Formula x203=x5.eq(x5); + Formula x204=x6.eq(x6); + Formula x205=x7.eq(x7); + Formula x206=x8.eq(x8); + Formula x207=x9.eq(x9); + Formula x208=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x15, x19, x20, x198, x199, x200, x201, x202, x203, x204, x205, x206, x207, x208); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck1.java b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck1.java new file mode 100644 index 0000000..0c9671b --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck1.java @@ -0,0 +1,344 @@ +package kodkod.examples.models.util.types; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ordering", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 4, + TransitiveClosure = 12, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 32 +) + +public final class orderingCorrectCheck1 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/elem"); + Relation x7 = Relation.unary("this/Ord"); + Relation x8 = Relation.unary("this/Ord.First"); + Relation x9 = Relation.nary("this/Ord.Next", 2); + Relation x10 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Ord$0", + "elem$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("elem$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Ord$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("elem$0")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$0"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("elem$0")); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x7.product(x8); + Expression x13=x7.join(x14); + Formula x12=x13.in(x6); + Expression x17=x7.product(x9); + Expression x16=x7.join(x17); + Expression x18=x6.product(x6); + Formula x15=x16.in(x18); + Formula x19=x9.totalOrder(x6,x8,x10); + Variable x25=Variable.unary("correct_b"); + Decls x24=x25.oneOf(x6); + Expression x29=x25.join(x9); + Formula x28=x29.lone(); + Expression x32=x9.transpose(); + Expression x31=x25.join(x32); + Formula x30=x31.lone(); + Formula x27=x28.and(x30); + Expression x36=x9.closure(); + Expression x35=x25.join(x36); + Formula x34=x25.in(x35); + Formula x33=x34.not(); + Formula x26=x27.and(x33); + Formula x23=x26.forAll(x24); + Expression x40=x8.join(x32); + Formula x39=x40.no(); + Variable x45=Variable.unary("correct_b"); + Decls x44=x45.oneOf(x6); + Formula x50=x45.eq(x8); + Formula x49=x50.not(); + Expression x54=x9.join(x6); + Expression x53=x6.difference(x54); + Formula x52=x45.eq(x53); + Formula x51=x52.not(); + Formula x48=x49.and(x51); + Formula x47=x48.not(); + Expression x57=x45.join(x32); + Formula x56=x57.one(); + Expression x59=x45.join(x9); + Formula x58=x59.one(); + Formula x55=x56.and(x58); + Formula x46=x47.or(x55); + Formula x43=x46.forAll(x44); + Expression x63=x9.closure(); + Expression x69=Expression.INTS.union(x5); + Expression x68=x69.union(x6); + Expression x67=x68.union(x7); + Expression x66=x67.product(Expression.UNIV); + Expression x64=Expression.IDEN.intersection(x66); + Expression x62=x63.union(x64); + Expression x61=x8.join(x62); + Formula x60=x6.eq(x61); + Formula x42=x43.and(x60); + Variable x75=Variable.unary("correct_a"); + Decls x74=x75.oneOf(x6); + Variable x77=Variable.unary("correct_b"); + Decls x76=x77.oneOf(x6); + Decls x73=x74.and(x76); + Expression x81=x75.intersection(x77); + Formula x80=x81.no(); + Formula x79=x80.not(); + Expression x85=x9.closure(); + Expression x84=x77.join(x85); + Formula x83=x75.in(x84); + Expression x89=x9.transpose(); + Expression x88=x89.closure(); + Expression x87=x77.join(x88); + Formula x86=x75.in(x87); + Formula x82=x83.or(x86); + Formula x78=x79.or(x82); + Formula x72=x78.forAll(x73); + Formula x41=x42.and(x72); + Formula x38=x39.and(x41); + Formula x95=x6.one(); + Formula x94=x95.not(); + Formula x93=x94.not(); + Formula x98=x8.one(); + Formula x101=x53.one(); + Expression x103=x8.join(x9); + Formula x102=x103.one(); + Formula x100=x101.and(x102); + Expression x105=x53.join(x32); + Formula x104=x105.one(); + Formula x99=x100.and(x104); + Formula x97=x98.and(x99); + Formula x107=x8.eq(x53); + Formula x106=x107.not(); + Formula x96=x97.and(x106); + Formula x92=x93.or(x96); + Variable x111=Variable.unary("correct_a"); + Decls x110=x111.oneOf(x6); + Variable x113=Variable.unary("correct_b"); + Decls x112=x113.oneOf(x6); + Decls x109=x110.and(x112); + Expression x118=x111.intersection(x113); + Formula x117=x118.no(); + Expression x121=x9.closure(); + Expression x120=x113.join(x121); + Formula x119=x111.in(x120); + Formula x116=x117.and(x119); + Expression x124=x89.closure(); + Expression x123=x113.join(x124); + Formula x122=x111.in(x123); + Formula x115=x116.and(x122); + Formula x114=x115.not(); + Formula x108=x114.forAll(x109); + Formula x91=x92.and(x108); + Variable x128=Variable.unary("correct_a"); + Decls x127=x128.oneOf(x6); + Variable x130=Variable.unary("correct_b"); + Decls x129=x130.oneOf(x6); + Variable x132=Variable.unary("correct_c"); + Decls x131=x132.oneOf(x6); + Decls x126=x127.and(x129).and(x131); + Expression x138=x128.union(x130); + Expression x137=x138.intersection(x132); + Formula x136=x137.no(); + Expression x140=x128.intersection(x130); + Formula x139=x140.no(); + Formula x135=x136.and(x139); + Formula x134=x135.not(); + Expression x146=x9.closure(); + Expression x145=x128.join(x146); + Formula x144=x130.in(x145); + Expression x149=x9.closure(); + Expression x148=x130.join(x149); + Formula x147=x132.in(x148); + Formula x143=x144.and(x147); + Formula x142=x143.not(); + Expression x152=x9.closure(); + Expression x151=x128.join(x152); + Formula x150=x132.in(x151); + Formula x141=x142.or(x150); + Formula x133=x134.or(x141); + Formula x125=x133.forAll(x126); + Formula x90=x91.and(x125); + Formula x37=x38.and(x90); + Formula x22=x23.and(x37); + Expression x156=x53.join(x9); + Formula x155=x156.no(); + Formula x160=x6.one(); + Formula x159=x160.not(); + Formula x163=x8.eq(x6); + Formula x165=x53.eq(x6); + Formula x166=x9.no(); + Formula x164=x165.and(x166); + Formula x162=x163.and(x164); + Formula x167=x89.no(); + Formula x161=x162.and(x167); + Formula x158=x159.or(x161); + Variable x171=Variable.unary("correct_a"); + Decls x170=x171.oneOf(x6); + Variable x173=Variable.unary("correct_b"); + Decls x172=x173.oneOf(x6); + Variable x175=Variable.unary("correct_c"); + Decls x174=x175.oneOf(x6); + Decls x169=x170.and(x172).and(x174); + Expression x181=x171.union(x173); + Expression x180=x181.intersection(x175); + Formula x179=x180.no(); + Expression x183=x171.intersection(x173); + Formula x182=x183.no(); + Formula x178=x179.and(x182); + Formula x177=x178.not(); + Expression x189=x89.closure(); + Expression x188=x171.join(x189); + Formula x187=x173.in(x188); + Expression x192=x89.closure(); + Expression x191=x173.join(x192); + Formula x190=x175.in(x191); + Formula x186=x187.and(x190); + Formula x185=x186.not(); + Expression x195=x89.closure(); + Expression x194=x171.join(x195); + Formula x193=x175.in(x194); + Formula x184=x185.or(x193); + Formula x176=x177.or(x184); + Formula x168=x176.forAll(x169); + Formula x157=x158.and(x168); + Formula x154=x155.and(x157); + Expression x197=x9.transpose(); + Formula x196=x89.eq(x197); + Formula x153=x154.and(x196); + Formula x21=x22.and(x153); + Formula x20=x21.not(); + Formula x198=x0.eq(x0); + Formula x199=x1.eq(x1); + Formula x200=x2.eq(x2); + Formula x201=x3.eq(x3); + Formula x202=x4.eq(x4); + Formula x203=x5.eq(x5); + Formula x204=x6.eq(x6); + Formula x205=x7.eq(x7); + Formula x206=x8.eq(x8); + Formula x207=x9.eq(x9); + Formula x208=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x15, x19, x20, x198, x199, x200, x201, x202, x203, x204, x205, x206, x207, x208); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck2.java b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck2.java new file mode 100644 index 0000000..3ca00e7 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck2.java @@ -0,0 +1,350 @@ +package kodkod.examples.models.util.types; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ordering", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 4, + TransitiveClosure = 12, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 32 +) + +public final class orderingCorrectCheck2 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/elem"); + Relation x7 = Relation.unary("this/Ord"); + Relation x8 = Relation.unary("this/Ord.First"); + Relation x9 = Relation.nary("this/Ord.Next", 2); + Relation x10 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Ord$0", + "elem$0", "elem$1" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("elem$0")); + x6_upper.add(factory.tuple("elem$1")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Ord$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("elem$0")); + x8_upper.add(factory.tuple("elem$1")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$1"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("elem$0")); + x10_upper.add(factory.tuple("elem$1")); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x7.product(x8); + Expression x13=x7.join(x14); + Formula x12=x13.in(x6); + Expression x17=x7.product(x9); + Expression x16=x7.join(x17); + Expression x18=x6.product(x6); + Formula x15=x16.in(x18); + Formula x19=x9.totalOrder(x6,x8,x10); + Variable x25=Variable.unary("correct_b"); + Decls x24=x25.oneOf(x6); + Expression x29=x25.join(x9); + Formula x28=x29.lone(); + Expression x32=x9.transpose(); + Expression x31=x25.join(x32); + Formula x30=x31.lone(); + Formula x27=x28.and(x30); + Expression x36=x9.closure(); + Expression x35=x25.join(x36); + Formula x34=x25.in(x35); + Formula x33=x34.not(); + Formula x26=x27.and(x33); + Formula x23=x26.forAll(x24); + Expression x40=x8.join(x32); + Formula x39=x40.no(); + Variable x45=Variable.unary("correct_b"); + Decls x44=x45.oneOf(x6); + Formula x50=x45.eq(x8); + Formula x49=x50.not(); + Expression x54=x9.join(x6); + Expression x53=x6.difference(x54); + Formula x52=x45.eq(x53); + Formula x51=x52.not(); + Formula x48=x49.and(x51); + Formula x47=x48.not(); + Expression x57=x45.join(x32); + Formula x56=x57.one(); + Expression x59=x45.join(x9); + Formula x58=x59.one(); + Formula x55=x56.and(x58); + Formula x46=x47.or(x55); + Formula x43=x46.forAll(x44); + Expression x63=x9.closure(); + Expression x69=Expression.INTS.union(x5); + Expression x68=x69.union(x6); + Expression x67=x68.union(x7); + Expression x66=x67.product(Expression.UNIV); + Expression x64=Expression.IDEN.intersection(x66); + Expression x62=x63.union(x64); + Expression x61=x8.join(x62); + Formula x60=x6.eq(x61); + Formula x42=x43.and(x60); + Variable x75=Variable.unary("correct_a"); + Decls x74=x75.oneOf(x6); + Variable x77=Variable.unary("correct_b"); + Decls x76=x77.oneOf(x6); + Decls x73=x74.and(x76); + Expression x81=x75.intersection(x77); + Formula x80=x81.no(); + Formula x79=x80.not(); + Expression x85=x9.closure(); + Expression x84=x77.join(x85); + Formula x83=x75.in(x84); + Expression x89=x9.transpose(); + Expression x88=x89.closure(); + Expression x87=x77.join(x88); + Formula x86=x75.in(x87); + Formula x82=x83.or(x86); + Formula x78=x79.or(x82); + Formula x72=x78.forAll(x73); + Formula x41=x42.and(x72); + Formula x38=x39.and(x41); + Formula x95=x6.one(); + Formula x94=x95.not(); + Formula x93=x94.not(); + Formula x98=x8.one(); + Formula x101=x53.one(); + Expression x103=x8.join(x9); + Formula x102=x103.one(); + Formula x100=x101.and(x102); + Expression x105=x53.join(x32); + Formula x104=x105.one(); + Formula x99=x100.and(x104); + Formula x97=x98.and(x99); + Formula x107=x8.eq(x53); + Formula x106=x107.not(); + Formula x96=x97.and(x106); + Formula x92=x93.or(x96); + Variable x111=Variable.unary("correct_a"); + Decls x110=x111.oneOf(x6); + Variable x113=Variable.unary("correct_b"); + Decls x112=x113.oneOf(x6); + Decls x109=x110.and(x112); + Expression x118=x111.intersection(x113); + Formula x117=x118.no(); + Expression x121=x9.closure(); + Expression x120=x113.join(x121); + Formula x119=x111.in(x120); + Formula x116=x117.and(x119); + Expression x124=x89.closure(); + Expression x123=x113.join(x124); + Formula x122=x111.in(x123); + Formula x115=x116.and(x122); + Formula x114=x115.not(); + Formula x108=x114.forAll(x109); + Formula x91=x92.and(x108); + Variable x128=Variable.unary("correct_a"); + Decls x127=x128.oneOf(x6); + Variable x130=Variable.unary("correct_b"); + Decls x129=x130.oneOf(x6); + Variable x132=Variable.unary("correct_c"); + Decls x131=x132.oneOf(x6); + Decls x126=x127.and(x129).and(x131); + Expression x138=x128.union(x130); + Expression x137=x138.intersection(x132); + Formula x136=x137.no(); + Expression x140=x128.intersection(x130); + Formula x139=x140.no(); + Formula x135=x136.and(x139); + Formula x134=x135.not(); + Expression x146=x9.closure(); + Expression x145=x128.join(x146); + Formula x144=x130.in(x145); + Expression x149=x9.closure(); + Expression x148=x130.join(x149); + Formula x147=x132.in(x148); + Formula x143=x144.and(x147); + Formula x142=x143.not(); + Expression x152=x9.closure(); + Expression x151=x128.join(x152); + Formula x150=x132.in(x151); + Formula x141=x142.or(x150); + Formula x133=x134.or(x141); + Formula x125=x133.forAll(x126); + Formula x90=x91.and(x125); + Formula x37=x38.and(x90); + Formula x22=x23.and(x37); + Expression x156=x53.join(x9); + Formula x155=x156.no(); + Formula x160=x6.one(); + Formula x159=x160.not(); + Formula x163=x8.eq(x6); + Formula x165=x53.eq(x6); + Formula x166=x9.no(); + Formula x164=x165.and(x166); + Formula x162=x163.and(x164); + Formula x167=x89.no(); + Formula x161=x162.and(x167); + Formula x158=x159.or(x161); + Variable x171=Variable.unary("correct_a"); + Decls x170=x171.oneOf(x6); + Variable x173=Variable.unary("correct_b"); + Decls x172=x173.oneOf(x6); + Variable x175=Variable.unary("correct_c"); + Decls x174=x175.oneOf(x6); + Decls x169=x170.and(x172).and(x174); + Expression x181=x171.union(x173); + Expression x180=x181.intersection(x175); + Formula x179=x180.no(); + Expression x183=x171.intersection(x173); + Formula x182=x183.no(); + Formula x178=x179.and(x182); + Formula x177=x178.not(); + Expression x189=x89.closure(); + Expression x188=x171.join(x189); + Formula x187=x173.in(x188); + Expression x192=x89.closure(); + Expression x191=x173.join(x192); + Formula x190=x175.in(x191); + Formula x186=x187.and(x190); + Formula x185=x186.not(); + Expression x195=x89.closure(); + Expression x194=x171.join(x195); + Formula x193=x175.in(x194); + Formula x184=x185.or(x193); + Formula x176=x177.or(x184); + Formula x168=x176.forAll(x169); + Formula x157=x158.and(x168); + Formula x154=x155.and(x157); + Expression x197=x9.transpose(); + Formula x196=x89.eq(x197); + Formula x153=x154.and(x196); + Formula x21=x22.and(x153); + Formula x20=x21.not(); + Formula x198=x0.eq(x0); + Formula x199=x1.eq(x1); + Formula x200=x2.eq(x2); + Formula x201=x3.eq(x3); + Formula x202=x4.eq(x4); + Formula x203=x5.eq(x5); + Formula x204=x6.eq(x6); + Formula x205=x7.eq(x7); + Formula x206=x8.eq(x8); + Formula x207=x9.eq(x9); + Formula x208=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x15, x19, x20, x198, x199, x200, x201, x202, x203, x204, x205, x206, x207, x208); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck3.java b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck3.java new file mode 100644 index 0000000..4dbba45 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck3.java @@ -0,0 +1,358 @@ +package kodkod.examples.models.util.types; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ordering", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 4, + TransitiveClosure = 12, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 32 +) + +public final class orderingCorrectCheck3 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/elem"); + Relation x7 = Relation.unary("this/Ord"); + Relation x8 = Relation.unary("this/Ord.First"); + Relation x9 = Relation.nary("this/Ord.Next", 2); + Relation x10 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Ord$0", + "elem$0", "elem$1", "elem$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("elem$0")); + x6_upper.add(factory.tuple("elem$1")); + x6_upper.add(factory.tuple("elem$2")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Ord$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("elem$0")); + x8_upper.add(factory.tuple("elem$1")); + x8_upper.add(factory.tuple("elem$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$2"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("elem$0")); + x10_upper.add(factory.tuple("elem$1")); + x10_upper.add(factory.tuple("elem$2")); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x7.product(x8); + Expression x13=x7.join(x14); + Formula x12=x13.in(x6); + Expression x17=x7.product(x9); + Expression x16=x7.join(x17); + Expression x18=x6.product(x6); + Formula x15=x16.in(x18); + Formula x19=x9.totalOrder(x6,x8,x10); + Variable x25=Variable.unary("correct_b"); + Decls x24=x25.oneOf(x6); + Expression x29=x25.join(x9); + Formula x28=x29.lone(); + Expression x32=x9.transpose(); + Expression x31=x25.join(x32); + Formula x30=x31.lone(); + Formula x27=x28.and(x30); + Expression x36=x9.closure(); + Expression x35=x25.join(x36); + Formula x34=x25.in(x35); + Formula x33=x34.not(); + Formula x26=x27.and(x33); + Formula x23=x26.forAll(x24); + Expression x40=x8.join(x32); + Formula x39=x40.no(); + Variable x45=Variable.unary("correct_b"); + Decls x44=x45.oneOf(x6); + Formula x50=x45.eq(x8); + Formula x49=x50.not(); + Expression x54=x9.join(x6); + Expression x53=x6.difference(x54); + Formula x52=x45.eq(x53); + Formula x51=x52.not(); + Formula x48=x49.and(x51); + Formula x47=x48.not(); + Expression x57=x45.join(x32); + Formula x56=x57.one(); + Expression x59=x45.join(x9); + Formula x58=x59.one(); + Formula x55=x56.and(x58); + Formula x46=x47.or(x55); + Formula x43=x46.forAll(x44); + Expression x63=x9.closure(); + Expression x69=Expression.INTS.union(x5); + Expression x68=x69.union(x6); + Expression x67=x68.union(x7); + Expression x66=x67.product(Expression.UNIV); + Expression x64=Expression.IDEN.intersection(x66); + Expression x62=x63.union(x64); + Expression x61=x8.join(x62); + Formula x60=x6.eq(x61); + Formula x42=x43.and(x60); + Variable x75=Variable.unary("correct_a"); + Decls x74=x75.oneOf(x6); + Variable x77=Variable.unary("correct_b"); + Decls x76=x77.oneOf(x6); + Decls x73=x74.and(x76); + Expression x81=x75.intersection(x77); + Formula x80=x81.no(); + Formula x79=x80.not(); + Expression x85=x9.closure(); + Expression x84=x77.join(x85); + Formula x83=x75.in(x84); + Expression x89=x9.transpose(); + Expression x88=x89.closure(); + Expression x87=x77.join(x88); + Formula x86=x75.in(x87); + Formula x82=x83.or(x86); + Formula x78=x79.or(x82); + Formula x72=x78.forAll(x73); + Formula x41=x42.and(x72); + Formula x38=x39.and(x41); + Formula x95=x6.one(); + Formula x94=x95.not(); + Formula x93=x94.not(); + Formula x98=x8.one(); + Formula x101=x53.one(); + Expression x103=x8.join(x9); + Formula x102=x103.one(); + Formula x100=x101.and(x102); + Expression x105=x53.join(x32); + Formula x104=x105.one(); + Formula x99=x100.and(x104); + Formula x97=x98.and(x99); + Formula x107=x8.eq(x53); + Formula x106=x107.not(); + Formula x96=x97.and(x106); + Formula x92=x93.or(x96); + Variable x111=Variable.unary("correct_a"); + Decls x110=x111.oneOf(x6); + Variable x113=Variable.unary("correct_b"); + Decls x112=x113.oneOf(x6); + Decls x109=x110.and(x112); + Expression x118=x111.intersection(x113); + Formula x117=x118.no(); + Expression x121=x9.closure(); + Expression x120=x113.join(x121); + Formula x119=x111.in(x120); + Formula x116=x117.and(x119); + Expression x124=x89.closure(); + Expression x123=x113.join(x124); + Formula x122=x111.in(x123); + Formula x115=x116.and(x122); + Formula x114=x115.not(); + Formula x108=x114.forAll(x109); + Formula x91=x92.and(x108); + Variable x128=Variable.unary("correct_a"); + Decls x127=x128.oneOf(x6); + Variable x130=Variable.unary("correct_b"); + Decls x129=x130.oneOf(x6); + Variable x132=Variable.unary("correct_c"); + Decls x131=x132.oneOf(x6); + Decls x126=x127.and(x129).and(x131); + Expression x138=x128.union(x130); + Expression x137=x138.intersection(x132); + Formula x136=x137.no(); + Expression x140=x128.intersection(x130); + Formula x139=x140.no(); + Formula x135=x136.and(x139); + Formula x134=x135.not(); + Expression x146=x9.closure(); + Expression x145=x128.join(x146); + Formula x144=x130.in(x145); + Expression x149=x9.closure(); + Expression x148=x130.join(x149); + Formula x147=x132.in(x148); + Formula x143=x144.and(x147); + Formula x142=x143.not(); + Expression x152=x9.closure(); + Expression x151=x128.join(x152); + Formula x150=x132.in(x151); + Formula x141=x142.or(x150); + Formula x133=x134.or(x141); + Formula x125=x133.forAll(x126); + Formula x90=x91.and(x125); + Formula x37=x38.and(x90); + Formula x22=x23.and(x37); + Expression x156=x53.join(x9); + Formula x155=x156.no(); + Formula x160=x6.one(); + Formula x159=x160.not(); + Formula x163=x8.eq(x6); + Formula x165=x53.eq(x6); + Formula x166=x9.no(); + Formula x164=x165.and(x166); + Formula x162=x163.and(x164); + Formula x167=x89.no(); + Formula x161=x162.and(x167); + Formula x158=x159.or(x161); + Variable x171=Variable.unary("correct_a"); + Decls x170=x171.oneOf(x6); + Variable x173=Variable.unary("correct_b"); + Decls x172=x173.oneOf(x6); + Variable x175=Variable.unary("correct_c"); + Decls x174=x175.oneOf(x6); + Decls x169=x170.and(x172).and(x174); + Expression x181=x171.union(x173); + Expression x180=x181.intersection(x175); + Formula x179=x180.no(); + Expression x183=x171.intersection(x173); + Formula x182=x183.no(); + Formula x178=x179.and(x182); + Formula x177=x178.not(); + Expression x189=x89.closure(); + Expression x188=x171.join(x189); + Formula x187=x173.in(x188); + Expression x192=x89.closure(); + Expression x191=x173.join(x192); + Formula x190=x175.in(x191); + Formula x186=x187.and(x190); + Formula x185=x186.not(); + Expression x195=x89.closure(); + Expression x194=x171.join(x195); + Formula x193=x175.in(x194); + Formula x184=x185.or(x193); + Formula x176=x177.or(x184); + Formula x168=x176.forAll(x169); + Formula x157=x158.and(x168); + Formula x154=x155.and(x157); + Expression x197=x9.transpose(); + Formula x196=x89.eq(x197); + Formula x153=x154.and(x196); + Formula x21=x22.and(x153); + Formula x20=x21.not(); + Formula x198=x0.eq(x0); + Formula x199=x1.eq(x1); + Formula x200=x2.eq(x2); + Formula x201=x3.eq(x3); + Formula x202=x4.eq(x4); + Formula x203=x5.eq(x5); + Formula x204=x6.eq(x6); + Formula x205=x7.eq(x7); + Formula x206=x8.eq(x8); + Formula x207=x9.eq(x9); + Formula x208=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x15, x19, x20, x198, x199, x200, x201, x202, x203, x204, x205, x206, x207, x208); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck4.java b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck4.java new file mode 100644 index 0000000..c0a342f --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck4.java @@ -0,0 +1,368 @@ +package kodkod.examples.models.util.types; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ordering", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 4, + TransitiveClosure = 12, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 32 +) + +public final class orderingCorrectCheck4 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/elem"); + Relation x7 = Relation.unary("this/Ord"); + Relation x8 = Relation.unary("this/Ord.First"); + Relation x9 = Relation.nary("this/Ord.Next", 2); + Relation x10 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Ord$0", + "elem$0", "elem$1", "elem$2", "elem$3" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("elem$0")); + x6_upper.add(factory.tuple("elem$1")); + x6_upper.add(factory.tuple("elem$2")); + x6_upper.add(factory.tuple("elem$3")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Ord$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("elem$0")); + x8_upper.add(factory.tuple("elem$1")); + x8_upper.add(factory.tuple("elem$2")); + x8_upper.add(factory.tuple("elem$3")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$3"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$3"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$3"))); + x9_upper.add(factory.tuple("elem$3").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$3").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$3").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$3").product(factory.tuple("elem$3"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("elem$0")); + x10_upper.add(factory.tuple("elem$1")); + x10_upper.add(factory.tuple("elem$2")); + x10_upper.add(factory.tuple("elem$3")); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x7.product(x8); + Expression x13=x7.join(x14); + Formula x12=x13.in(x6); + Expression x17=x7.product(x9); + Expression x16=x7.join(x17); + Expression x18=x6.product(x6); + Formula x15=x16.in(x18); + Formula x19=x9.totalOrder(x6,x8,x10); + Variable x25=Variable.unary("correct_b"); + Decls x24=x25.oneOf(x6); + Expression x29=x25.join(x9); + Formula x28=x29.lone(); + Expression x32=x9.transpose(); + Expression x31=x25.join(x32); + Formula x30=x31.lone(); + Formula x27=x28.and(x30); + Expression x36=x9.closure(); + Expression x35=x25.join(x36); + Formula x34=x25.in(x35); + Formula x33=x34.not(); + Formula x26=x27.and(x33); + Formula x23=x26.forAll(x24); + Expression x40=x8.join(x32); + Formula x39=x40.no(); + Variable x45=Variable.unary("correct_b"); + Decls x44=x45.oneOf(x6); + Formula x50=x45.eq(x8); + Formula x49=x50.not(); + Expression x54=x9.join(x6); + Expression x53=x6.difference(x54); + Formula x52=x45.eq(x53); + Formula x51=x52.not(); + Formula x48=x49.and(x51); + Formula x47=x48.not(); + Expression x57=x45.join(x32); + Formula x56=x57.one(); + Expression x59=x45.join(x9); + Formula x58=x59.one(); + Formula x55=x56.and(x58); + Formula x46=x47.or(x55); + Formula x43=x46.forAll(x44); + Expression x63=x9.closure(); + Expression x69=Expression.INTS.union(x5); + Expression x68=x69.union(x6); + Expression x67=x68.union(x7); + Expression x66=x67.product(Expression.UNIV); + Expression x64=Expression.IDEN.intersection(x66); + Expression x62=x63.union(x64); + Expression x61=x8.join(x62); + Formula x60=x6.eq(x61); + Formula x42=x43.and(x60); + Variable x75=Variable.unary("correct_a"); + Decls x74=x75.oneOf(x6); + Variable x77=Variable.unary("correct_b"); + Decls x76=x77.oneOf(x6); + Decls x73=x74.and(x76); + Expression x81=x75.intersection(x77); + Formula x80=x81.no(); + Formula x79=x80.not(); + Expression x85=x9.closure(); + Expression x84=x77.join(x85); + Formula x83=x75.in(x84); + Expression x89=x9.transpose(); + Expression x88=x89.closure(); + Expression x87=x77.join(x88); + Formula x86=x75.in(x87); + Formula x82=x83.or(x86); + Formula x78=x79.or(x82); + Formula x72=x78.forAll(x73); + Formula x41=x42.and(x72); + Formula x38=x39.and(x41); + Formula x95=x6.one(); + Formula x94=x95.not(); + Formula x93=x94.not(); + Formula x98=x8.one(); + Formula x101=x53.one(); + Expression x103=x8.join(x9); + Formula x102=x103.one(); + Formula x100=x101.and(x102); + Expression x105=x53.join(x32); + Formula x104=x105.one(); + Formula x99=x100.and(x104); + Formula x97=x98.and(x99); + Formula x107=x8.eq(x53); + Formula x106=x107.not(); + Formula x96=x97.and(x106); + Formula x92=x93.or(x96); + Variable x111=Variable.unary("correct_a"); + Decls x110=x111.oneOf(x6); + Variable x113=Variable.unary("correct_b"); + Decls x112=x113.oneOf(x6); + Decls x109=x110.and(x112); + Expression x118=x111.intersection(x113); + Formula x117=x118.no(); + Expression x121=x9.closure(); + Expression x120=x113.join(x121); + Formula x119=x111.in(x120); + Formula x116=x117.and(x119); + Expression x124=x89.closure(); + Expression x123=x113.join(x124); + Formula x122=x111.in(x123); + Formula x115=x116.and(x122); + Formula x114=x115.not(); + Formula x108=x114.forAll(x109); + Formula x91=x92.and(x108); + Variable x128=Variable.unary("correct_a"); + Decls x127=x128.oneOf(x6); + Variable x130=Variable.unary("correct_b"); + Decls x129=x130.oneOf(x6); + Variable x132=Variable.unary("correct_c"); + Decls x131=x132.oneOf(x6); + Decls x126=x127.and(x129).and(x131); + Expression x138=x128.union(x130); + Expression x137=x138.intersection(x132); + Formula x136=x137.no(); + Expression x140=x128.intersection(x130); + Formula x139=x140.no(); + Formula x135=x136.and(x139); + Formula x134=x135.not(); + Expression x146=x9.closure(); + Expression x145=x128.join(x146); + Formula x144=x130.in(x145); + Expression x149=x9.closure(); + Expression x148=x130.join(x149); + Formula x147=x132.in(x148); + Formula x143=x144.and(x147); + Formula x142=x143.not(); + Expression x152=x9.closure(); + Expression x151=x128.join(x152); + Formula x150=x132.in(x151); + Formula x141=x142.or(x150); + Formula x133=x134.or(x141); + Formula x125=x133.forAll(x126); + Formula x90=x91.and(x125); + Formula x37=x38.and(x90); + Formula x22=x23.and(x37); + Expression x156=x53.join(x9); + Formula x155=x156.no(); + Formula x160=x6.one(); + Formula x159=x160.not(); + Formula x163=x8.eq(x6); + Formula x165=x53.eq(x6); + Formula x166=x9.no(); + Formula x164=x165.and(x166); + Formula x162=x163.and(x164); + Formula x167=x89.no(); + Formula x161=x162.and(x167); + Formula x158=x159.or(x161); + Variable x171=Variable.unary("correct_a"); + Decls x170=x171.oneOf(x6); + Variable x173=Variable.unary("correct_b"); + Decls x172=x173.oneOf(x6); + Variable x175=Variable.unary("correct_c"); + Decls x174=x175.oneOf(x6); + Decls x169=x170.and(x172).and(x174); + Expression x181=x171.union(x173); + Expression x180=x181.intersection(x175); + Formula x179=x180.no(); + Expression x183=x171.intersection(x173); + Formula x182=x183.no(); + Formula x178=x179.and(x182); + Formula x177=x178.not(); + Expression x189=x89.closure(); + Expression x188=x171.join(x189); + Formula x187=x173.in(x188); + Expression x192=x89.closure(); + Expression x191=x173.join(x192); + Formula x190=x175.in(x191); + Formula x186=x187.and(x190); + Formula x185=x186.not(); + Expression x195=x89.closure(); + Expression x194=x171.join(x195); + Formula x193=x175.in(x194); + Formula x184=x185.or(x193); + Formula x176=x177.or(x184); + Formula x168=x176.forAll(x169); + Formula x157=x158.and(x168); + Formula x154=x155.and(x157); + Expression x197=x9.transpose(); + Formula x196=x89.eq(x197); + Formula x153=x154.and(x196); + Formula x21=x22.and(x153); + Formula x20=x21.not(); + Formula x198=x0.eq(x0); + Formula x199=x1.eq(x1); + Formula x200=x2.eq(x2); + Formula x201=x3.eq(x3); + Formula x202=x4.eq(x4); + Formula x203=x5.eq(x5); + Formula x204=x6.eq(x6); + Formula x205=x7.eq(x7); + Formula x206=x8.eq(x8); + Formula x207=x9.eq(x9); + Formula x208=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x15, x19, x20, x198, x199, x200, x201, x202, x203, x204, x205, x206, x207, x208); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck5.java b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck5.java new file mode 100644 index 0000000..0ccba78 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingCorrectCheck5.java @@ -0,0 +1,380 @@ +package kodkod.examples.models.util.types; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ordering", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 4, + TransitiveClosure = 12, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 32 +) + +public final class orderingCorrectCheck5 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/elem"); + Relation x7 = Relation.unary("this/Ord"); + Relation x8 = Relation.unary("this/Ord.First"); + Relation x9 = Relation.nary("this/Ord.Next", 2); + Relation x10 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Ord$0", + "elem$0", "elem$1", "elem$2", "elem$3", "elem$4" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("elem$0")); + x6_upper.add(factory.tuple("elem$1")); + x6_upper.add(factory.tuple("elem$2")); + x6_upper.add(factory.tuple("elem$3")); + x6_upper.add(factory.tuple("elem$4")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Ord$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("elem$0")); + x8_upper.add(factory.tuple("elem$1")); + x8_upper.add(factory.tuple("elem$2")); + x8_upper.add(factory.tuple("elem$3")); + x8_upper.add(factory.tuple("elem$4")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$3"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$4"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$3"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$4"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$3"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$4"))); + x9_upper.add(factory.tuple("elem$3").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$3").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$3").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$3").product(factory.tuple("elem$3"))); + x9_upper.add(factory.tuple("elem$3").product(factory.tuple("elem$4"))); + x9_upper.add(factory.tuple("elem$4").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$4").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$4").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$4").product(factory.tuple("elem$3"))); + x9_upper.add(factory.tuple("elem$4").product(factory.tuple("elem$4"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("elem$0")); + x10_upper.add(factory.tuple("elem$1")); + x10_upper.add(factory.tuple("elem$2")); + x10_upper.add(factory.tuple("elem$3")); + x10_upper.add(factory.tuple("elem$4")); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x7.product(x8); + Expression x13=x7.join(x14); + Formula x12=x13.in(x6); + Expression x17=x7.product(x9); + Expression x16=x7.join(x17); + Expression x18=x6.product(x6); + Formula x15=x16.in(x18); + Formula x19=x9.totalOrder(x6,x8,x10); + Variable x25=Variable.unary("correct_b"); + Decls x24=x25.oneOf(x6); + Expression x29=x25.join(x9); + Formula x28=x29.lone(); + Expression x32=x9.transpose(); + Expression x31=x25.join(x32); + Formula x30=x31.lone(); + Formula x27=x28.and(x30); + Expression x36=x9.closure(); + Expression x35=x25.join(x36); + Formula x34=x25.in(x35); + Formula x33=x34.not(); + Formula x26=x27.and(x33); + Formula x23=x26.forAll(x24); + Expression x40=x8.join(x32); + Formula x39=x40.no(); + Variable x45=Variable.unary("correct_b"); + Decls x44=x45.oneOf(x6); + Formula x50=x45.eq(x8); + Formula x49=x50.not(); + Expression x54=x9.join(x6); + Expression x53=x6.difference(x54); + Formula x52=x45.eq(x53); + Formula x51=x52.not(); + Formula x48=x49.and(x51); + Formula x47=x48.not(); + Expression x57=x45.join(x32); + Formula x56=x57.one(); + Expression x59=x45.join(x9); + Formula x58=x59.one(); + Formula x55=x56.and(x58); + Formula x46=x47.or(x55); + Formula x43=x46.forAll(x44); + Expression x63=x9.closure(); + Expression x69=Expression.INTS.union(x5); + Expression x68=x69.union(x6); + Expression x67=x68.union(x7); + Expression x66=x67.product(Expression.UNIV); + Expression x64=Expression.IDEN.intersection(x66); + Expression x62=x63.union(x64); + Expression x61=x8.join(x62); + Formula x60=x6.eq(x61); + Formula x42=x43.and(x60); + Variable x75=Variable.unary("correct_a"); + Decls x74=x75.oneOf(x6); + Variable x77=Variable.unary("correct_b"); + Decls x76=x77.oneOf(x6); + Decls x73=x74.and(x76); + Expression x81=x75.intersection(x77); + Formula x80=x81.no(); + Formula x79=x80.not(); + Expression x85=x9.closure(); + Expression x84=x77.join(x85); + Formula x83=x75.in(x84); + Expression x89=x9.transpose(); + Expression x88=x89.closure(); + Expression x87=x77.join(x88); + Formula x86=x75.in(x87); + Formula x82=x83.or(x86); + Formula x78=x79.or(x82); + Formula x72=x78.forAll(x73); + Formula x41=x42.and(x72); + Formula x38=x39.and(x41); + Formula x95=x6.one(); + Formula x94=x95.not(); + Formula x93=x94.not(); + Formula x98=x8.one(); + Formula x101=x53.one(); + Expression x103=x8.join(x9); + Formula x102=x103.one(); + Formula x100=x101.and(x102); + Expression x105=x53.join(x32); + Formula x104=x105.one(); + Formula x99=x100.and(x104); + Formula x97=x98.and(x99); + Formula x107=x8.eq(x53); + Formula x106=x107.not(); + Formula x96=x97.and(x106); + Formula x92=x93.or(x96); + Variable x111=Variable.unary("correct_a"); + Decls x110=x111.oneOf(x6); + Variable x113=Variable.unary("correct_b"); + Decls x112=x113.oneOf(x6); + Decls x109=x110.and(x112); + Expression x118=x111.intersection(x113); + Formula x117=x118.no(); + Expression x121=x9.closure(); + Expression x120=x113.join(x121); + Formula x119=x111.in(x120); + Formula x116=x117.and(x119); + Expression x124=x89.closure(); + Expression x123=x113.join(x124); + Formula x122=x111.in(x123); + Formula x115=x116.and(x122); + Formula x114=x115.not(); + Formula x108=x114.forAll(x109); + Formula x91=x92.and(x108); + Variable x128=Variable.unary("correct_a"); + Decls x127=x128.oneOf(x6); + Variable x130=Variable.unary("correct_b"); + Decls x129=x130.oneOf(x6); + Variable x132=Variable.unary("correct_c"); + Decls x131=x132.oneOf(x6); + Decls x126=x127.and(x129).and(x131); + Expression x138=x128.union(x130); + Expression x137=x138.intersection(x132); + Formula x136=x137.no(); + Expression x140=x128.intersection(x130); + Formula x139=x140.no(); + Formula x135=x136.and(x139); + Formula x134=x135.not(); + Expression x146=x9.closure(); + Expression x145=x128.join(x146); + Formula x144=x130.in(x145); + Expression x149=x9.closure(); + Expression x148=x130.join(x149); + Formula x147=x132.in(x148); + Formula x143=x144.and(x147); + Formula x142=x143.not(); + Expression x152=x9.closure(); + Expression x151=x128.join(x152); + Formula x150=x132.in(x151); + Formula x141=x142.or(x150); + Formula x133=x134.or(x141); + Formula x125=x133.forAll(x126); + Formula x90=x91.and(x125); + Formula x37=x38.and(x90); + Formula x22=x23.and(x37); + Expression x156=x53.join(x9); + Formula x155=x156.no(); + Formula x160=x6.one(); + Formula x159=x160.not(); + Formula x163=x8.eq(x6); + Formula x165=x53.eq(x6); + Formula x166=x9.no(); + Formula x164=x165.and(x166); + Formula x162=x163.and(x164); + Formula x167=x89.no(); + Formula x161=x162.and(x167); + Formula x158=x159.or(x161); + Variable x171=Variable.unary("correct_a"); + Decls x170=x171.oneOf(x6); + Variable x173=Variable.unary("correct_b"); + Decls x172=x173.oneOf(x6); + Variable x175=Variable.unary("correct_c"); + Decls x174=x175.oneOf(x6); + Decls x169=x170.and(x172).and(x174); + Expression x181=x171.union(x173); + Expression x180=x181.intersection(x175); + Formula x179=x180.no(); + Expression x183=x171.intersection(x173); + Formula x182=x183.no(); + Formula x178=x179.and(x182); + Formula x177=x178.not(); + Expression x189=x89.closure(); + Expression x188=x171.join(x189); + Formula x187=x173.in(x188); + Expression x192=x89.closure(); + Expression x191=x173.join(x192); + Formula x190=x175.in(x191); + Formula x186=x187.and(x190); + Formula x185=x186.not(); + Expression x195=x89.closure(); + Expression x194=x171.join(x195); + Formula x193=x175.in(x194); + Formula x184=x185.or(x193); + Formula x176=x177.or(x184); + Formula x168=x176.forAll(x169); + Formula x157=x158.and(x168); + Formula x154=x155.and(x157); + Expression x197=x9.transpose(); + Formula x196=x89.eq(x197); + Formula x153=x154.and(x196); + Formula x21=x22.and(x153); + Formula x20=x21.not(); + Formula x198=x0.eq(x0); + Formula x199=x1.eq(x1); + Formula x200=x2.eq(x2); + Formula x201=x3.eq(x3); + Formula x202=x4.eq(x4); + Formula x203=x5.eq(x5); + Formula x204=x6.eq(x6); + Formula x205=x7.eq(x7); + Formula x206=x8.eq(x8); + Formula x207=x9.eq(x9); + Formula x208=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x15, x19, x20, x198, x199, x200, x201, x202, x203, x204, x205, x206, x207, x208); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun1.java b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun1.java new file mode 100644 index 0000000..a421a24 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun1.java @@ -0,0 +1,164 @@ +package kodkod.examples.models.util.types; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ordering", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 4, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 32 +) + +public final class orderingRun1 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/elem"); + Relation x7 = Relation.unary("this/Ord"); + Relation x8 = Relation.unary("this/Ord.First"); + Relation x9 = Relation.nary("this/Ord.Next", 2); + Relation x10 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Ord$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Ord$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + bounds.boundExactly(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + bounds.boundExactly(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + bounds.boundExactly(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x7.product(x8); + Expression x13=x7.join(x14); + Formula x12=x13.in(x6); + Expression x17=x7.product(x9); + Expression x16=x7.join(x17); + Expression x18=x6.product(x6); + Formula x15=x16.in(x18); + Formula x19=x9.totalOrder(x6,x8,x10); + Formula x20=x0.eq(x0); + Formula x21=x1.eq(x1); + Formula x22=x2.eq(x2); + Formula x23=x3.eq(x3); + Formula x24=x4.eq(x4); + Formula x25=x5.eq(x5); + Formula x26=x6.eq(x6); + Formula x27=x7.eq(x7); + Formula x28=x8.eq(x8); + Formula x29=x9.eq(x9); + Formula x30=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x15, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun2.java b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun2.java new file mode 100644 index 0000000..e08f23c --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun2.java @@ -0,0 +1,170 @@ +package kodkod.examples.models.util.types; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ordering", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 4, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 32 +) + + +public final class orderingRun2 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/elem"); + Relation x7 = Relation.unary("this/Ord"); + Relation x8 = Relation.unary("this/Ord.First"); + Relation x9 = Relation.nary("this/Ord.Next", 2); + Relation x10 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Ord$0", + "elem$0" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("elem$0")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Ord$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("elem$0")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$0"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("elem$0")); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x7.product(x8); + Expression x13=x7.join(x14); + Formula x12=x13.in(x6); + Expression x17=x7.product(x9); + Expression x16=x7.join(x17); + Expression x18=x6.product(x6); + Formula x15=x16.in(x18); + Formula x19=x9.totalOrder(x6,x8,x10); + Formula x20=x0.eq(x0); + Formula x21=x1.eq(x1); + Formula x22=x2.eq(x2); + Formula x23=x3.eq(x3); + Formula x24=x4.eq(x4); + Formula x25=x5.eq(x5); + Formula x26=x6.eq(x6); + Formula x27=x7.eq(x7); + Formula x28=x8.eq(x8); + Formula x29=x9.eq(x9); + Formula x30=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x15, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun3.java b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun3.java new file mode 100644 index 0000000..e51dbbe --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun3.java @@ -0,0 +1,176 @@ +package kodkod.examples.models.util.types; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ordering", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 4, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 32 +) + + +public final class orderingRun3 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/elem"); + Relation x7 = Relation.unary("this/Ord"); + Relation x8 = Relation.unary("this/Ord.First"); + Relation x9 = Relation.nary("this/Ord.Next", 2); + Relation x10 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Ord$0", + "elem$0", "elem$1" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("elem$0")); + x6_upper.add(factory.tuple("elem$1")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Ord$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("elem$0")); + x8_upper.add(factory.tuple("elem$1")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$1"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("elem$0")); + x10_upper.add(factory.tuple("elem$1")); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x7.product(x8); + Expression x13=x7.join(x14); + Formula x12=x13.in(x6); + Expression x17=x7.product(x9); + Expression x16=x7.join(x17); + Expression x18=x6.product(x6); + Formula x15=x16.in(x18); + Formula x19=x9.totalOrder(x6,x8,x10); + Formula x20=x0.eq(x0); + Formula x21=x1.eq(x1); + Formula x22=x2.eq(x2); + Formula x23=x3.eq(x3); + Formula x24=x4.eq(x4); + Formula x25=x5.eq(x5); + Formula x26=x6.eq(x6); + Formula x27=x7.eq(x7); + Formula x28=x8.eq(x8); + Formula x29=x9.eq(x9); + Formula x30=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x15, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun4.java b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun4.java new file mode 100644 index 0000000..480abc9 --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun4.java @@ -0,0 +1,184 @@ +package kodkod.examples.models.util.types; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ordering", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 4, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 32 +) + + +public final class orderingRun4 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/elem"); + Relation x7 = Relation.unary("this/Ord"); + Relation x8 = Relation.unary("this/Ord.First"); + Relation x9 = Relation.nary("this/Ord.Next", 2); + Relation x10 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Ord$0", + "elem$0", "elem$1", "elem$2" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("elem$0")); + x6_upper.add(factory.tuple("elem$1")); + x6_upper.add(factory.tuple("elem$2")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Ord$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("elem$0")); + x8_upper.add(factory.tuple("elem$1")); + x8_upper.add(factory.tuple("elem$2")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$2"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("elem$0")); + x10_upper.add(factory.tuple("elem$1")); + x10_upper.add(factory.tuple("elem$2")); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x7.product(x8); + Expression x13=x7.join(x14); + Formula x12=x13.in(x6); + Expression x17=x7.product(x9); + Expression x16=x7.join(x17); + Expression x18=x6.product(x6); + Formula x15=x16.in(x18); + Formula x19=x9.totalOrder(x6,x8,x10); + Formula x20=x0.eq(x0); + Formula x21=x1.eq(x1); + Formula x22=x2.eq(x2); + Formula x23=x3.eq(x3); + Formula x24=x4.eq(x4); + Formula x25=x5.eq(x5); + Formula x26=x6.eq(x6); + Formula x27=x7.eq(x7); + Formula x28=x8.eq(x8); + Formula x29=x9.eq(x9); + Formula x30=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x15, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + //solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun5.java b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun5.java new file mode 100644 index 0000000..3d1df1d --- /dev/null +++ b/Source/kodkod/examples/kodkod/examples/models/util/types/orderingRun5.java @@ -0,0 +1,194 @@ +package kodkod.examples.models.util.types; + +import java.util.Arrays; +import java.util.List; +import kodkod.ast.*; +import kodkod.ast.operator.*; +import kodkod.examples.ExampleMetadata; +import kodkod.instance.*; +import kodkod.engine.*; +import kodkod.engine.satlab.SATFactory; +import kodkod.engine.config.Options; + +@ExampleMetadata( + Name = "ordering", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 2, + TernaryRelations =0, + NaryRelations = 0, + HierarchicalTypes =0, + NestedRelationalJoins = 4, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 32 +) + + +public final class orderingRun5 { + + public static void main(String[] args) throws Exception { + + Relation x0 = Relation.unary("Int/min"); + Relation x1 = Relation.unary("Int/zero"); + Relation x2 = Relation.unary("Int/max"); + Relation x3 = Relation.nary("Int/next", 2); + Relation x4 = Relation.unary("seq/Int"); + Relation x5 = Relation.unary("String"); + Relation x6 = Relation.unary("this/elem"); + Relation x7 = Relation.unary("this/Ord"); + Relation x8 = Relation.unary("this/Ord.First"); + Relation x9 = Relation.nary("this/Ord.Next", 2); + Relation x10 = Relation.unary(""); + + List atomlist = Arrays.asList( + "-1", "-2", "-3", "-4", "-5", + "-6", "-7", "-8", "0", "1", "2", + "3", "4", "5", "6", "7", "Ord$0", + "elem$0", "elem$1", "elem$2", "elem$3" + ); + + Universe universe = new Universe(atomlist); + TupleFactory factory = universe.factory(); + Bounds bounds = new Bounds(universe); + + TupleSet x0_upper = factory.noneOf(1); + x0_upper.add(factory.tuple("-8")); + bounds.boundExactly(x0, x0_upper); + + TupleSet x1_upper = factory.noneOf(1); + x1_upper.add(factory.tuple("0")); + bounds.boundExactly(x1, x1_upper); + + TupleSet x2_upper = factory.noneOf(1); + x2_upper.add(factory.tuple("7")); + bounds.boundExactly(x2, x2_upper); + + TupleSet x3_upper = factory.noneOf(2); + x3_upper.add(factory.tuple("-8").product(factory.tuple("-7"))); + x3_upper.add(factory.tuple("-7").product(factory.tuple("-6"))); + x3_upper.add(factory.tuple("-6").product(factory.tuple("-5"))); + x3_upper.add(factory.tuple("-5").product(factory.tuple("-4"))); + x3_upper.add(factory.tuple("-4").product(factory.tuple("-3"))); + x3_upper.add(factory.tuple("-3").product(factory.tuple("-2"))); + x3_upper.add(factory.tuple("-2").product(factory.tuple("-1"))); + x3_upper.add(factory.tuple("-1").product(factory.tuple("0"))); + x3_upper.add(factory.tuple("0").product(factory.tuple("1"))); + x3_upper.add(factory.tuple("1").product(factory.tuple("2"))); + x3_upper.add(factory.tuple("2").product(factory.tuple("3"))); + x3_upper.add(factory.tuple("3").product(factory.tuple("4"))); + x3_upper.add(factory.tuple("4").product(factory.tuple("5"))); + x3_upper.add(factory.tuple("5").product(factory.tuple("6"))); + x3_upper.add(factory.tuple("6").product(factory.tuple("7"))); + bounds.boundExactly(x3, x3_upper); + + TupleSet x4_upper = factory.noneOf(1); + x4_upper.add(factory.tuple("0")); + x4_upper.add(factory.tuple("1")); + x4_upper.add(factory.tuple("2")); + x4_upper.add(factory.tuple("3")); + bounds.boundExactly(x4, x4_upper); + + TupleSet x5_upper = factory.noneOf(1); + bounds.boundExactly(x5, x5_upper); + + TupleSet x6_upper = factory.noneOf(1); + x6_upper.add(factory.tuple("elem$0")); + x6_upper.add(factory.tuple("elem$1")); + x6_upper.add(factory.tuple("elem$2")); + x6_upper.add(factory.tuple("elem$3")); + bounds.boundExactly(x6, x6_upper); + + TupleSet x7_upper = factory.noneOf(1); + x7_upper.add(factory.tuple("Ord$0")); + bounds.boundExactly(x7, x7_upper); + + TupleSet x8_upper = factory.noneOf(1); + x8_upper.add(factory.tuple("elem$0")); + x8_upper.add(factory.tuple("elem$1")); + x8_upper.add(factory.tuple("elem$2")); + x8_upper.add(factory.tuple("elem$3")); + bounds.bound(x8, x8_upper); + + TupleSet x9_upper = factory.noneOf(2); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$0").product(factory.tuple("elem$3"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$1").product(factory.tuple("elem$3"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$2").product(factory.tuple("elem$3"))); + x9_upper.add(factory.tuple("elem$3").product(factory.tuple("elem$0"))); + x9_upper.add(factory.tuple("elem$3").product(factory.tuple("elem$1"))); + x9_upper.add(factory.tuple("elem$3").product(factory.tuple("elem$2"))); + x9_upper.add(factory.tuple("elem$3").product(factory.tuple("elem$3"))); + bounds.bound(x9, x9_upper); + + TupleSet x10_upper = factory.noneOf(1); + x10_upper.add(factory.tuple("elem$0")); + x10_upper.add(factory.tuple("elem$1")); + x10_upper.add(factory.tuple("elem$2")); + x10_upper.add(factory.tuple("elem$3")); + bounds.bound(x10, x10_upper); + + bounds.boundExactly(-8,factory.range(factory.tuple("-8"),factory.tuple("-8"))); + bounds.boundExactly(-7,factory.range(factory.tuple("-7"),factory.tuple("-7"))); + bounds.boundExactly(-6,factory.range(factory.tuple("-6"),factory.tuple("-6"))); + bounds.boundExactly(-5,factory.range(factory.tuple("-5"),factory.tuple("-5"))); + bounds.boundExactly(-4,factory.range(factory.tuple("-4"),factory.tuple("-4"))); + bounds.boundExactly(-3,factory.range(factory.tuple("-3"),factory.tuple("-3"))); + bounds.boundExactly(-2,factory.range(factory.tuple("-2"),factory.tuple("-2"))); + bounds.boundExactly(-1,factory.range(factory.tuple("-1"),factory.tuple("-1"))); + bounds.boundExactly(0,factory.range(factory.tuple("0"),factory.tuple("0"))); + bounds.boundExactly(1,factory.range(factory.tuple("1"),factory.tuple("1"))); + bounds.boundExactly(2,factory.range(factory.tuple("2"),factory.tuple("2"))); + bounds.boundExactly(3,factory.range(factory.tuple("3"),factory.tuple("3"))); + bounds.boundExactly(4,factory.range(factory.tuple("4"),factory.tuple("4"))); + bounds.boundExactly(5,factory.range(factory.tuple("5"),factory.tuple("5"))); + bounds.boundExactly(6,factory.range(factory.tuple("6"),factory.tuple("6"))); + bounds.boundExactly(7,factory.range(factory.tuple("7"),factory.tuple("7"))); + + Expression x14=x7.product(x8); + Expression x13=x7.join(x14); + Formula x12=x13.in(x6); + Expression x17=x7.product(x9); + Expression x16=x7.join(x17); + Expression x18=x6.product(x6); + Formula x15=x16.in(x18); + Formula x19=x9.totalOrder(x6,x8,x10); + Formula x20=x0.eq(x0); + Formula x21=x1.eq(x1); + Formula x22=x2.eq(x2); + Formula x23=x3.eq(x3); + Formula x24=x4.eq(x4); + Formula x25=x5.eq(x5); + Formula x26=x6.eq(x6); + Formula x27=x7.eq(x7); + Formula x28=x8.eq(x8); + Formula x29=x9.eq(x9); + Formula x30=x10.eq(x10); + Formula x11=Formula.compose(FormulaOperator.AND, x12, x15, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30); + + Solver solver = new Solver(); + solver.options().setSolver(SATFactory.MiniSat); + solver.options().setBitwidth(4); + // solver.options().setFlatten(false); + solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT); + solver.options().setSymmetryBreaking(20); + solver.options().setSkolemDepth(0); + System.out.println("Solving..."); + System.out.flush(); + Solution sol = solver.solve(x11,bounds); + System.out.println(sol.toString()); + }} \ No newline at end of file diff --git a/Source/kodkod/examples/kodkod/examples/tptp/ALG195.java b/Source/kodkod/examples/kodkod/examples/tptp/ALG195.java index 93bafe1..745bd2f 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/ALG195.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/ALG195.java @@ -10,6 +10,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.Tuple; import kodkod.instance.TupleFactory; @@ -19,6 +20,25 @@ * A KK encoding of ALG195+1.p from http://www.cs.miami.edu/~tptp/ * @author Emina Torlak */ +@ExampleMetadata( + Name = "ALG195", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 7, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 49, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 17, + OrderedRelations = 0, + Constraints = 38 +) public final class ALG195 extends Quasigroups7 { /** diff --git a/Source/kodkod/examples/kodkod/examples/tptp/ALG195_1.java b/Source/kodkod/examples/kodkod/examples/tptp/ALG195_1.java index ce5a12f..a072ed6 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/ALG195_1.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/ALG195_1.java @@ -14,6 +14,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.Instance; import kodkod.instance.Tuple; @@ -25,6 +26,25 @@ * @author emina * */ +@ExampleMetadata( + Name = "ALG195_1", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 7, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 80, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 20, + OrderedRelations = 0, + Constraints = 25 +) public final class ALG195_1 { final Relation[] e1, e2, h; final Relation op1, op2, s1, s2; diff --git a/Source/kodkod/examples/kodkod/examples/tptp/ALG212.java b/Source/kodkod/examples/kodkod/examples/tptp/ALG212.java index 4d90703..f3d4003 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/ALG212.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/ALG212.java @@ -14,6 +14,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.Universe; @@ -21,6 +22,25 @@ * A KK encoding of ALG212+1.p from http://www.cs.miami.edu/~tptp/ * @author Emina Torlak */ +@ExampleMetadata( + Name = "ALG212", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 0, + TernaryRelations = 0, + NaryRelations = 1, + HierarchicalTypes = 0, + NestedRelationalJoins = 16, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 5, + OrderedRelations = 0, + Constraints = 6 +) public final class ALG212 { private final Relation f; diff --git a/Source/kodkod/examples/kodkod/examples/tptp/COM008.java b/Source/kodkod/examples/kodkod/examples/tptp/COM008.java index 75dbd3b..3f3afd7 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/COM008.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/COM008.java @@ -15,6 +15,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -24,6 +25,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "COM008", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 3, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 1, + OrderedRelations = 0, + Constraints = 14 +) public final class COM008 { private final Relation equalish, rewrite, trr; private final Relation a, b, c, goal; diff --git a/Source/kodkod/examples/kodkod/examples/tptp/GEO091.java b/Source/kodkod/examples/kodkod/examples/tptp/GEO091.java index fde31ad..93426ab 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/GEO091.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/GEO091.java @@ -5,6 +5,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; /** @@ -12,6 +13,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "GEO091", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 4, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 4, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 39 +) public class GEO091 extends GEO158 { /** diff --git a/Source/kodkod/examples/kodkod/examples/tptp/GEO092.java b/Source/kodkod/examples/kodkod/examples/tptp/GEO092.java index b7f891c..af6f341 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/GEO092.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/GEO092.java @@ -9,6 +9,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; /** @@ -16,6 +17,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "GEO092", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 4, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 4, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 8, + OrderedRelations = 0, + Constraints = 39 +) public class GEO092 extends GEO158 { /** diff --git a/Source/kodkod/examples/kodkod/examples/tptp/GEO158.java b/Source/kodkod/examples/kodkod/examples/tptp/GEO158.java index ccf8a04..8ed4cdb 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/GEO158.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/GEO158.java @@ -10,6 +10,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -20,6 +21,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "GEO158", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 4, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 4, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 8, + OrderedRelations = 0, + Constraints = 37 +) public class GEO158 { final Relation partOf, incident, sum, endPoint, innerPoint, meet, closed, open; final Relation curve, point; @@ -27,7 +47,7 @@ public class GEO158 { * part_of : C -> C * incident_c : P -> C * sum : C -> C -> one C - * end_point : P -> C + * end_point : P -> C * inner_point : P -> C * meet : P -> C -> C * closed : C diff --git a/Source/kodkod/examples/kodkod/examples/tptp/GEO159.java b/Source/kodkod/examples/kodkod/examples/tptp/GEO159.java index c476cdc..70544e9 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/GEO159.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/GEO159.java @@ -10,6 +10,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleSet; @@ -17,6 +18,25 @@ * The GEO159+1 problem from http://www.cs.miami.edu/~tptp/ * @author Emina Torlak */ +@ExampleMetadata( + Name = "GEO159", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 4, + TernaryRelations = 2, + NaryRelations = 1, + HierarchicalTypes = 0, + NestedRelationalJoins = 4, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 39 +) public class GEO159 extends GEO158 { final Relation between; /* diff --git a/Source/kodkod/examples/kodkod/examples/tptp/GRA013_026.java b/Source/kodkod/examples/kodkod/examples/tptp/GRA013_026.java index 18a13b2..bc5d32c 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/GRA013_026.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/GRA013_026.java @@ -17,6 +17,7 @@ import kodkod.engine.fol2sat.HigherOrderDeclException; import kodkod.engine.fol2sat.UnboundLeafException; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -27,6 +28,25 @@ * A KK encoding of GRA019+1.p through GRA026+1.p from http://www.cs.miami.edu/~tptp/ * @author Emina Torlak */ +@ExampleMetadata( + Name = "GRA013_026", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 3, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 5 +) public final class GRA013_026 { private final Relation red, green, lessThan,goal,node; private final int graphSize, cliqueSize; diff --git a/Source/kodkod/examples/kodkod/examples/tptp/LAT258.java b/Source/kodkod/examples/kodkod/examples/tptp/LAT258.java index eb7a5d2..1584257 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/LAT258.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/LAT258.java @@ -17,6 +17,7 @@ import kodkod.engine.fol2sat.HigherOrderDeclException; import kodkod.engine.fol2sat.UnboundLeafException; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -26,6 +27,25 @@ * A KK encoding of LAT258+1.p from http://www.cs.miami.edu/~tptp/ * @author Emina Torlak */ +@ExampleMetadata( + Name = "LAT258", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 1, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 10, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 21 +) public final class LAT258 { private final Relation goal, p, t, u, v, w, x, y, z; private final Relation lessThan, meet, join; diff --git a/Source/kodkod/examples/kodkod/examples/tptp/MED007.java b/Source/kodkod/examples/kodkod/examples/tptp/MED007.java index 1a9bbd3..6d28c4f 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/MED007.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/MED007.java @@ -8,12 +8,32 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; /** * A KK encoding of MED007+1.p from http://www.cs.miami.edu/~tptp/ * @author Emina Torlak */ +@ExampleMetadata( + Name = "MED007", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 1, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 10, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 45 +) public final class MED007 extends MED001 { /** * Constructs a new instance of MED007. diff --git a/Source/kodkod/examples/kodkod/examples/tptp/MED009.java b/Source/kodkod/examples/kodkod/examples/tptp/MED009.java index aa3be16..492bcc6 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/MED009.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/MED009.java @@ -9,12 +9,32 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; /** * A KK encoding of MED009+1.p from http://www.cs.miami.edu/~tptp/ * @author Emina Torlak */ +@ExampleMetadata( + Name = "MED009", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 1, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 10, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 0, + OrderedRelations = 0, + Constraints = 45 +) public final class MED009 extends MED001 { /** * Constructs a new instance of MED007. diff --git a/Source/kodkod/examples/kodkod/examples/tptp/MGT066.java b/Source/kodkod/examples/kodkod/examples/tptp/MGT066.java index 999a0b7..30466d2 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/MGT066.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/MGT066.java @@ -10,6 +10,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -19,6 +20,25 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "MGT066", + Note = "", + IsCheck = false, + PartialModel = false, + BinaryRelations = 4, + TernaryRelations = 0, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 0, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 0, + Constraints = 45 +) public final class MGT066 { private Relation lt, leq, gt, geq; diff --git a/Source/kodkod/examples/kodkod/examples/tptp/NUM374.java b/Source/kodkod/examples/kodkod/examples/tptp/NUM374.java index f71e132..cebe460 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/NUM374.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/NUM374.java @@ -15,6 +15,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -24,6 +25,25 @@ * A KK encoding of NUM374+1.p from http://www.cs.miami.edu/~tptp/ * @author Emina Torlak */ +@ExampleMetadata( + Name = "NUM374", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 0, + TernaryRelations = 3, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 4, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 15, + OrderedRelations = 0, + Constraints = 23 +) public final class NUM374 { private final Relation sum, product, exponent, n1; diff --git a/Source/kodkod/examples/kodkod/examples/tptp/NUM378.java b/Source/kodkod/examples/kodkod/examples/tptp/NUM378.java index 5802bf3..0683280 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/NUM378.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/NUM378.java @@ -16,6 +16,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.TupleSet; @@ -26,6 +27,26 @@ * * @author Emina Torlak */ +@ExampleMetadata( + Name = "NUM378", + Note = "", + IsCheck = true, + PartialModel = true, + BinaryRelations = 1, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 1, + TransitiveClosure = 0, + NestedQuantifiers = 1, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 7, + OrderedRelations = 0, + Constraints = 106 +) + public final class NUM378 { private final Relation succ, sum; diff --git a/Source/kodkod/examples/kodkod/examples/tptp/SET943.java b/Source/kodkod/examples/kodkod/examples/tptp/SET943.java index 4b00444..a9c1f28 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/SET943.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/SET943.java @@ -15,6 +15,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -23,6 +24,25 @@ * A KK encoding of SET943+1.p from http://www.cs.miami.edu/~tptp/ * @author Emina Torlak */ +@ExampleMetadata( + Name = "SET943", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 3, + TernaryRelations = 1, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 2, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 8, + OrderedRelations = 0, + Constraints = 23 +) public final class SET943 { private final Relation empty; diff --git a/Source/kodkod/examples/kodkod/examples/tptp/SET948.java b/Source/kodkod/examples/kodkod/examples/tptp/SET948.java index dbb085c..388aa9b 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/SET948.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/SET948.java @@ -15,6 +15,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -23,6 +24,25 @@ * A KK encoding of SET948+1.p from http://www.cs.miami.edu/~tptp/ * @author Emina Torlak */ +@ExampleMetadata( + Name = "SET948", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 4, + TernaryRelations = 2, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 3, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 12, + OrderedRelations = 0, + Constraints = 30 +) public final class SET948 { private final Relation empty; diff --git a/Source/kodkod/examples/kodkod/examples/tptp/SET967.java b/Source/kodkod/examples/kodkod/examples/tptp/SET967.java index 8263766..9bc716d 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/SET967.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/SET967.java @@ -15,6 +15,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -23,6 +24,25 @@ * A KK encoding of SET967+1.p from http://www.cs.miami.edu/~tptp/ * @author Emina Torlak */ +@ExampleMetadata( + Name = "SET967", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 5, + TernaryRelations = 5, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 5, + TransitiveClosure = 0, + NestedQuantifiers = 0, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 9, + OrderedRelations = 0, + Constraints = 40 +) public final class SET967 { private final Relation empty; diff --git a/Source/kodkod/examples/kodkod/examples/tptp/TOP020.java b/Source/kodkod/examples/kodkod/examples/tptp/TOP020.java index f524dae..6a26596 100644 --- a/Source/kodkod/examples/kodkod/examples/tptp/TOP020.java +++ b/Source/kodkod/examples/kodkod/examples/tptp/TOP020.java @@ -16,6 +16,7 @@ import kodkod.engine.Solution; import kodkod.engine.Solver; import kodkod.engine.satlab.SATFactory; +import kodkod.examples.ExampleMetadata; import kodkod.instance.Bounds; import kodkod.instance.TupleFactory; import kodkod.instance.Universe; @@ -24,6 +25,25 @@ * A KK encoding of TOP020+1.p from http://www.cs.miami.edu/~tptp/ * @author Emina Torlak */ +@ExampleMetadata( + Name = "TOP020", + Note = "", + IsCheck = true, + PartialModel = false, + BinaryRelations = 6, + TernaryRelations =3, + NaryRelations = 0, + HierarchicalTypes = 0, + NestedRelationalJoins = 9, + TransitiveClosure = 0, + NestedQuantifiers = 4, + SetCardinality = 0, + Additions = 0, + Subtractions = 0, + Comparison = 4, + OrderedRelations = 1, + Constraints =27 +) public final class TOP020 { private final Relation hausdorff; private final Relation member, open, disjoint, closed; diff --git a/Source/kodkod/kodkod.iml b/Source/kodkod/kodkod.iml index db74403..2ad56ce 100644 --- a/Source/kodkod/kodkod.iml +++ b/Source/kodkod/kodkod.iml @@ -10,5 +10,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Source/kodkod/src/kodkod/engine/Solver.java b/Source/kodkod/src/kodkod/engine/Solver.java index 2223073..322d701 100644 --- a/Source/kodkod/src/kodkod/engine/Solver.java +++ b/Source/kodkod/src/kodkod/engine/Solver.java @@ -1,4 +1,4 @@ -/* +/* * Kodkod -- Copyright (c) 2005-present, Emina Torlak * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -31,7 +31,7 @@ import java.util.stream.Collectors; -/** +/** * A computational engine for solving relational satisfiability problems. * Such a problem is described by a {@link kodkod.ast.Formula formula} in * first order relational logic; finite {@link kodkod.instance.Bounds bounds} on @@ -166,8 +166,33 @@ public Solution solve(Formula formula, Bounds bounds) throws HigherOrderDeclExce final long startTransl = System.currentTimeMillis(); try { - if (options.solver().instance() instanceof Z3Solver) { + if (options.solver().instance() instanceof AssertionChecker) { + if (!bounds.lowerBounds().equals(bounds.upperBounds())) + throw new AbortedException("Bounds must be exact while using Assertion Checker."); + AssertionChecker assertionChecker = (AssertionChecker) options.solver().instance(); + final long startSolve = System.currentTimeMillis(); + final boolean isSat = assertionChecker.solve(formula, bounds); + final long endSolve = System.currentTimeMillis(); + + final Statistics stats = new Statistics(0, 0, 0 + , 0 + , endSolve - startSolve); + + if (isSat) { + Instance instance = new Instance(bounds.universe()); + bounds.lowerBounds().forEach(instance::add); + return Solution.satisfiable(stats, instance); + } + else { + return Solution.unsatisfiable(stats, + makeProof(assertionChecker.getUnsatFormulaSet(), assertionChecker.getUnsatTupleSet())); + } + } + else if (options.solver().instance() instanceof Z3Solver) { Z3Solver z3Solver = (Z3Solver) options.solver().instance(); + + z3Solver.setBitSize(options.bitwidth()); + final long startSolve = System.currentTimeMillis(); final boolean isSat = z3Solver.solve(formula, bounds); final long endSolve = System.currentTimeMillis(); @@ -234,6 +259,9 @@ public Solution solve(Formula formula, Bounds bounds) throws HigherOrderDeclExce public Iterator solveAll(final Formula formula, final Bounds bounds) throws HigherOrderDeclException, UnboundLeafException, AbortedException { + if (options.solver().instance() instanceof AssertionChecker) + throw new AbortedException("Use 'solve' method with AssertionChecker."); + if (options.solver().instance() instanceof Z3Solver) { Z3Solver z3Solver = (Z3Solver) options.solver().instance(); Iterator instanceIterator = z3Solver.solveAll(formula, bounds); @@ -368,7 +396,7 @@ private static final class SolutionIterator implements Iterator { * @see Iterator#next() */ public Solution next() { - if (!hasNext()) throw new NoSuchElementException(); + if (!hasNext()) throw new NoSuchElementException(); try { return translation.trivial() ? nextTrivialSolution() : nextNonTrivialSolution(); } catch (SATAbortedException sae) { @@ -379,7 +407,7 @@ public Solution next() { /** @throws UnsupportedOperationException */ public void remove() { throw new UnsupportedOperationException(); } - + /** * Solves {@code translation.cnf} and adds the negation of the * found model to the set of clauses. The latter has the @@ -393,20 +421,20 @@ public Solution next() { */ private Solution nextNonTrivialSolution() { final Translation.Whole transl = translation; - + final SATSolver cnf = transl.cnf(); final int primaryVars = transl.numPrimaryVariables(); - + transl.options().reporter().solvingCNF(primaryVars, cnf.numberOfVariables(), cnf.numberOfClauses()); - + final long startSolve = System.currentTimeMillis(); final boolean isSat = cnf.solve(); final long endSolve = System.currentTimeMillis(); final Statistics stats = new Statistics(transl, translTime, endSolve - startSolve); final Solution sol; - - if (isSat) { + + if (isSat) { // extract the current solution; can't use the sat(..) method because it frees the sat solver sol = Solution.satisfiable(stats, transl.interpret()); // add the negation of the current model to the solver @@ -421,7 +449,7 @@ private Solution nextNonTrivialSolution() { } return sol; } - + /** * Returns the trivial solution corresponding to the trivial translation stored in {@code this.translation}, * and if {@code this.translation.cnf.solve()} is true, sets {@code this.translation} to a new translation @@ -434,45 +462,45 @@ private Solution nextNonTrivialSolution() { */ private Solution nextTrivialSolution() { final Translation.Whole transl = this.translation; - + final Solution sol = trivial(transl, translTime); // this also frees up solver resources, if unsat - + if (sol.instance()==null) { translation = null; // unsat, no more solutions } else { trivial++; - + final Bounds bounds = transl.bounds(); final Bounds newBounds = bounds.clone(); final List changes = new ArrayList(); for(Relation r : bounds.relations()) { final TupleSet lower = bounds.lowerBound(r); - + if (lower != bounds.upperBound(r)) { // r may change - if (lower.isEmpty()) { + if (lower.isEmpty()) { changes.add(r.some()); } else { final Relation rmodel = Relation.nary(r.name()+"_"+trivial, r.arity()); - newBounds.boundExactly(rmodel, lower); + newBounds.boundExactly(rmodel, lower); changes.add(r.eq(rmodel).not()); } } } - + // nothing can change => there can be no more solutions (besides the current trivial one). // note that transl.formula simplifies to the constant true with respect to // transl.bounds, and that newBounds is a superset of transl.bounds. // as a result, finding the next instance, if any, for transl.formula.and(Formula.or(changes)) // with respect to newBounds is equivalent to finding the next instance of Formula.or(changes) alone. final Formula formula = changes.isEmpty() ? Formula.FALSE : Formula.or(changes); - + final long startTransl = System.currentTimeMillis(); translation = Translator.translate(formula, newBounds, transl.options()); translTime += System.currentTimeMillis() - startTransl; - } + } return sol; } - + } } diff --git a/Source/kodkod/src/kodkod/engine/fol2sat/HigherOrderDeclException.java b/Source/kodkod/src/kodkod/engine/fol2sat/HigherOrderDeclException.java index 70de5a5..00f78c1 100644 --- a/Source/kodkod/src/kodkod/engine/fol2sat/HigherOrderDeclException.java +++ b/Source/kodkod/src/kodkod/engine/fol2sat/HigherOrderDeclException.java @@ -40,7 +40,7 @@ public final class HigherOrderDeclException extends RuntimeException { * @requires decl.multiplicity != ONE * @ensures this.decl' = decl */ - HigherOrderDeclException(Decl decl) { + public HigherOrderDeclException(Decl decl) { super("Higher order declaration: " + decl); assert decl.multiplicity() != Multiplicity.ONE; this.decl = decl; diff --git a/Source/kodkod/src/kodkod/engine/satlab/AssertionChecker.java b/Source/kodkod/src/kodkod/engine/satlab/AssertionChecker.java new file mode 100644 index 0000000..0b79699 --- /dev/null +++ b/Source/kodkod/src/kodkod/engine/satlab/AssertionChecker.java @@ -0,0 +1,507 @@ +package kodkod.engine.satlab; + +import com.microsoft.z3.Expr; +import kodkod.ast.*; +import kodkod.ast.operator.ExprOperator; +import kodkod.ast.operator.FormulaOperator; +import kodkod.instance.Bounds; +import kodkod.instance.Tuple; +import kodkod.instance.TupleSet; + +import java.util.*; + +public class AssertionChecker implements SATSolver { + + private Bounds bounds; + private Set objects; + private Map variableObjectMap; + + private Set unsatFormulaSet; + + public Set> getUnsatTupleSet() { + return Collections.emptySet(); + } + + public Set getUnsatFormulaSet() { + return unsatFormulaSet; + } + + public boolean solve(Formula formula, Bounds bounds) { + this.bounds = bounds; + variableObjectMap = new HashMap<>(); + this.objects = new HashSet<>(); + this.unsatFormulaSet = new HashSet<>(); + bounds.universe().forEach(o -> objects.add(o)); + + return separateFormula(formula).stream().allMatch(f -> { + boolean sat = visit(f, new Object[] {}); + if (!sat) + unsatFormulaSet.add(f); + return sat; + }); + } + + private Set separateFormula(Formula formula) { + if (formula instanceof BinaryFormula && ((BinaryFormula) formula).op().equals(FormulaOperator.AND)) { + Set formulaSet = new HashSet<>(); + formulaSet.addAll(separateFormula(((BinaryFormula) formula).left())); + formulaSet.addAll(separateFormula(((BinaryFormula) formula).right())); + return formulaSet; + } + if (formula instanceof NaryFormula && ((NaryFormula) formula).op().equals(FormulaOperator.AND)) { + Set formulaSet = new HashSet<>(); + ((NaryFormula) formula).iterator().forEachRemaining(f -> { + formulaSet.addAll(separateFormula(f)); + }); + return formulaSet; + } + return Collections.singleton(formula); + } + + private Set getCombinations(int arity) { + Set set = new HashSet<>(); + int size = bounds.universe().size(); + for (int i = 0; i < Math.pow(size, arity); i++) { + Object[] objects = new Object[arity]; + for (int j = 0; j < arity; j++) { + objects[j] = bounds.universe().atom((int) ((i / Math.pow(size, j)) % size)); + } + set.add(objects); + } + return set; + } + + private Set getBound(Relation relation) { + Set bound = bounds.lowerBound(relation); + return bound == null ? bounds.universe().factory().noneOf(relation.arity()) : bound; + } + + private boolean visit(Node node, Object[] obj) { + if (node instanceof Relation) { + return getBound((Relation) node).contains(bounds.universe().factory().tuple(obj)); + } + else if (node instanceof ConstantExpression) { + if (node.equals(Relation.IDEN)) { + return obj[0].equals(obj[1]); + } + else if (node.equals(Relation.UNIV)) { + return obj.length == 1; + } + else if (node.equals(Relation.NONE)) { + return obj.length == 0; + } + } + else if (node instanceof Variable) { + return variableObjectMap.get(node).equals(obj[0]); + } + else if (node instanceof UnaryExpression) { + UnaryExpression unaryExpression = (UnaryExpression) node; + switch (unaryExpression.op()) { + case TRANSPOSE: + return visit(unaryExpression.expression(), new Object[] {obj[1], obj[0]}); + case REFLEXIVE_CLOSURE: + Expression ex = unaryExpression.expression(); + while (ex instanceof BinaryExpression && ((BinaryExpression) ex).op().equals(ExprOperator.JOIN)) { + ex = ((BinaryExpression) ex).right(); + } + + int loopCount = bounds.universe().size() - 1; + + if (ex.equals(Relation.NONE)) { + loopCount = 0; + } + else if (ex instanceof Relation) { + loopCount = (int) (getBound((Relation) ex).stream() + .map(t -> t.atom(t.arity() - 1)) + .distinct().count()) - 1; + } + + Expression unionExpr = Relation.IDEN; + for (int i = 0; i < loopCount - 1; i++) { + unionExpr = Relation.IDEN.union(unaryExpression.expression().join(unionExpr)); + } + return visit(unionExpr, obj); + case CLOSURE: + ex = unaryExpression.expression(); + while (ex instanceof BinaryExpression && ((BinaryExpression) ex).op().equals(ExprOperator.JOIN)) { + ex = ((BinaryExpression) ex).right(); + } + + loopCount = bounds.universe().size() - 1; + + if (ex.equals(Relation.NONE)) { + loopCount = 0; + } + else if (ex instanceof Relation) { + loopCount = (int) (getBound((Relation) ex).stream() + .map(t -> t.atom(t.arity() - 1)) + .distinct().count()) - 1; + } + unionExpr = Relation.IDEN; + for (int i = 0; i < loopCount - 1; i++) { + unionExpr = Relation.IDEN.union(unaryExpression.expression().join(unionExpr)); + } + + if (unionExpr instanceof BinaryExpression && ((BinaryExpression) unionExpr).op().equals(ExprOperator.UNION)) + return visit(((BinaryExpression) unionExpr).right(), obj); + else { + return false; + } + } + } + else if (node instanceof BinaryExpression) { + BinaryExpression binaryExpression = (BinaryExpression) node; + switch (binaryExpression.op()) { + case JOIN: + Expression leftExpression = binaryExpression.left(); + Expression rightExpression = binaryExpression.right(); + + Object[] leftExprs = new Object[leftExpression.arity()]; + System.arraycopy(obj, 0, leftExprs, 0, leftExprs.length - 1); + + Object[] rightExprs = new Object[rightExpression.arity()]; + System.arraycopy(obj, obj.length - rightExprs.length + 1, rightExprs, 1, rightExprs.length - 1); + + return objects.stream().anyMatch(o -> { + leftExprs[leftExprs.length - 1] = o; + rightExprs[0] = o; + return visit(leftExpression, leftExprs) && visit(rightExpression, rightExprs); + }); + case UNION: + return visit(binaryExpression.left(), obj) || visit(binaryExpression.right(), obj); + case INTERSECTION: + return visit(binaryExpression.left(), obj) && visit(binaryExpression.right(), obj); + case PRODUCT: + leftExpression = binaryExpression.left(); + rightExpression = binaryExpression.right(); + + leftExprs = new Expr[leftExpression.arity()]; + System.arraycopy(obj, 0, leftExprs, 0, leftExprs.length); + + rightExprs = new Expr[rightExpression.arity()]; + System.arraycopy(obj, leftExpression.arity(), rightExprs, 0, rightExprs.length); + + return visit(leftExpression, leftExprs) && visit(rightExpression, rightExprs); + case DIFFERENCE: + return visit(binaryExpression.left(), obj) && !visit(binaryExpression.right(), obj); + case OVERRIDE: + // TODO: Implement this. + break; + } + } + else if (node instanceof NaryExpression) { + NaryExpression naryExpression = (NaryExpression) node; + + switch (naryExpression.op()) { + case UNION: + for (int i = 0; i < naryExpression.size(); i++) { + if (visit(naryExpression.child(i), obj)) + return true; + } + return false; + case PRODUCT: + for (int i = 0; i < naryExpression.size(); i++) { + int start = 0; + + for (int j = 0; j < i; j++) + start += naryExpression.child(i - 1).arity(); + + Expression expression = naryExpression.child(i); + Object[] exprs1 = new Object[expression.arity()]; + + System.arraycopy(obj, start, exprs1, 0, exprs1.length); + + if (!visit(expression, exprs1)) + return false; + } + return true; + case INTERSECTION: + for (int i = 0; i < naryExpression.size(); i++) { + if (!visit(naryExpression.child(i), obj)) + return false; + } + return true; + case OVERRIDE: + // TODO: Implement this. + break; + } + } + else if (node instanceof NotFormula) { + NotFormula notFormula = (NotFormula) node; + return !visit(notFormula.formula(), obj); + } + else if (node instanceof ComparisonFormula) { + ComparisonFormula comparisonFormula = (ComparisonFormula) node; + switch (comparisonFormula.op()) { + case EQUALS: + return getCombinations(comparisonFormula.left().arity()).stream() + .allMatch(o -> visit(comparisonFormula.left(), o) == visit(comparisonFormula.right(), o)); + case SUBSET: + return getCombinations(comparisonFormula.left().arity()).stream() + .allMatch(o -> !visit(comparisonFormula.left(), o) || visit(comparisonFormula.right(), o)); + } + } + else if (node instanceof BinaryFormula) { + BinaryFormula binaryFormula = (BinaryFormula) node; + switch (binaryFormula.op()) { + case IMPLIES: + return !visit(binaryFormula.left(), obj) || visit(binaryFormula.right(), obj); + case IFF: + return visit(binaryFormula.left(), obj) == visit(binaryFormula.right(), obj); + case OR: + return visit(binaryFormula.left(), obj) || visit(binaryFormula.right(), obj); + case AND: + return visit(binaryFormula.left(), obj) && visit(binaryFormula.right(), obj); + } + } + else if (node instanceof NaryFormula) { + NaryFormula naryFormula = (NaryFormula) node; + switch (naryFormula.op()) { + case AND: + for (int i = 0; i < naryFormula.size(); i++) { + if (!visit(naryFormula.child(i), obj)) + return false; + } + return true; + case OR: + for (int i = 0; i < naryFormula.size(); i++) { + if (visit(naryFormula.child(i), obj)) + return true; + } + return false; + } + } + else if (node instanceof MultiplicityFormula) { + MultiplicityFormula multiplicityFormula = (MultiplicityFormula) node; + switch (multiplicityFormula.multiplicity()) { + case SOME: + return getCombinations(multiplicityFormula.expression().arity()).stream() + .anyMatch(o -> visit(multiplicityFormula.expression(), o)); + case NO: + return getCombinations(multiplicityFormula.expression().arity()).stream() + .noneMatch(o -> visit(multiplicityFormula.expression(), o)); + case ONE: + int count = 0; + for (Object[] o : getCombinations(multiplicityFormula.expression().arity())) { + if (visit(multiplicityFormula.expression(), o)) + count++; + if (count > 1) + return false; + } + return count == 1; + case LONE: + count = 0; + for (Object[] o : getCombinations(multiplicityFormula.expression().arity())) { + if (visit(multiplicityFormula.expression(), o)) + count++; + if (count > 1) + return false; + } + return true; + } + } + else if (node instanceof QuantifiedFormula) { + QuantifiedFormula quantifiedFormula = (QuantifiedFormula) node; + int exprsSize = quantifiedFormula.decls().size(); + + switch (quantifiedFormula.quantifier()) { + case ALL: + return getCombinations(exprsSize).stream().allMatch(o -> { + for (int i = 0; i < o.length; i++) { + Decl decl = quantifiedFormula.decls().get(i); + variableObjectMap.put(decl.variable(), o[i]); + if (!visit(decl.variable().in(decl.expression()), obj)) + return true; + } + return visit(quantifiedFormula.formula(), obj); + }); + case SOME: + return getCombinations(exprsSize).stream().anyMatch(o -> { + for (int i = 0; i < o.length; i++) { + Decl decl = quantifiedFormula.decls().get(i); + variableObjectMap.put(decl.variable(), o[i]); + if (!visit(decl.variable().in(decl.expression()), obj)) + return true; + } + return visit(quantifiedFormula.formula(), obj); + }); + } + } + if (node instanceof ConstantFormula) { + ConstantFormula constantFormula = (ConstantFormula) node; + return constantFormula.booleanValue(); + } + else if (node instanceof IntComparisonFormula) { + IntComparisonFormula intComparisonFormula = (IntComparisonFormula) node; + switch (intComparisonFormula.op()) { + case EQ: + return visitIntExpression(intComparisonFormula.left(), obj) == + visitIntExpression(intComparisonFormula.right(), obj); + case GT: + return visitIntExpression(intComparisonFormula.left(), obj) > + visitIntExpression(intComparisonFormula.right(), obj); + case LT: + return visitIntExpression(intComparisonFormula.left(), obj) < + visitIntExpression(intComparisonFormula.right(), obj); + case GTE: + return visitIntExpression(intComparisonFormula.left(), obj) >= + visitIntExpression(intComparisonFormula.right(), obj); + case LTE: + return visitIntExpression(intComparisonFormula.left(), obj) <= + visitIntExpression(intComparisonFormula.right(), obj); + } + } + else if (node instanceof IfExpression) { + IfExpression ifExpression = (IfExpression) node; + return visit(ifExpression.condition(), obj) + ? visit(ifExpression.thenExpr(), obj) + : visit(ifExpression.elseExpr(), obj); + } + else if (node instanceof RelationPredicate) { + RelationPredicate relationPredicate = (RelationPredicate) node; + return visit(relationPredicate.toConstraints(), obj); + } + + return true; + } + + private int visitIntExpression(Node node, Object[] obj) { + if (node instanceof kodkod.ast.IntConstant) { + IntConstant intConstant = (IntConstant) node; + return intConstant.value(); + } + else if (node instanceof ExprToIntCast) { + ExprToIntCast exprToIntCast = (ExprToIntCast) node; + switch (exprToIntCast.op()) { + case CARDINALITY: + int card = 0; + // TODO: Formula of cardinality + return card; + case SUM: + int sum = 0; + // TODO: Formula of sum + return sum; + } + } + else if (node instanceof kodkod.ast.SumExpression) { + SumExpression sumExpression = (SumExpression) node; + int sum = 0; + // TODO: Formula of sum + return sum; + } + else if (node instanceof IfIntExpression) { + IfIntExpression ifExpression = (IfIntExpression) node; + return visit(ifExpression.condition(), obj) + ? visitIntExpression(ifExpression.thenExpr(), obj) + : visitIntExpression(ifExpression.elseExpr(), obj); + } + else if (node instanceof UnaryIntExpression) { + UnaryIntExpression unaryIntExpression = (UnaryIntExpression) node; + int expr = visitIntExpression(unaryIntExpression.intExpr(), obj); + switch (unaryIntExpression.op()) { + case SGN: + return expr == 0 ? 0 : (expr > 0 ? 1 : -1); + case NOT: + return ~expr; + case NEG: + return -expr; + case ABS: + return Math.abs(expr); + } + } + else if (node instanceof BinaryIntExpression) { + BinaryIntExpression binaryIntExpression = (BinaryIntExpression) node; + int left = visitIntExpression(binaryIntExpression.left(), obj); + int right = visitIntExpression(binaryIntExpression.right(), obj); + switch (binaryIntExpression.op()) { + case AND: + return left & right; + case OR: + return left | right; + case SHA: + return left >> right; + case SHL: + return left << right; + case SHR: + return left >>> right; + case XOR: + return left ^ right; + case PLUS: + return left + right; + case MINUS: + return left - right; + case DIVIDE: + return left / right; + case MODULO: + return left % right; + case MULTIPLY: + return left * right; + } + } + else if (node instanceof kodkod.ast.NaryIntExpression) { + NaryIntExpression naryIntExpression = (NaryIntExpression) node; + Iterator iterator = naryIntExpression.iterator(); + if (iterator.hasNext()) { + int expr = visitIntExpression(iterator.next(), obj); + switch (naryIntExpression.op()) { + case MULTIPLY: + while (iterator.hasNext()) { + expr *= visitIntExpression(iterator.next(), obj); + } + return expr; + case PLUS: + while (iterator.hasNext()) { + expr += visitIntExpression(iterator.next(), obj); + } + return expr; + case AND: + while (iterator.hasNext()) { + expr &= visitIntExpression(iterator.next(), obj); + } + return expr; + case OR: + while (iterator.hasNext()) { + expr |= visitIntExpression(iterator.next(), obj); + } + return expr; + } + } + } + return 0; + } + + @Override + public int numberOfVariables() { + return 0; + } + + @Override + public int numberOfClauses() { + return 0; + } + + @Override + public void addVariables(int numVars) { + + } + + @Override + public boolean addClause(int[] lits) { + return false; + } + + @Override + public boolean solve() throws SATAbortedException { + return false; + } + + @Override + public boolean valueOf(int variable) { + return false; + } + + @Override + public void free() { + + } +} diff --git a/Source/kodkod/src/kodkod/engine/satlab/SATFactory.java b/Source/kodkod/src/kodkod/engine/satlab/SATFactory.java index 43bcfcc..a9f04ec 100644 --- a/Source/kodkod/src/kodkod/engine/satlab/SATFactory.java +++ b/Source/kodkod/src/kodkod/engine/satlab/SATFactory.java @@ -100,7 +100,7 @@ public SATSolver instance() { }; public static final SATFactory Z3Solver = new SATFactory() { - private Z3Solver solver; + private kodkod.engine.satlab.Z3Solver solver; public SATSolver instance() { solver = new Z3Solver(); return solver; @@ -109,12 +109,10 @@ public SATSolver instance() { public String toString() { return solver.toString(); } }; - public static final SATFactory Z3CNFSolver = new SATFactory() { - public SATSolver instance() { - return new Z3CNFSolver(); - } - public boolean prover() { return false; } - public String toString() { return "Z3 CNF"; } + public static final SATFactory AssertionChecker = new SATFactory() { + public SATSolver instance() { return new AssertionChecker(); } + public boolean prover() { return true; } + public String toString() { return "Assertion Checker"; } }; /** diff --git a/Source/kodkod/src/kodkod/engine/satlab/Z3CNFSolver.java b/Source/kodkod/src/kodkod/engine/satlab/Z3CNFSolver.java deleted file mode 100644 index 4fcdff5..0000000 --- a/Source/kodkod/src/kodkod/engine/satlab/Z3CNFSolver.java +++ /dev/null @@ -1,121 +0,0 @@ -package kodkod.engine.satlab; - -import com.microsoft.z3.*; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class Z3CNFSolver implements SATSolver { - - private Context ctx; - private Solver solver; - - private int variables = 0; - - private List clauses; - private Map variableExprMap; - - private FuncDecl isTrue; - - private Status status = Status.UNKNOWN; - - public Z3CNFSolver() { - //Global.setParameter("model.compact", "true"); - //Global.setParameter("smt.mbqi", "true"); - //Global.setParameter("smt.pull-nested-quantifiers", "true"); - //Global.setParameter("smt.mbqi.trace", "true"); - - HashMap cfg = new HashMap<>(); - //cfg.put("proof", "true"); - cfg.put("model", "true"); - - ctx = new Context(cfg); - solver = ctx.mkSolver(); - - clauses = new ArrayList<>(); - variableExprMap = new HashMap<>(); - } - - @Override - public int numberOfVariables() { - return variables; - } - - @Override - public int numberOfClauses() { - return clauses.size(); - } - - @Override - public void addVariables(int numVars) { - variables += numVars; - } - - @Override - public boolean addClause(int[] lits) { - clauses.add(lits); - return true; - } - - @Override - public boolean solve() throws SATAbortedException { - - Map varStringMap = new HashMap<>(); - for (int i = 0; i < variables; i++) { - varStringMap.put(i + 1, "" + (i + 1)); - } - - EnumSort UNIV = ctx.mkEnumSort("univ", varStringMap.values().toArray(new String[varStringMap.values().size()])); - - for (Expr expr : UNIV.getConsts()) { - variableExprMap.put(Integer.parseInt(expr.toString().substring(1, expr.toString().length() - 1)), expr); - } - - isTrue = ctx.mkFuncDecl("univ", new Sort[]{UNIV}, ctx.mkBoolSort()); - - clauses.forEach(clause -> { - BoolExpr[] exprs = new BoolExpr[clause.length]; - for (int i = 0; i < exprs.length; i++) { - exprs[i] = (BoolExpr) ctx.mkApp(isTrue, variableExprMap.get(Math.abs(clause[i]))); - if (clause[i] < 0) { - exprs[i] = ctx.mkNot(exprs[i]); - } - } - solver.add(ctx.mkOr(exprs)); - }); - - status = solver.check(); - return status.equals(Status.SATISFIABLE); - } - - @Override - public boolean valueOf(int variable) { - if (!status.equals(Status.SATISFIABLE)) - return false; - return solver.getModel().eval(isTrue.apply(variableExprMap.get(variable)), true).equals(ctx.mkTrue()); - } - - @Override - public void free() { - ctx = null; - solver = null; - clauses.clear(); - variableExprMap.clear(); - isTrue = null; - } - - public static void main(String[] args) { - Z3CNFSolver solver = new Z3CNFSolver(); - solver.addVariables(2); - solver.addClause(new int[] {1, -2}); - solver.addClause(new int[] {-1, 2}); - solver.addClause(new int[] {1}); - solver.solve(); - for (int i = 0; i < solver.numberOfVariables(); i++) { - System.out.println((i + 1) + ": " + solver.valueOf(i + 1)); - } - solver.free(); - } -} diff --git a/Source/kodkod/src/kodkod/engine/satlab/Z3Solver.java b/Source/kodkod/src/kodkod/engine/satlab/Z3Solver.java index 5769dbb..01826c2 100644 --- a/Source/kodkod/src/kodkod/engine/satlab/Z3Solver.java +++ b/Source/kodkod/src/kodkod/engine/satlab/Z3Solver.java @@ -2,58 +2,61 @@ import com.microsoft.z3.*; import kodkod.ast.*; -import kodkod.ast.operator.ExprOperator; import kodkod.ast.operator.FormulaOperator; -import kodkod.ast.visitor.AbstractDetector; import kodkod.instance.Bounds; import kodkod.instance.Instance; import kodkod.instance.Tuple; -import kodkod.instance.TupleSet; - +import kodkod.util.z3.Z3EliminatedFormulaConverter; +import kodkod.util.z3.Z3FormulaConverter; +import kodkod.util.z3.Z3FormulaConverterWithBV; +import kodkod.util.z3.Z3FormulaConverterWithInt; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.PrintWriter; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import java.util.stream.Stream; public class Z3Solver implements SATSolver { + // Formula with (quantifier size >= 'ELIMINATION_THRESHOLD') will be applied to quantifier elimination. + private static final int ELIMINATION_THRESHOLD = 4; - private Context ctx; - - private Solver solver; + private final ConverterType converterType = ConverterType.BV; - private EnumSort UNIV; + private int BIT_SIZE = 8; + private Sort UNIV; + private Context ctx; + Solver solver; + private Goal goal; private Map funcDeclMap = new HashMap<>(); - private Map variableExprMap = new HashMap<>(); private Status status = Status.SATISFIABLE; - private Bounds bounds = null; private Instance instance = null; - private int quantifierID; - private int skolemID; - private Set unsatFormulaSet = new HashSet<>(); private Set> unsatTupleSet = new HashSet<>(); - private long solvingTime = 0; - - //default goal - private Goal goal = null; - //qe goal - private Goal qeGoal = null; - private Set possibleExprs = new HashSet<>(); private Map> exprTupleMap = new HashMap<>(); private Map boolExprFormulaMap = new HashMap<>(); - private Map assertionMap = new HashMap<>(); + private long solvingTime = 0; + + private Map integerObjectMap = new HashMap<>(); + + enum ConverterType { ELIMINATED_BV, INTEGER, BV } + public Z3Solver() { Global.setParameter("model.compact", "true"); Global.setParameter("smt.mbqi", "true"); Global.setParameter("smt.pull-nested-quantifiers", "true"); Global.setParameter("smt.mbqi.trace", "true"); + Global.setParameter("smt.core.minimize", "true"); HashMap cfg = new HashMap<>(); cfg.put("proof", "true"); @@ -61,27 +64,6 @@ public Z3Solver() { ctx = new Context(cfg); goal = ctx.mkGoal(true, false, false); - qeGoal = ctx.mkGoal(true, false, false); - } - - public Status getStatus() { - return status; - } - - public long getSolvingTimeInMilis() { - return solvingTime; - } - - public Instance getInstance() { - return instance; - } - - public Set> getUnsatTupleSet() { - return unsatTupleSet; - } - - public Set getUnsatFormulaSet() { - return unsatFormulaSet; } private void makeAssertions(Formula formula, Bounds bounds) { @@ -89,54 +71,57 @@ private void makeAssertions(Formula formula, Bounds bounds) { System.out.println("----- z3 -----"); System.out.println(); - this.bounds = bounds; - Map objectMap = new HashMap<>(); Map objectExprMap = new HashMap<>(); for (int i = 0; i < bounds.universe().size(); i++) { Object object = bounds.universe().atom(i); - objectMap.put(object.toString(), object); + objectMap.put("|" + object.toString() + "|", object); + + try { + int x = Integer.parseInt(object.toString()); + integerObjectMap.put(x, object); + } + catch (NumberFormatException ignored) { } } - UNIV = ctx.mkEnumSort("univ", objectMap.keySet().toArray(new String[objectMap.keySet().size()])); + UNIV = ctx.mkEnumSort("univ", objectMap.keySet().toArray(new String[0])); - for (Expr expr : UNIV.getConsts()) { + for (Expr expr : ((EnumSort) UNIV).getConsts()) { Object object = objectMap.get(expr.toString()); if (object == null) object = objectMap.get(expr.toString().substring(1, expr.toString().length() - 1)); objectExprMap.put(object, expr); } - //AbstractDetector detector = new AbstractDetector(Collections.emptySet()) {}; - - FuncDecl univFuncDecl = null; - //if (detector.visit((ConstantExpression) Relation.UNIV)) { - univFuncDecl = ctx.mkFuncDecl("univ", new Sort[]{UNIV}, ctx.mkBoolSort()); - funcDeclMap.put(Relation.UNIV, univFuncDecl); - //} - /*FuncDecl idenFuncDecl = null; - //if (detector.visit((ConstantExpression) Relation.IDEN)) { - idenFuncDecl = ctx.mkFuncDecl("iden", new Sort[]{UNIV, UNIV}, ctx.mkBoolSort()); - funcDeclMap.put(Relation.IDEN, idenFuncDecl); - //}*/ - FuncDecl noneFuncDecl = null; - //if (detector.visit((ConstantExpression) Relation.NONE)) { - noneFuncDecl = ctx.mkFuncDecl("none", new Sort[]{UNIV}, ctx.mkBoolSort()); - funcDeclMap.put(Relation.NONE, noneFuncDecl); - //} - /*FuncDecl intsFuncDecl = null; - if (detector.visit((ConstantExpression) Relation.INTS)) { - intsFuncDecl = funcDeclMap.put(Relation.INTS, ctx.mkFuncDecl("Ints", new Sort[] {ctx.mkIntSort()}, ctx.mkBoolSort())); - funcDeclMap.put(Relation.INTS, intsFuncDecl); - }*/ bounds.relations().forEach(relation -> { Sort[] sorts = new Sort[relation.arity()]; for (int i = 0; i < sorts.length; i++) { sorts[i] = UNIV; } - FuncDecl funcDecl = ctx.mkFuncDecl(relation.name(), sorts, ctx.mkBoolSort()); + + FuncDecl funcDecl; + + if (relation.name().isEmpty() || funcDeclMap.values().stream().anyMatch(f -> f.getSExpr().equals(relation.name()))) { + int uniqueCount = 0; + + while (true) { + int finalUniqueCount = uniqueCount; + + if (funcDeclMap.values().stream().anyMatch(f -> f.getSExpr().equals(relation.name() + finalUniqueCount))) { + uniqueCount++; + } + else + break; + } + + funcDecl = ctx.mkFuncDecl(relation.name() + uniqueCount, sorts, ctx.mkBoolSort()); + } + else { + funcDecl = ctx.mkFuncDecl(relation.name(), sorts, ctx.mkBoolSort()); + } + funcDeclMap.put(relation, funcDecl); bounds.lowerBounds().get(relation).forEach(tuple -> { @@ -147,62 +132,81 @@ private void makeAssertions(Formula formula, Bounds bounds) { goal.add((BoolExpr) ctx.mkApp(funcDecl, exprs)); }); - bounds.upperBounds().get(relation).forEach(tuple -> { + bounds.universe().factory().allOf(relation.arity()).forEach(tuple -> { Expr[] exprs = new Expr[tuple.arity()]; for (int i = 0; i < exprs.length; i++) { exprs[i] = objectExprMap.get(tuple.atom(i)); } - - Expr expr = ctx.mkApp(funcDecl, exprs); + BoolExpr expr = (BoolExpr) ctx.mkApp(funcDecl, exprs); possibleExprs.add(expr); - exprTupleMap.put(expr, new AbstractMap.SimpleEntry<>(relation, tuple)); + if (!bounds.upperBound(relation).contains(tuple)) + goal.add(ctx.mkNot(expr)); }); }); - for (Expr expr1 : objectExprMap.values()) { - if (univFuncDecl != null) - goal.add((BoolExpr) ctx.mkApp(univFuncDecl, new Expr[] {expr1})); - if (noneFuncDecl != null) - goal.add(ctx.mkNot((BoolExpr) ctx.mkApp(noneFuncDecl, new Expr[] {expr1}))); - /*if (idenFuncDecl != null) { - goal.add((BoolExpr) ctx.mkApp(idenFuncDecl, new Expr[]{expr1, expr1})); - for (Expr expr2 : objectExprMap.values()) { - if (expr1 != expr2) { - goal.add(ctx.mkNot((BoolExpr) ctx.mkApp(idenFuncDecl, new Expr[] {expr1, expr2}))); - goal.add(ctx.mkNot((BoolExpr) ctx.mkApp(idenFuncDecl, new Expr[] {expr2, expr1}))); - } - } - }*/ + Goal goalSNF = ctx.mkGoal(true, false, false); + + Z3FormulaConverter converter; + + switch (converterType) { + case BV: + converter = new Z3FormulaConverterWithBV(ctx, UNIV, funcDeclMap, objectExprMap, BIT_SIZE); + break; + case INTEGER: + converter = new Z3FormulaConverterWithInt(ctx, UNIV, funcDeclMap, objectExprMap, BIT_SIZE); + break; + case ELIMINATED_BV: + default: + converter = new Z3EliminatedFormulaConverter(ctx, UNIV, funcDeclMap, objectExprMap, bounds, BIT_SIZE); + break; } + long cur = System.currentTimeMillis(); boolExprFormulaMap = separateFormula(formula).stream() - .collect(Collectors.toMap(f -> visit(f, 0, new Expr[] {}) + .collect(Collectors.toMap( + converter::convert , f -> f , (a, b) -> a)); + cur = System.currentTimeMillis() - cur; - /*boolExprMap.forEach((boolExpr, f) -> { - System.out.println("kodkod: " + f); - System.out.println("z3:"); - System.out.println(boolExpr); - System.out.println(); - });*/ - - /*boolExprMap.keySet().forEach(boolExpr -> { - if (quantifierSizeMap.getOrDefault(boolExpr, 0) < 3) { - // TODO: Normal operation - goal.add(boolExpr); - } - else { - // TODO: Apply quantifier elimination tactic - qeGoal.add(boolExpr); - } - });*/ + System.out.println("Visitor time: " + cur + " ms"); + System.out.println(); + + boolExprFormulaMap.keySet().forEach(goalSNF::add); + converter.getCreatedBoolExpressions().forEach(goalSNF::add); - boolExprFormulaMap.keySet().forEach(goal::add); + Solver mySolver = ctx.mkSolver(); + mySolver.add(goal.getFormulas()); + mySolver.add(goalSNF.getFormulas()); + + StringBuilder sb = new StringBuilder(); + sb.append(mySolver.toString().replaceFirst("[(]univ 0[)]", "")).append(System.lineSeparator()); + sb.append("(check-sat)").append(System.lineSeparator()); + sb.append("(get-info :all-statistics)").append(System.lineSeparator()); + sb.append("(get-model)"); + + String mainClass = System.getProperty("sun.java.command"); + String[] subs = mainClass.split("[.]"); + String shortMainClass = subs[subs.length - 1].toLowerCase(); + + File dirSMT = new File("SMT/"); + if (!dirSMT.exists()) + dirSMT.mkdir(); + try (PrintWriter out = new PrintWriter("SMT/" + shortMainClass + ".smt")) { + out.println(sb); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + /*System.out.println("*********************** SMTLIB BEGIN ***********************"); + System.out.println(); + System.out.println(sb); + System.out.println(); + System.out.println("*********************** SMTLIB END ***********************");*/ //Tactics - Tactic t_qe = ctx.mkTactic("qe");//ctx.andThen(ctx.mkTactic("snf"), ctx.mkTactic("qe") ); + Tactic t_qe = ctx.mkTactic("qe"); Tactic t_default = ctx.mkTactic("snf"); solver = ctx.mkSolver(); Params p = ctx.mkParams(); @@ -210,49 +214,73 @@ private void makeAssertions(Formula formula, Bounds bounds) { p.add("pull-nested-quantifiers", true); solver.setParameters(p); - ApplyResult qe_ar = t_default.apply(goal); - - BoolExpr[] originals = goal.getFormulas(); - BoolExpr[] newOnes = qe_ar.getSubgoals()[0].getFormulas(); + for (BoolExpr original : goal.getFormulas()) { + BoolExpr boolExpr = ctx.mkBoolConst("! " + original.toString()); + try { + solver.assertAndTrack(original, boolExpr); + assertionMap.put(boolExpr, original); + } + catch (Exception ignored) { } + } // Pattern to find all quantifiers Pattern pattern = Pattern.compile("([(][a-zA-Z0-9!]+( univ)[)])"); - for (int i = 0; i < originals.length; i++) { - Formula f = boolExprFormulaMap.get(originals[i]); - BoolExpr e = newOnes[i]; - int forallCount = 0;//e.getSExpr().split("forall").length - 1; - Matcher matcher = pattern.matcher(e.getSExpr()); - while (matcher.find()) - forallCount++; + for (BoolExpr original : goalSNF.getFormulas()) { + Goal singletonGoal = ctx.mkGoal(true, false, false); + singletonGoal.add(original); + ApplyResult qe_ar = t_default.apply(singletonGoal); + + BoolExpr[] newOnes = qe_ar.getSubgoals()[0].getFormulas(); + Formula f = boolExprFormulaMap.get(original); if (f != null) { - System.out.println("kodkod: " + f); - System.out.println("z3:"); - System.out.println(originals[i]); - /*System.out.println("snf z3:"); - System.out.println(newOnes[i]);*/ - System.out.println(); - System.out.println("Quantifiers: " + forallCount); - System.out.println(); - } - if (forallCount < 5) { - BoolExpr boolExpr = ctx.mkBoolConst("! " + e.toString()); - assertionMap.put(boolExpr, originals[i]); - solver.assertAndTrack(e, boolExpr); + //System.out.println("kodkod: " + f); } - else { - Goal ge_goal = ctx.mkGoal(true, false, false); - ge_goal.add(e); + //System.out.println("z3:"); + //System.out.println(original); + + for (int i = 0; i < newOnes.length; i++) { + BoolExpr e = newOnes[i]; + int forallCount = 0; + Matcher matcher = pattern.matcher(e.getSExpr()); + + while (matcher.find()) + forallCount++; + + //System.out.println("snf z3:"); + //System.out.println(newOnes[i]); + //System.out.println(); + //System.out.println("Quantifiers: " + forallCount); + //System.out.println(); + if (forallCount < ELIMINATION_THRESHOLD) { + BoolExpr boolExpr = ctx.mkBoolConst("! " + e.toString()); + try { + solver.assertAndTrack(e, boolExpr); + assertionMap.put(boolExpr, original); + } + catch (Exception ignored) { + } + + } else { + Goal ge_goal = ctx.mkGoal(true, false, false); + + ge_goal.add(e); - ApplyResult ar = t_qe.apply(ge_goal); + ApplyResult ar = t_qe.apply(ge_goal); - for (BoolExpr b : ar.getSubgoals()[0].getFormulas()) { - BoolExpr boolExpr = ctx.mkBoolConst("! " + b.toString()); - assertionMap.put(boolExpr, originals[i]); - solver.assertAndTrack(b, boolExpr); + for (BoolExpr b : ar.getSubgoals()[0].getFormulas()) { + BoolExpr boolExpr = ctx.mkBoolConst("! " + b.toString()); + try { + solver.assertAndTrack(b, boolExpr); + assertionMap.put(boolExpr, original); + } + catch (Exception ignored) { + } + } } } + } //end of tactics application @@ -297,10 +325,15 @@ public boolean solve(Formula formula, Bounds bounds) { solveThis(bounds); + //return true; + return status == Status.SATISFIABLE; } - private void solveThis(Bounds bounds){ + private void solveThis(Bounds bounds) { + + System.out.println("Solving..."); + System.out.println(); long beginningTime = System.currentTimeMillis(); status = solver.check(); @@ -311,7 +344,9 @@ private void solveThis(Bounds bounds){ switch (status) { case SATISFIABLE: Set reasonedExprs = possibleExprs.stream() - .filter(expr -> solver.getModel().eval(expr, true).equals(ctx.mkTrue())) + .filter(expr -> { + return solver.getModel().eval(expr, true).equals(ctx.mkTrue()); + }) .collect(Collectors.toSet()); System.out.println("Sat"); @@ -334,6 +369,10 @@ private void solveThis(Bounds bounds){ instance.add(relation, bounds.universe().factory().setOf(tuples)); }); + for (int i : bounds.ints().toArray()) { + instance.add(i, bounds.universe().factory().setOf(integerObjectMap.get(i))); + } + System.out.println(instance); break; case UNSATISFIABLE: @@ -350,8 +389,7 @@ private void solveThis(Bounds bounds){ BoolExpr assertion = assertionMap.get(boolExpr); if (exprTupleMap.containsKey(assertion)) { unsatTupleSet.add(exprTupleMap.get(assertion)); - } - else if (boolExprFormulaMap.containsKey(assertion)) { + } else if (boolExprFormulaMap.containsKey(assertion)) { unsatFormulaSet.add(boolExprFormulaMap.get(assertion)); } }); @@ -381,407 +419,33 @@ private Set separateFormula(Formula formula) { return Collections.singleton(formula); } - private BoolExpr visit(Node node, int depth, Expr[] exprs) { - String quantifierPrefix = "q!"; - String skolemPrefix = "s!"; - - if (node instanceof Relation) { - return (BoolExpr) ctx.mkApp(funcDeclMap.get(node), exprs); - } - else if (node instanceof ConstantExpression) { - if (node.equals(Relation.IDEN)) { - return ctx.mkEq(exprs[0], exprs[1]); - } - return (BoolExpr) ctx.mkApp(funcDeclMap.get(node), exprs); - } - else if (node instanceof Variable) { - return ctx.mkEq(variableExprMap.get(node), exprs[0]); - } - else if (node instanceof UnaryExpression) { - UnaryExpression unaryExpression = (UnaryExpression) node; - switch (unaryExpression.op()) { - case TRANSPOSE: - return visit(unaryExpression.expression(), depth, new Expr[] {exprs[1], exprs[0]}); - case REFLEXIVE_CLOSURE: - Expression ex = unaryExpression.expression(); - while (ex instanceof BinaryExpression && ((BinaryExpression) ex).op().equals(ExprOperator.JOIN)) { - ex = ((BinaryExpression) ex).right(); - } - - int loopCount = UNIV.getConsts().length - 1; - - if (ex.equals(Relation.NONE)) { - loopCount = 0; - } - else if (ex instanceof Relation) { - loopCount = (int) (bounds.upperBound((Relation) ex).stream() - .map(t -> t.atom(t.arity() - 1)) - .distinct().count()) - 1; - } - - /*List expressions = new ArrayList<>(); - expressions.add(Relation.IDEN); - for (int i = 0; i < loopCount; i++) { - Expression expression = unaryExpression.expression(); - for (int j = 0; j < i; j++) { - expression = expression.join(unaryExpression.expression()); - } - expressions.add(expression); - }*/ - - Expression unionExpr = Relation.IDEN; - for (int i = 0; i < loopCount - 1; i++) { - unionExpr = Relation.IDEN.union(unaryExpression.expression().join(unionExpr)); - } - - //return visit(Expression.union(expressions), depth, exprs); - return visit(unionExpr, depth, exprs); - case CLOSURE: - ex = unaryExpression.expression(); - while (ex instanceof BinaryExpression && ((BinaryExpression) ex).op().equals(ExprOperator.JOIN)) { - ex = ((BinaryExpression) ex).right(); - } - - loopCount = UNIV.getConsts().length - 1; - - if (ex.equals(Relation.NONE)) { - loopCount = 0; - } - else if (ex instanceof Relation) { - loopCount = (int) (bounds.upperBound((Relation) ex).stream() - .map(t -> t.atom(t.arity() - 1)) - .distinct().count()) - 1; - } - - /*expressions = new ArrayList<>(); - for (int i = 0; i < loopCount; i++) { - Expression expression = unaryExpression.expression(); - for (int j = 0; j < i; j++) { - expression = expression.join(unaryExpression.expression()); - } - expressions.add(expression); - } - return visit(Expression.union(expressions), depth, exprs);*/ - - unionExpr = Relation.IDEN; - for (int i = 0; i < loopCount - 1; i++) { - unionExpr = Relation.IDEN.union(unaryExpression.expression().join(unionExpr)); - } - - if (unionExpr instanceof BinaryExpression && ((BinaryExpression) unionExpr).op().equals(ExprOperator.UNION)) - return visit(((BinaryExpression) unionExpr).right(), depth, exprs); - else { - return ctx.mkFalse(); - } - } - } - else if (node instanceof BinaryExpression) { - BinaryExpression binaryExpression = (BinaryExpression) node; - switch (binaryExpression.op()) { - case JOIN: - Expr expr = ctx.mkConst("x!" + depth, UNIV); - - Expression leftExpression = binaryExpression.left(); - Expression rightExpression = binaryExpression.right(); - - Expr[] leftExprs = new Expr[leftExpression.arity()]; - - System.arraycopy(exprs, 0, leftExprs, 0, leftExprs.length - 1); - leftExprs[leftExprs.length - 1] = expr; - - Expr[] rightExprs = new Expr[rightExpression.arity()]; - - rightExprs[0] = expr; - System.arraycopy(exprs, exprs.length - rightExprs.length + 1, rightExprs, 1, rightExprs.length - 1); - - if (leftExpression instanceof Variable) { - rightExprs[0] = variableExprMap.get(leftExpression); - return visit(rightExpression, depth + 1, rightExprs); - } - else if (rightExpression instanceof Variable) { - rightExprs[rightExprs.length - 1] = variableExprMap.get(rightExpression); - return visit(leftExpression, depth + 1, leftExprs); - } - - return ctx.mkExists(new Expr[] {expr} - , ctx.mkAnd(visit(leftExpression, depth + 1, leftExprs) - , visit(rightExpression, depth + 1, rightExprs)) - , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), ctx.mkSymbol(skolemPrefix + skolemID++)); - case UNION: - return ctx.mkOr(visit(binaryExpression.left(), depth, exprs), visit(binaryExpression.right(), depth, exprs)); - case INTERSECTION: - return ctx.mkAnd(visit(binaryExpression.left(), depth, exprs), visit(binaryExpression.right(), depth, exprs)); - case PRODUCT: - leftExpression = binaryExpression.left(); - rightExpression = binaryExpression.right(); - - leftExprs = new Expr[leftExpression.arity()]; - System.arraycopy(exprs, 0, leftExprs, 0, leftExprs.length); - - rightExprs = new Expr[rightExpression.arity()]; - System.arraycopy(exprs, leftExpression.arity(), rightExprs, 0, rightExprs.length); - - return ctx.mkAnd(visit(leftExpression, depth, leftExprs), visit(rightExpression, depth, rightExprs)); - case DIFFERENCE: - return ctx.mkAnd(visit(binaryExpression.left(), depth, exprs), ctx.mkNot(visit(binaryExpression.right(), depth, exprs))); - case OVERRIDE: - // TODO: Implement this. - break; - } - } - else if (node instanceof NaryExpression) { - NaryExpression naryExpression = (NaryExpression) node; - - switch (naryExpression.op()) { - case UNION: - BoolExpr[] boolExprs = new BoolExpr[naryExpression.size()]; - for (int i = 0; i < boolExprs.length; i++) { - boolExprs[i] = visit(naryExpression.child(i), depth, exprs); - } - return ctx.mkOr(boolExprs); - case PRODUCT: - boolExprs = new BoolExpr[naryExpression.size()]; - for (int i = 0; i < boolExprs.length; i++) { - int start = 0; - - for (int j = 0; j < i; j++) - start += naryExpression.child(i - 1).arity(); - - Expression expression = naryExpression.child(i); - Expr[] exprs1 = new Expr[expression.arity()]; - - System.arraycopy(exprs, start, exprs1, 0, exprs1.length); - - boolExprs[i] = visit(expression, depth, exprs1); - } - return ctx.mkAnd(boolExprs); - case INTERSECTION: - boolExprs = new BoolExpr[naryExpression.size()]; - for (int i = 0; i < boolExprs.length; i++) { - boolExprs[i] = visit(naryExpression.child(i), depth, exprs); - } - return ctx.mkAnd(boolExprs); - case OVERRIDE: - // TODO: Implement this. - break; - } - } - else if (node instanceof NotFormula) { - NotFormula notFormula = (NotFormula) node; - return ctx.mkNot(visit(notFormula.formula(), depth, exprs)); - } - else if (node instanceof ComparisonFormula) { - ComparisonFormula comparisonFormula = (ComparisonFormula) node; - switch (comparisonFormula.op()) { - case EQUALS: - Expr[] exprs1; - if (comparisonFormula.left() instanceof Variable) { - if (comparisonFormula.right() instanceof Variable) { - return ctx.mkEq(variableExprMap.get(comparisonFormula.left()), variableExprMap.get(comparisonFormula.right())); - } - else { - exprs1 = new Expr[comparisonFormula.left().arity()]; - exprs1[0] = variableExprMap.get(comparisonFormula.left()); - return visit(comparisonFormula.right(), depth, exprs1); - } - } - else if (comparisonFormula.right() instanceof Variable) { - exprs1 = new Expr[comparisonFormula.right().arity()]; - exprs1[0] = variableExprMap.get(comparisonFormula.right()); - return visit(comparisonFormula.left(), depth, exprs1); - } - - exprs1 = new Expr[comparisonFormula.left().arity()]; - for (int i = 0; i < exprs1.length; i++) { - exprs1[i] = ctx.mkConst("x!" + (depth + i), UNIV); - } - BoolExpr left = visit(comparisonFormula.left(), exprs1.length + depth, exprs1); - BoolExpr right = visit(comparisonFormula.right(), exprs1.length + depth, exprs1); - - return ctx.mkForall(exprs1 - , ctx.mkAnd(ctx.mkImplies(left, right), ctx.mkImplies(right, left)) - , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); - - /*return ctx.mkForall(exprs1 - , ctx.mkEq(visit(comparisonFormula.left(), exprs1.length + depth, exprs1) - , visit(comparisonFormula.right(), exprs1.length + depth, exprs1)) - , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null);*/ - case SUBSET: - if (comparisonFormula.left() instanceof Variable) { - if (comparisonFormula.right() instanceof Variable) { - return ctx.mkEq(variableExprMap.get(comparisonFormula.left()), variableExprMap.get(comparisonFormula.right())); - } - else { - exprs1 = new Expr[comparisonFormula.left().arity()]; - exprs1[0] = variableExprMap.get(comparisonFormula.left()); - return visit(comparisonFormula.right(), depth, exprs1); - } - } - else if (comparisonFormula.right() instanceof Variable) { - exprs1 = new Expr[comparisonFormula.right().arity()]; - exprs1[0] = variableExprMap.get(comparisonFormula.right()); - return visit(comparisonFormula.left(), depth, exprs1); - } + /** + * GETTERS / SETTERS + */ - exprs1 = new Expr[comparisonFormula.left().arity()]; - for (int i = 0; i < exprs1.length; i++) { - exprs1[i] = ctx.mkConst("x!" + (i + depth), UNIV); - } - return ctx.mkForall(exprs1 - , ctx.mkImplies(visit(comparisonFormula.left(), exprs1.length + depth, exprs1) - , visit(comparisonFormula.right(), exprs1.length + depth, exprs1)) - , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); - } - } - else if (node instanceof BinaryFormula) { - BinaryFormula binaryFormula = (BinaryFormula) node; - switch (binaryFormula.op()) { - case IMPLIES: - return ctx.mkImplies(visit(binaryFormula.left(), depth, exprs), visit(binaryFormula.right(), depth, exprs)); - case IFF: - BoolExpr left = visit(binaryFormula.left(), depth, exprs); - BoolExpr right = visit(binaryFormula.right(), depth, exprs); - return ctx.mkAnd(ctx.mkImplies(left, right), ctx.mkImplies(right, left)); - //return ctx.mkEq(visit(binaryFormula.left(), depth, exprs), visit(binaryFormula.right(), depth, exprs)); - case OR: - return ctx.mkOr(visit(binaryFormula.left(), depth, exprs), visit(binaryFormula.right(), depth, exprs)); - case AND: - return ctx.mkAnd(visit(binaryFormula.left(), depth, exprs), visit(binaryFormula.right(), depth, exprs)); - } - } - else if (node instanceof NaryFormula) { - NaryFormula naryFormula = (NaryFormula) node; - switch (naryFormula.op()) { - case AND: - BoolExpr[] boolExprs = new BoolExpr[naryFormula.size()]; - for (int i = 0; i < boolExprs.length; i++) { - boolExprs[i] = visit(naryFormula.child(i), depth, exprs); - } - return ctx.mkAnd(boolExprs); - case OR: - boolExprs = new BoolExpr[naryFormula.size()]; - for (int i = 0; i < boolExprs.length; i++) { - boolExprs[i] = visit(naryFormula.child(i), depth, exprs); - } - return ctx.mkOr(boolExprs); - } - } - else if (node instanceof MultiplicityFormula) { - MultiplicityFormula multiplicityFormula = (MultiplicityFormula) node; - switch (multiplicityFormula.multiplicity()) { - case SOME: - Expr[] exprs1 = new Expr[multiplicityFormula.expression().arity()]; - for (int i = 0; i < exprs1.length; i++) { - exprs1[i] = ctx.mkConst("x!" + (i + depth), UNIV); - } - return ctx.mkExists(exprs1 - , visit(multiplicityFormula.expression(), exprs1.length + depth, exprs1) - , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), ctx.mkSymbol(skolemPrefix + skolemID++)); - case NO: - exprs1 = new Expr[multiplicityFormula.expression().arity()]; - for (int i = 0; i < exprs1.length; i++) { - exprs1[i] = ctx.mkConst("x!" + (i + depth), UNIV); - } - return ctx.mkNot(ctx.mkExists(exprs1 - , visit(multiplicityFormula.expression(), exprs1.length + depth, exprs1) - , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), ctx.mkSymbol(skolemPrefix + skolemID++))); - case ONE: - exprs1 = new Expr[multiplicityFormula.expression().arity()]; - for (int i = 0; i < exprs1.length; i++) { - exprs1[i] = ctx.mkConst("y!" + (i + depth), UNIV); - } - Expr[] exprs2 = new Expr[multiplicityFormula.expression().arity()]; - for (int i = 0; i < exprs2.length; i++) { - exprs2[i] = ctx.mkConst("z!" + (i + depth), UNIV); - } - BoolExpr[] eqs = new BoolExpr[exprs1.length]; - for (int i = 0; i < eqs.length; i++) { - eqs[i] = ctx.mkEq(exprs1[i], exprs2[i]); - } + public void setBitSize(int bitSize) { + this.BIT_SIZE = bitSize; + } - Expr[] allExprs = new Expr[exprs1.length + exprs2.length]; - System.arraycopy(exprs1, 0, allExprs, 0, exprs1.length); - System.arraycopy(exprs2, 0, allExprs, exprs1.length, exprs2.length); - - Quantifier lone = ctx.mkForall(allExprs - , ctx.mkImplies( - ctx.mkAnd(visit(multiplicityFormula.expression(), depth, exprs1) - , visit(multiplicityFormula.expression(), depth, exprs2)) - , ctx.mkAnd(eqs)) - , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); - Quantifier some = ctx.mkExists(exprs1, visit(multiplicityFormula.expression(), depth, exprs1) - , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), ctx.mkSymbol(skolemPrefix + skolemID++)); - - return ctx.mkAnd(some, lone); - case LONE: - exprs1 = new Expr[multiplicityFormula.expression().arity()]; - for (int i = 0; i < exprs1.length; i++) { - exprs1[i] = ctx.mkConst("y!" + (i + depth), UNIV); - } - exprs2 = new Expr[multiplicityFormula.expression().arity()]; - for (int i = 0; i < exprs1.length; i++) { - exprs2[i] = ctx.mkConst("z!" + (i + depth), UNIV); - } - eqs = new BoolExpr[exprs1.length]; - for (int i = 0; i < eqs.length; i++) { - eqs[i] = ctx.mkEq(exprs1[i], exprs2[i]); - } + public Status getStatus() { + return status; + } - allExprs = new Expr[exprs1.length + exprs2.length]; - System.arraycopy(exprs1, 0, allExprs, 0, exprs1.length); - System.arraycopy(exprs2, 0, allExprs, exprs1.length, exprs2.length); + public long getSolvingTimeInMilis() { + return solvingTime; + } - return ctx.mkForall(allExprs - , ctx.mkImplies( - ctx.mkAnd(visit(multiplicityFormula.expression(), depth, exprs1) - , visit(multiplicityFormula.expression(), depth, exprs2)) - , ctx.mkAnd(eqs)) - , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); - } - } - else if (node instanceof QuantifiedFormula) { - QuantifiedFormula quantifiedFormula = (QuantifiedFormula) node; - int exprsSize = quantifiedFormula.decls().size(); - - Expr[] exprs1 = new Expr[exprsSize]; - BoolExpr[] ands = new BoolExpr[exprsSize]; - - for (int i = 0; i < exprsSize; i++) { - Decl decl = quantifiedFormula.decls().get(i); - exprs1[i] = ctx.mkConst(decl.variable().name()/*"x" + (i + depth)*/, UNIV); - variableExprMap.put(decl.variable(), exprs1[i]); - ands[i] = visit(decl.variable().in(decl.expression()), depth + exprsSize, exprs); - } + public Instance getInstance() { + return instance; + } - switch (quantifiedFormula.quantifier()) { - case ALL: - return ctx.mkForall(exprs1 - , ctx.mkImplies(ctx.mkAnd(ands) - , visit(quantifiedFormula.formula(), depth + exprs1.length, exprs1)) - , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); - case SOME: - return ctx.mkExists(exprs1 - , ctx.mkImplies(ctx.mkAnd(ands) - , visit(quantifiedFormula.formula(), depth + exprs1.length, exprs1)) - , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), ctx.mkSymbol(skolemPrefix + skolemID++)); - } - } - if (node instanceof ConstantFormula) { - ConstantFormula constantFormula = (ConstantFormula) node; - if (constantFormula.booleanValue()) { - return ctx.mkTrue(); - } - else { - return ctx.mkFalse(); - } - } - else if (node instanceof RelationPredicate) { - RelationPredicate relationPredicate = (RelationPredicate) node; - return visit(relationPredicate.toConstraints(), depth, exprs); - } + public Set> getUnsatTupleSet() { + return unsatTupleSet; + } - return ctx.mkTrue(); + public Set getUnsatFormulaSet() { + return unsatFormulaSet; } @Override @@ -797,6 +461,11 @@ public String toString() { return sb.toString(); } + + /** + * NO USE + */ + @Override public int numberOfVariables() { return 0; diff --git a/Source/kodkod/src/kodkod/util/z3/ClosureCountFinder.java b/Source/kodkod/src/kodkod/util/z3/ClosureCountFinder.java new file mode 100644 index 0000000..09c030b --- /dev/null +++ b/Source/kodkod/src/kodkod/util/z3/ClosureCountFinder.java @@ -0,0 +1,40 @@ +package kodkod.util.z3; + +import kodkod.instance.Tuple; +import kodkod.instance.TupleFactory; + +import java.util.HashSet; +import java.util.Set; + +/** + * Created by harun on 7/16/18. + */ +public class ClosureCountFinder { + + public static int find(TupleFactory factory, Set bounds) { + int count = 0; + + Set newOnes = new HashSet<>(bounds); + Set allTuples = new HashSet<>(); + Set current = new HashSet<>(); + + do { + count++; + + allTuples.addAll(newOnes); + + for (Tuple t1 : newOnes) { + for (Tuple t2 : allTuples) { + current.add(factory.tuple(t1.atom(1), t2.atom(0))); + } + } + + newOnes = new HashSet<>(current); + current.clear(); + + } while (!allTuples.containsAll(newOnes)); + + return count; + } + +} diff --git a/Source/kodkod/src/kodkod/util/z3/QuantifierEliminator.java b/Source/kodkod/src/kodkod/util/z3/QuantifierEliminator.java new file mode 100644 index 0000000..b50ef6d --- /dev/null +++ b/Source/kodkod/src/kodkod/util/z3/QuantifierEliminator.java @@ -0,0 +1,39 @@ +package kodkod.util.z3; + +import com.microsoft.z3.Expr; +import kodkod.ast.Variable; + +import java.util.*; + +/** + * Created by harun on 7/16/18. + */ +public class QuantifierEliminator { + + public static Set> getQuantifiers(Map objectExprMap, UpperBoundFinder upperBoundFinder, Variable... variables) { + return get(objectExprMap, upperBoundFinder, 0, variables); + } + + private static Set> get(Map objectExprMap, UpperBoundFinder upperBoundFinder, int index, Variable... variables) { + if (index == variables.length) { + Set> set = new HashSet<>(); + set.add(new HashMap<>()); + return set; + } + + Set> set = get(objectExprMap, upperBoundFinder, index + 1, variables); + + Set> newSet = new HashSet<>(); + + set.forEach(map -> { + variables[index].accept(upperBoundFinder).forEach(tuple -> { + Map newMAp = new HashMap<>(map); + newMAp.put(variables[index], objectExprMap.get(tuple.atom(0))); + newSet.add(newMAp); + }); + }); + + return newSet; + } + +} diff --git a/Source/kodkod/src/kodkod/util/z3/UpperBoundFinder.java b/Source/kodkod/src/kodkod/util/z3/UpperBoundFinder.java new file mode 100644 index 0000000..3bb6cf9 --- /dev/null +++ b/Source/kodkod/src/kodkod/util/z3/UpperBoundFinder.java @@ -0,0 +1,377 @@ +package kodkod.util.z3; + +import kodkod.ast.*; +import kodkod.ast.visitor.AbstractCollector; +import kodkod.instance.Bounds; +import kodkod.instance.Tuple; +import kodkod.instance.TupleFactory; +import kodkod.instance.TupleSet; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Created by harun on 7/13/18. + */ +public class UpperBoundFinder extends AbstractCollector { + + private Map> variableTuples; + + private Bounds bounds; + private TupleFactory factory; + + public UpperBoundFinder(Bounds bounds) { + super(new HashSet<>()); + + this.variableTuples = new HashMap<>(); + this.bounds = bounds; + this.factory = bounds.universe().factory(); + } + + public void renew() { + variableTuples.clear(); + } + + public boolean isReady(Decl decl) { + VariableDetector variableDetector = new VariableDetector(); + + decl.expression().accept(variableDetector); + + return variableDetector.variables().stream().allMatch(v -> variableTuples.containsKey(v)); + } + + @Override + protected Set newSet() { + return new HashSet<>(); + } + + @Override + public Set visit(QuantifiedFormula quantFormula) { + return quantFormula.decls().accept(this); + } + + @Override + public Set visit(Decls decls) { + Set declSet = new HashSet<>(); + decls.forEach(declSet::add); + + Set visited = new HashSet<>(); + + while (declSet.size() != visited.size()) { + int visitedSize = visited.size(); + declSet.forEach(decl -> { + if (!visited.contains(decl) && isReady(decl)) { + decl.accept(this); + visited.add(decl); + } + }); + if (visitedSize == visited.size()) + break; + } + + declSet.forEach(decl -> { + variableTuples.computeIfAbsent(decl.variable(), v -> factory.allOf(1)); + }); + + return Collections.emptySet(); + } + + @Override + public Set visit(Decl decl) { + Set set = decl.expression().accept(this); + variableTuples.put(decl.variable(), set); + return set; + } + + @Override + public Set visit(Relation relation) { + return bounds.upperBound(relation); + } + + @Override + public Set visit(Variable variable) { + return variableTuples.getOrDefault(variable, factory.allOf(1)); + } + + @Override + public Set visit(ConstantExpression constExpr) { + if (constExpr == ConstantExpression.UNIV) + return factory.allOf(1); + if (constExpr == ConstantExpression.IDEN) + return factory.setOf(bounds.universe().factory().allOf(1).stream() + .map(t -> t.product(t)).collect(Collectors.toSet())); + if (constExpr == ConstantExpression.INTS) + return bounds.intBounds().isEmpty() ? factory.noneOf(1) + : factory.setOf(bounds.intBounds().values().stream() + .flatMap(Collection::stream).collect(Collectors.toSet())); + + return bounds.universe().factory().noneOf(constExpr.arity()); + } + + @Override + public Set visit(UnaryExpression unaryExpr) { + switch (unaryExpr.op()) { + case CLOSURE: + TupleSet original = (TupleSet) unaryExpr.expression().accept(this); + Set allTuples = new HashSet<>(original); + Set realTuples = new HashSet<>(); + Set newOnes = new HashSet<>(); + Set prevs = new HashSet<>(original); + do { + newOnes.clear(); + + allTuples.forEach(tuple1 -> { + prevs.forEach(tuple2 -> { + if (tuple1.atom(1).equals(tuple2.atom(0))) { + newOnes.add(factory.tuple(tuple1.atom(0), tuple2.atom(1))); + } + }); + }); + + prevs.clear(); + prevs.addAll(newOnes); + allTuples.addAll(newOnes); + realTuples.addAll(newOnes); + } while (!allTuples.containsAll(newOnes)); + + return realTuples.isEmpty() ? factory.noneOf(unaryExpr.arity()) : factory.setOf(realTuples); + case REFLEXIVE_CLOSURE: + original = (TupleSet) unaryExpr.expression().accept(this); + allTuples = new HashSet<>(original); + newOnes = new HashSet<>(); + prevs = new HashSet<>(original); + do { + newOnes.clear(); + + allTuples.forEach(tuple1 -> { + prevs.forEach(tuple2 -> { + if (tuple1.atom(1).equals(tuple2.atom(0))) { + newOnes.add(factory.tuple(tuple1.atom(0), tuple2.atom(1))); + } + }); + }); + + prevs.clear(); + prevs.addAll(newOnes); + allTuples.addAll(newOnes); + } while (!allTuples.containsAll(newOnes)); + + return allTuples.isEmpty() ? factory.noneOf(unaryExpr.arity()) : factory.setOf(allTuples); + case TRANSPOSE: + TupleSet tupleSet = (TupleSet) unaryExpr.expression().accept(this); + return tupleSet.project(1).product(tupleSet.project(0)); + } + + return factory.noneOf(unaryExpr.arity()); + } + + @Override + public Set visit(BinaryExpression binExpr) { + switch (binExpr.op()) { + case UNION: + Set left = new HashSet<>(binExpr.left().accept(this)); + Set right = binExpr.right().accept(this); + left.addAll(right); + return left.isEmpty() ? factory.noneOf(binExpr.arity()) : factory.setOf(left); + case DIFFERENCE: + left = new HashSet<>(binExpr.left().accept(this)); + + VariableDetector variableDetector = new VariableDetector(); + binExpr.right().accept(variableDetector); + + if (!variableDetector.variables().isEmpty()) + return left; + + right = binExpr.right().accept(this); + left.removeAll(right); + return left.isEmpty() ? factory.noneOf(binExpr.arity()) : factory.setOf(left); + case JOIN: + left = new HashSet<>(binExpr.left().accept(this)); + right = binExpr.right().accept(this); + + Set result = new HashSet<>(); + + left.forEach(tuple1 -> { + right.forEach(tuple2 -> { + if (tuple1.atom(tuple1.arity() - 1).equals(tuple2.atom(0))) { + Object[] atoms = new Object[binExpr.arity()]; + for (int i = 0; i < tuple1.arity() - 1; i++) { + atoms[i] = tuple1.atom(i); + } + for (int i = 0; i < tuple2.arity() - 1; i++) { + atoms[i + tuple1.arity() - 1] = tuple2.atom(i + 1); + } + result.add(factory.tuple(atoms)); + } + }); + }); + + return result.isEmpty() ? factory.noneOf(binExpr.arity()) : factory.setOf(result); + case INTERSECTION: + left = new HashSet<>(binExpr.left().accept(this)); + right = binExpr.right().accept(this); + left.removeIf(t -> !right.contains(t)); + return left.isEmpty() ? factory.noneOf(binExpr.arity()) : factory.setOf(left); + case PRODUCT: + left = binExpr.left().accept(this); + right = binExpr.right().accept(this); + return ((TupleSet) left).product((TupleSet) right); + case OVERRIDE: + // TODO: Check this. + left = new HashSet<>(binExpr.left().accept(this)); + right = binExpr.right().accept(this); + left.addAll(right); + return left.isEmpty() ? factory.noneOf(binExpr.arity()) : factory.setOf(left); + } + + return factory.noneOf(binExpr.arity()); + } + + @Override + public Set visit(NaryExpression expr) { + switch (expr.op()) { + case UNION: + Set tuples = new HashSet<>(); + expr.iterator().forEachRemaining(expression -> tuples.addAll(expression.accept(this))); + return tuples.isEmpty() ? factory.noneOf(expr.arity()) : factory.setOf(tuples); + case INTERSECTION: + Set set; + Iterator iterator = expr.iterator(); + if (iterator.hasNext()) + set = new HashSet<>(iterator.next().accept(this)); + else + return factory.noneOf(expr.arity()); + + while (iterator.hasNext()) { + Set temp = iterator.next().accept(this); + set.removeIf(t -> !temp.contains(t)); + } + + return set.isEmpty() ? factory.noneOf(expr.arity()) : factory.setOf(set); + case PRODUCT: + iterator = expr.iterator(); + if (iterator.hasNext()) + set = iterator.next().accept(this); + else + return factory.noneOf(expr.arity()); + + while (iterator.hasNext()) { + Set temp = iterator.next().accept(this); + set = ((TupleSet) set).product((TupleSet) temp); + } + + return set.isEmpty() ? factory.noneOf(expr.arity()) : factory.setOf(set); + case OVERRIDE: + // TODO: Check this. + Set tuples2 = new HashSet<>(); + expr.iterator().forEachRemaining(expression -> tuples2.addAll(expression.accept(this))); + return tuples2.isEmpty() ? factory.noneOf(expr.arity()) : factory.setOf(tuples2); + } + + return factory.noneOf(expr.arity()); + } + + @Override + public Set visit(NotFormula not) { + return Collections.emptySet(); + } + + @Override + public Set visit(IfExpression ifExpr) { + return factory.noneOf(ifExpr.arity()); + } + + @Override + public Set visit(NaryFormula formula) { + return Collections.emptySet(); + } + + @Override + public Set visit(IntConstant intConst) { + for (Object o : factory.universe()) { + try { + if (Integer.parseInt(o.toString()) == intConst.value()) + return factory.setOf(factory.tuple(o)); + } catch (NumberFormatException ignored) { + } + } + return factory.allOf(1); + } + + @Override + public Set visit(ExprToIntCast intExpr) { + return intExpr.expression().accept(this); + } + + @Override + public Set visit(SumExpression intExpr) { + return Collections.emptySet(); + } + + @Override + public Set visit(IntToExprCast castExpr) { + return castExpr.intExpr().accept(this); + } + + @Override + public Set visit(RelationPredicate pred) { + return Collections.emptySet(); + } + + @Override + public Set visit(IfIntExpression intExpr) { + Set then = intExpr.thenExpr().accept(this); + then.addAll(intExpr.elseExpr().accept(this)); + return then; + } + + @Override + public Set visit(BinaryFormula binFormula) { + return Collections.emptySet(); + } + + @Override + public Set visit(ConstantFormula constant) { + return Collections.emptySet(); + } + + @Override + public Set visit(NaryIntExpression intExpr) { + return Collections.emptySet(); + } + + @Override + public Set visit(ProjectExpression project) { + return project.arity() == 0 ? factory.noneOf(project.arity()) : factory.allOf(project.arity()); + } + + @Override + public Set visit(UnaryIntExpression intExpr) { + return Relation.INTS.accept(this); + } + + @Override + public Set visit(BinaryIntExpression intExpr) { + return Relation.INTS.accept(this); + } + + @Override + public Set visit(Comprehension comprehension) { + return Collections.emptySet(); + } + + @Override + public Set visit(IntComparisonFormula intComp) { + return Collections.emptySet(); + } + + @Override + public Set visit(ComparisonFormula compFormula) { + return Collections.emptySet(); + } + + @Override + public Set visit(MultiplicityFormula multFormula) { + return Collections.emptySet(); + } +} diff --git a/Source/kodkod/src/kodkod/util/z3/VariableDetector.java b/Source/kodkod/src/kodkod/util/z3/VariableDetector.java new file mode 100644 index 0000000..03d1a37 --- /dev/null +++ b/Source/kodkod/src/kodkod/util/z3/VariableDetector.java @@ -0,0 +1,29 @@ +package kodkod.util.z3; + +import kodkod.ast.Node; +import kodkod.ast.Variable; +import kodkod.ast.visitor.AbstractVoidVisitor; + +import java.util.HashSet; +import java.util.Set; + +/** + * Created by harun on 7/13/18. + */ +public class VariableDetector extends AbstractVoidVisitor { + private Set variables = new HashSet<>(); + + @Override + protected boolean visited(Node n) { + return false; + } + + @Override + public void visit(Variable variable) { + variables.add(variable); + } + + public Set variables() { + return variables; + } +} diff --git a/Source/kodkod/src/kodkod/util/z3/Z3EliminatedFormulaConverter.java b/Source/kodkod/src/kodkod/util/z3/Z3EliminatedFormulaConverter.java new file mode 100644 index 0000000..5e8c31c --- /dev/null +++ b/Source/kodkod/src/kodkod/util/z3/Z3EliminatedFormulaConverter.java @@ -0,0 +1,1457 @@ +package kodkod.util.z3; + +import com.microsoft.z3.*; +import com.microsoft.z3.enumerations.Z3_sort_kind; +import com.sun.org.apache.xpath.internal.operations.Bool; +import jdk.nashorn.internal.ir.annotations.Ignore; +import kodkod.ast.*; +import kodkod.ast.operator.ExprOperator; +import kodkod.ast.operator.Multiplicity; +import kodkod.ast.operator.Quantifier; +import kodkod.ast.visitor.ReturnVisitor; +import kodkod.engine.fol2sat.HigherOrderDeclException; +import kodkod.instance.Bounds; +import kodkod.instance.Tuple; +import kodkod.instance.TupleSet; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Created by harun on 7/16/18. + */ +public class Z3EliminatedFormulaConverter extends Z3FormulaConverter { + + private Map objectExprMap; + + private UpperBoundFinder upperBoundFinder; + private int notCount; + private Map> upperBoundCache; + + public Z3EliminatedFormulaConverter(Context ctx, Sort UNIV, Map funcDeclMap + , Map objectExprMap, Bounds bounds, int BIT_SIZE) { + super(ctx, UNIV, funcDeclMap, objectExprMap, BIT_SIZE); + this.objectExprMap = objectExprMap; + + upperBoundFinder = new UpperBoundFinder(bounds); + upperBoundCache = new HashMap<>(); + + if (objectExprMap.entrySet().stream().anyMatch(e -> e.getKey() instanceof Integer)) { + FuncDecl intsFuncDecl = ctx.mkFuncDecl("Ints", new Sort[]{UNIV}, ctx.mkBoolSort()); + funcDeclMap.put(Relation.INTS, intsFuncDecl); + + univToInt = ctx.mkFuncDecl("toInt", UNIV, ctx.mkBitVecSort(BIT_SIZE)); + + objectExprMap.forEach(((o, expr) -> { + if (o instanceof Integer) { + goal.add((BoolExpr) ctx.mkApp(intsFuncDecl, expr)); + goal.add(ctx.mkEq(ctx.mkApp(univToInt, expr), ctx.mkBV((Integer) o, BIT_SIZE))); + } else { + try { + int i = Integer.parseInt(o.toString()); + goal.add(ctx.mkEq(ctx.mkApp(univToInt, expr), ctx.mkBV(i, BIT_SIZE))); + } + catch (NumberFormatException e) { + goal.add(ctx.mkEq(ctx.mkApp(univToInt, expr), ctx.mkBV(0, BIT_SIZE))); + } + goal.add(ctx.mkNot((BoolExpr) ctx.mkApp(intsFuncDecl, expr))); + } + })); + } + } + + @Override + public BoolExpr convert(Formula formula) { + this.notCount = 0; + return super.convert(formula); + } + + @Override + public BoolExpr visit(BinaryExpression binExpr) { + switch (binExpr.op()) { + case JOIN: + Expression leftExpression = binExpr.left(); + Expression rightExpression = binExpr.right(); + + Expr[] leftExprs = new Expr[leftExpression.arity()]; + + System.arraycopy(exprs, 0, leftExprs, 0, leftExprs.length - 1); + + Expr[] rightExprs = new Expr[rightExpression.arity()]; + + System.arraycopy(exprs, exprs.length - rightExprs.length + 1, rightExprs, 1, rightExprs.length - 1); + + if (leftExpression instanceof Variable) { + rightExprs[0] = variableExprMap.get(leftExpression); + + Expr[] temp = exprs; + exprs = rightExprs; + BoolExpr boolExpr = rightExpression.accept(this); + exprs = temp; + return boolExpr; + } else if (rightExpression instanceof Variable) { + leftExprs[leftExprs.length - 1] = variableExprMap.get(rightExpression); + Expr[] temp = exprs; + exprs = leftExprs; + BoolExpr boolExpr = leftExpression.accept(this); + exprs = temp; + return boolExpr; + } + + if (notCount % 2 == 1) { + Expr[] temp = exprs; + + Set boolExprs = new HashSet<>(); + + Set leftTupleSet = upperBoundCache.computeIfAbsent(leftExpression, e -> leftExpression.accept(upperBoundFinder)); + Set rightTupleSet = upperBoundCache.computeIfAbsent(rightExpression, e -> rightExpression.accept(upperBoundFinder)); + + leftTupleSet.forEach(tuple1 -> { + rightTupleSet.forEach(tuple2 -> { + if (tuple1.atom(tuple1.arity() - 1).equals(tuple2.atom(0))) { + Expr expr1 = objectExprMap.get(tuple2.atom(0)); + + leftExprs[leftExprs.length - 1] = expr1; + rightExprs[0] = expr1; + + exprs = leftExprs; + BoolExpr leftBoolExpr = leftExpression.accept(this); + exprs = rightExprs; + BoolExpr rightBoolExpr = rightExpression.accept(this); + + boolExprs.add(ctx.mkAnd(leftBoolExpr, rightBoolExpr)); + + } + }); + }); + + exprs = temp; + + BoolExpr[] boolExprArray = boolExprs.toArray(new BoolExpr[0]); + + return ctx.mkOr(boolExprArray); + + } else { + Expr expr; + + expr = ctx.mkConst("x!" + varCount++, UNIV); + + + leftExprs[leftExprs.length - 1] = expr; + rightExprs[0] = expr; + + Expr[] temp = exprs; + + exprs = leftExprs; + BoolExpr leftBoolExpr = leftExpression.accept(this); + exprs = rightExprs; + BoolExpr rightBoolExpr = rightExpression.accept(this); + + exprs = temp; + + return ctx.mkExists(new Expr[]{expr} + , ctx.mkAnd(leftBoolExpr, rightBoolExpr) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), ctx.mkSymbol(skolemPrefix + skolemID++)); + + } + case UNION: + BoolExpr leftBoolExpr = binExpr.left().accept(this); + BoolExpr rightBoolExpr = binExpr.right().accept(this); + + return ctx.mkOr(leftBoolExpr, rightBoolExpr); + + case INTERSECTION: + leftBoolExpr = binExpr.left().accept(this); + rightBoolExpr = binExpr.right().accept(this); + + return ctx.mkAnd(leftBoolExpr, rightBoolExpr); + + case PRODUCT: + leftExpression = binExpr.left(); + rightExpression = binExpr.right(); + + leftExprs = new Expr[leftExpression.arity()]; + System.arraycopy(exprs, 0, leftExprs, 0, leftExprs.length); + + rightExprs = new Expr[rightExpression.arity()]; + System.arraycopy(exprs, leftExpression.arity(), rightExprs, 0, rightExprs.length); + + Expr[] temp = exprs; + + exprs = leftExprs; + leftBoolExpr = leftExpression.accept(this); + exprs = rightExprs; + rightBoolExpr = rightExpression.accept(this); + + exprs = temp; + + return ctx.mkAnd(leftBoolExpr, rightBoolExpr); + + case DIFFERENCE: + leftBoolExpr = binExpr.left().accept(this); + + notCount++; + rightBoolExpr = binExpr.right().accept(this); + notCount--; + + rightBoolExpr = ctx.mkNot(rightBoolExpr); + + return ctx.mkAnd(leftBoolExpr, rightBoolExpr); + + case OVERRIDE: + BoolExpr boolExpr = binExpr.right().accept(this); + BoolExpr else_ = binExpr.left().accept(this); + + return (BoolExpr) ctx.mkITE(boolExpr, ctx.mkTrue(), else_); + + default: + + return ctx.mkFalse(); + + } + } + + @Override + public BoolExpr visit(IfExpression ifExpr) { + BoolExpr then_ = ifExpr.thenExpr().accept(this); + notCount++; + then_ = ctx.mkImplies(ifExpr.condition().accept(this), then_); + notCount--; + + BoolExpr else_ = ctx.mkOr(ifExpr.condition().accept(this), ifExpr.elseExpr().accept(this)); + + return ctx.mkAnd(then_, else_); + + } + + @Override + public BitVecExpr visit(IntConstant intConst) { + return ctx.mkBV(intConst.value(), BIT_SIZE); + } + + @Override + public BitVecExpr visit(IfIntExpression intExpr) { + // TODO: Re-think this. (notCount) + BoolExpr if_ = intExpr.condition().accept(this); + BitVecExpr then_ = intExpr.thenExpr().accept(this); + BitVecExpr else_ = intExpr.elseExpr().accept(this); + + return (BitVecExpr) ctx.mkITE(if_, then_, else_); + + } + + private FuncDecl eliminatedCardinality(Expression expression) { + int tempNotCount = notCount; + notCount = 0; + + VariableDetector variableDetector = new VariableDetector(); + expression.accept(variableDetector); + + Set variables = variableDetector.variables().stream() + .filter(v -> variableExprMap.containsKey(v)) + .collect(Collectors.toSet()); + + Map tempMap = new HashMap<>(); + + int inSize = variables.size(); + int outSize = expression.arity(); + + Sort[] inSorts = new Sort[inSize]; + Arrays.fill(inSorts, UNIV); + + FuncDecl cardinalityFunc = ctx.mkFuncDecl("#[" + expression.toString() + "]" + varCount++ + , inSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Sort[] ordSorts = new Sort[inSize + outSize]; + Arrays.fill(ordSorts, UNIV); + + FuncDecl ordFunc = ctx.mkFuncDecl("ord[" + expression.toString() + "]" + varCount++, ordSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Set upperbounds = expression.accept(upperBoundFinder); + + QuantifierEliminator.getQuantifiers(objectExprMap, upperBoundFinder, variables.toArray(new Variable[0])).forEach(map -> { + + map.forEach((variable, constExpr) -> { + Expr expr = variableExprMap.get(variable); + if (expr.isConst()) { + tempMap.put(variable, expr); + variableExprMap.put(variable, constExpr); + } + }); + + Expr[] inExprs = map.entrySet().stream().sorted(Comparator.comparingInt(a -> a.getKey().hashCode())) + .map(e -> variableExprMap.get(e.getKey())).toArray(Expr[]::new); + + Expr[] ordExprs = new Expr[ordSorts.length]; + System.arraycopy(inExprs, 0, ordExprs, 0, inSize); + + Expr[] outExprs = new Expr[outSize]; + + BitVecExpr bitVecExpr = ctx.mkBVConst("i!" + varCount++, BIT_SIZE); + + Expr[] invExprs = new Expr[inSize + 1]; + System.arraycopy(inExprs, 0, invExprs, 0, inSize); + invExprs[invExprs.length - 1] = bitVecExpr; + + // crd = 0 ⇔ ∀f : FSO, ¬isFSO(f ) + // ****************************************** // + BoolExpr first = ctx.mkImplies(ctx.mkEq(cardinalityFunc.apply(inExprs), ctx.mkBV(0, BIT_SIZE)), expression.no().accept(this)); + notCount++; + BoolExpr second = ctx.mkImplies(expression.no().accept(this), ctx.mkEq(cardinalityFunc.apply(inExprs), ctx.mkBV(0, BIT_SIZE))); + notCount--; + BoolExpr boolExprEqZero = ctx.mkAnd(first, second); + + goal.add(boolExprEqZero); + // ****************************************** // + + // ∀f : FSO | isFSO(f) ⇒ 1 ≤ ord(f ) ≤ crd + // ****************************************** // + + notCount++; + + upperbounds.forEach(tuple -> { + for (int i = inSize; i < ordExprs.length; i++) { + ordExprs[i] = objectExprMap.get(tuple.atom(i - inSize)); + } + + System.arraycopy(ordExprs, inSize, outExprs, 0, outSize); + + exprs = outExprs; + + BoolExpr boolExpr = ctx.mkImplies(expression.accept(this) + , ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), (BitVecExpr) ordFunc.apply(ordExprs)) + , ctx.mkBVSLE((BitVecExpr) ordFunc.apply(ordExprs) + , (BitVecExpr) cardinalityFunc.apply(inExprs)))); + + goal.add(boolExpr); + }); + + notCount--; + + // ****************************************** // + + // ∀i : Nat | 1 ≤ i ≤ crd ⇒ isFSO(inv(i)) + // inv = ord^−1 + // ****************************************** // + + for (int i = inSize; i < ordExprs.length; i++) { + ordExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + } + + System.arraycopy(ordExprs, inSize, outExprs, 0, outSize); + + exprs = outExprs; + + for (int i = 1; i <= upperbounds.size(); i++) { + bitVecExpr = ctx.mkBV(i, BIT_SIZE); + + BoolExpr boolExpr = ctx.mkImplies(ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), bitVecExpr) + , ctx.mkBVSLE(bitVecExpr, (BitVecExpr) cardinalityFunc.apply(inExprs))) + , ctx.mkExists(outExprs, ctx.mkAnd( + ctx.mkEq(ordFunc.apply(ordExprs), bitVecExpr) + , expression.accept(this)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null)); + + goal.add(boolExpr); + } + + final Expr[] oneToOneExprs = new Expr[inSize + outSize * 2]; + System.arraycopy(inExprs, 0, oneToOneExprs, 0, inSize); + + upperbounds.forEach(tuple1 -> { + for (int i = 0; i < outSize; i++) { + oneToOneExprs[inSize + i] = objectExprMap.get(tuple1.atom(i)); + } + upperbounds.forEach(tuple2 -> { + for (int i = 0; i < outSize; i++) { + oneToOneExprs[inSize + outSize + i] = objectExprMap.get(tuple2.atom(i)); + } + + Expr[] firstOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, firstOne, 0, firstOne.length); + + Expr[] secondOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, secondOne, 0, inSize); + System.arraycopy(oneToOneExprs, ordExprs.length, secondOne, inSize, outSize); + + BoolExpr[] eqs = new BoolExpr[outSize]; + for (int i = 0; i < outSize; i++) { + eqs[i] = ctx.mkEq(firstOne[i + inSize], secondOne[i + inSize]); + } + + BoolExpr boolExpr = ctx.mkImplies(ctx.mkEq(ordFunc.apply(firstOne), ordFunc.apply(secondOne)), ctx.mkAnd(eqs)); + + goal.add(boolExpr); + }); + }); + // ****************************************** // + + variableExprMap.putAll(tempMap); + }); + + notCount = tempNotCount; + + return cardinalityFunc; + } + + private FuncDecl eliminatedSum(Expression expression) { + int tempNotCount = notCount; + notCount = 0; + + VariableDetector variableDetector = new VariableDetector(); + expression.accept(variableDetector); + + Set variables = variableDetector.variables().stream() + .filter(v -> variableExprMap.containsKey(v)) + .collect(Collectors.toSet()); + + Map tempMap = new HashMap<>(); + + int inSize = variables.size(); + int outSize = expression.arity(); + + Sort[] inSorts = new Sort[inSize]; + Arrays.fill(inSorts, UNIV); + + FuncDecl sum = ctx.mkFuncDecl("SUM[" + expression.toString() + "]" + varCount++ + , inSorts, ctx.mkBitVecSort(BIT_SIZE)); + + FuncDecl cardinalityFunc = ctx.mkFuncDecl("#[" + expression.toString() + "]" + varCount++ + , inSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Sort[] sumSorts = new Sort[inSize + 1]; + Arrays.fill(sumSorts, UNIV); + sumSorts[sumSorts.length - 1] = ctx.mkBitVecSort(BIT_SIZE); + + FuncDecl sumFunc = ctx.mkFuncDecl("SUM_RECURSIVE[" + expression.toString() + "]" + varCount++ + , sumSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Sort[] ordSorts = new Sort[inSize + outSize]; + Arrays.fill(ordSorts, UNIV); + + FuncDecl ordFunc = ctx.mkFuncDecl("ord[" + expression.toString() + "]" + varCount++, ordSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Sort[] invSorts = new Sort[inSize + 1]; + System.arraycopy(inSorts, 0, invSorts, 0, inSize); + invSorts[invSorts.length - 1] = ctx.mkBitVecSort(BIT_SIZE); + + FuncDecl noToResultFunc = ctx.mkFuncDecl("NO[" + expression.toString() + "]" + varCount++ + , invSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Set upperbounds = expression.accept(upperBoundFinder); + + int minCount = (int) Math.min(upperbounds.size(), Math.pow(2, BIT_SIZE - 1) - 1); + + QuantifierEliminator.getQuantifiers(objectExprMap, upperBoundFinder, variables.toArray(new Variable[0])).forEach(map -> { + + map.forEach((variable, constExpr) -> { + Expr expr = variableExprMap.get(variable); + if (expr.isConst()) { + tempMap.put(variable, expr); + variableExprMap.put(variable, constExpr); + } + }); + + Expr[] inExprs = map.entrySet().stream().sorted(Comparator.comparingInt(a -> a.getKey().hashCode())) + .map(e -> variableExprMap.get(e.getKey())).toArray(Expr[]::new); + + Expr[] ordExprs = new Expr[ordSorts.length]; + System.arraycopy(inExprs, 0, ordExprs, 0, inSize); + + Expr[] outExprs = new Expr[outSize]; + + Expr[] invExprs = new Expr[inSize + 1]; + System.arraycopy(inExprs, 0, invExprs, 0, inSize); + invExprs[invExprs.length - 1] = null; + + // crd = 0 ⇔ ∀f : FSO, ¬isFSO(f ) + // ****************************************** // + + BoolExpr first = ctx.mkImplies(ctx.mkEq(cardinalityFunc.apply(inExprs), ctx.mkBV(0, BIT_SIZE)), expression.no().accept(this)); + notCount++; + BoolExpr second = ctx.mkImplies(expression.no().accept(this), ctx.mkEq(cardinalityFunc.apply(inExprs), ctx.mkBV(0, BIT_SIZE))); + notCount--; + BoolExpr boolExprEqZero = ctx.mkAnd(first, second); + + goal.add(boolExprEqZero); + // ****************************************** // + + // ∀f : FSO | isFSO(f) ⇒ 1 ≤ ord(f ) ≤ crd + // ****************************************** // + + notCount++; + + upperbounds.forEach(tuple -> { + for (int i = inSize; i < ordExprs.length; i++) { + ordExprs[i] = objectExprMap.get(tuple.atom(i - inSize)); + } + + System.arraycopy(ordExprs, inSize, outExprs, 0, outSize); + + exprs = outExprs; + + BoolExpr boolExpr = ctx.mkImplies(expression.accept(this) + , ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), (BitVecExpr) ordFunc.apply(ordExprs)) + , ctx.mkBVSLE((BitVecExpr) ordFunc.apply(ordExprs) + , (BitVecExpr) cardinalityFunc.apply(inExprs)))); + + goal.add(boolExpr); + }); + + notCount--; + + // ****************************************** // + + // ∀i : Nat | 1 ≤ i ≤ crd ⇒ isFSO(inv(i)) + // inv = ord^−1 + // ****************************************** // + + for (int i = inSize; i < ordExprs.length; i++) { + ordExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + } + + System.arraycopy(ordExprs, inSize, outExprs, 0, outSize); + + exprs = outExprs; + + for (int i = 1; i <= minCount; i++) { + BitVecExpr bitVecExpr = ctx.mkBV(i, BIT_SIZE); + + BoolExpr boolExpr = ctx.mkImplies(ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), bitVecExpr) + , ctx.mkBVSLE(bitVecExpr, (BitVecExpr) cardinalityFunc.apply(inExprs))) + , ctx.mkExists(outExprs, ctx.mkAnd( + ctx.mkEq(ordFunc.apply(ordExprs), bitVecExpr) + , expression.accept(this)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null)); + + goal.add(boolExpr); + } + + final Expr[] oneToOneExprs = new Expr[inSize + outSize * 2]; + System.arraycopy(inExprs, 0, oneToOneExprs, 0, inSize); + + upperbounds.forEach(tuple1 -> { + for (int i = 0; i < outSize; i++) { + oneToOneExprs[inSize + i] = objectExprMap.get(tuple1.atom(i)); + } + upperbounds.forEach(tuple2 -> { + for (int i = 0; i < outSize; i++) { + oneToOneExprs[inSize + outSize + i] = objectExprMap.get(tuple2.atom(i)); + } + + Expr[] firstOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, firstOne, 0, firstOne.length); + + Expr[] secondOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, secondOne, 0, inSize); + System.arraycopy(oneToOneExprs, ordExprs.length, secondOne, inSize, outSize); + + BoolExpr[] eqs = new BoolExpr[outSize]; + for (int i = 0; i < outSize; i++) { + eqs[i] = ctx.mkEq(firstOne[i + inSize], secondOne[i + inSize]); + } + + BoolExpr boolExpr = ctx.mkImplies(ctx.mkEq(ordFunc.apply(firstOne), ordFunc.apply(secondOne)), ctx.mkAnd(eqs)); + + goal.add(boolExpr); + }); + }); + // ****************************************** // + + for (int i = 1; i <= minCount; i++) { + BitVecExpr bitVecExpr = ctx.mkBV(i, BIT_SIZE); + invExprs[invExprs.length - 1] = bitVecExpr; + + upperbounds.forEach(tuple -> { + for (int j = 0; j < outSize; j++) { + outExprs[j] = objectExprMap.get(tuple.atom(j)); + ordExprs[inSize + j] = outExprs[j]; + } + + BoolExpr boolExpr = ctx.mkImplies(ctx.mkEq(ordFunc.apply(ordExprs), bitVecExpr) + , ctx.mkEq(noToResultFunc.apply(invExprs), univToInt == null ? ctx.mkBV(0, BIT_SIZE) : univToInt.apply(outExprs))); + + goal.add(boolExpr); + }); + + Expr[] exprsPlusBVminus1 = new Expr[invExprs.length]; + System.arraycopy(inExprs, 0, exprsPlusBVminus1, 0, inSize); + exprsPlusBVminus1[exprsPlusBVminus1.length - 1] = ctx.mkBV(i + 1, BIT_SIZE); + + BoolExpr boolExpr = ctx.mkEq(sumFunc.apply(invExprs) + , ctx.mkITE(ctx.mkBVSLE(bitVecExpr, (BitVecExpr) cardinalityFunc.apply(inExprs)) + , ctx.mkBVAdd((BitVecExpr) sumFunc.apply(exprsPlusBVminus1), (BitVecExpr) noToResultFunc.apply(invExprs)) + , ctx.mkBV(0, BIT_SIZE))); + + goal.add(boolExpr); + } + + Expr[] sumWithCardExprs = new Expr[invSorts.length]; + System.arraycopy(inExprs, 0, sumWithCardExprs, 0, inExprs.length); + sumWithCardExprs[sumWithCardExprs.length - 1] = ctx.mkBV(1, BIT_SIZE); + + BoolExpr boolExprSumEq = ctx.mkEq(sum.apply(inExprs), sumFunc.apply(sumWithCardExprs)); + + goal.add(boolExprSumEq); + + variableExprMap.putAll(tempMap); + }); + + intExprFuncMap.put(expression.count().toString(), cardinalityFunc); + + notCount = tempNotCount; + + return sum; + } + + @Override + public BitVecExpr visit(ExprToIntCast exprToIntCast) { + switch (exprToIntCast.op()) { + case CARDINALITY: + Expression expression = exprToIntCast.expression(); + + if (expression instanceof Variable) + return ctx.mkBV(1, BIT_SIZE); + + FuncDecl func = intExprFuncMap.computeIfAbsent(exprToIntCast.toString(), e -> eliminatedCardinality(expression)); + + VariableDetector variableDetector = new VariableDetector(); + expression.accept(variableDetector); + Expr[] usedExprs = variableDetector.variables().stream().sorted(Comparator.comparingInt(Object::hashCode)) + .map(v -> variableExprMap.get(v)).filter(Objects::nonNull).toArray(Expr[]::new); + + return (BitVecExpr) func.apply(usedExprs); + case SUM: + expression = exprToIntCast.expression(); + + if (expression instanceof Variable && univToInt != null) + return (BitVecExpr) univToInt.apply(variableExprMap.get(expression)); + + func = intExprFuncMap.computeIfAbsent(exprToIntCast.toString(), e -> eliminatedSum(expression)); + + variableDetector = new VariableDetector(); + expression.accept(variableDetector); + usedExprs = variableDetector.variables().stream().sorted(Comparator.comparingInt(Object::hashCode)) + .map(v -> variableExprMap.get(v)).filter(Objects::nonNull).toArray(Expr[]::new); + + return (BitVecExpr) func.apply(usedExprs); + default: + return ctx.mkBV(0, BIT_SIZE); + } + } + + @Override + public BitVecExpr visit(NaryIntExpression naryIntExpression) { + Iterator iterator = naryIntExpression.iterator(); + if (iterator.hasNext()) { + BitVecExpr expr = iterator.next().accept(this); + switch (naryIntExpression.op()) { + case MULTIPLY: + while (iterator.hasNext()) { + BitVecExpr next = iterator.next().accept(this); + expr = ctx.mkBVMul(expr, next); + + } + return expr; + case PLUS: + while (iterator.hasNext()) { + BitVecExpr next = iterator.next().accept(this); + expr = ctx.mkBVAdd(expr, next); + + } + return expr; + case AND: + while (iterator.hasNext()) { + BitVecExpr next = iterator.next().accept(this); + expr = ctx.mkBVAND(expr, next); + + } + return expr; + case OR: + while (iterator.hasNext()) { + BitVecExpr next = iterator.next().accept(this); + expr = ctx.mkBVOR(expr, next); + + } + return expr; + } + } + return ctx.mkBV(0, BIT_SIZE); + + } + + @Override + public BitVecExpr visit(BinaryIntExpression binaryIntExpression) { + BitVecExpr left = binaryIntExpression.left().accept(this); + BitVecExpr right = binaryIntExpression.right().accept(this); + switch (binaryIntExpression.op()) { + case AND: + return ctx.mkBVAND(left, right); + case OR: + return ctx.mkBVOR(left, right); + case SHA: + return ctx.mkBVASHR(left, right); + case SHL: + return ctx.mkBVSHL(left, right); + case SHR: + return ctx.mkBVLSHR(left, right); + case XOR: + return ctx.mkBVXOR(left, right); + case PLUS: + return ctx.mkBVAdd(left, right); + case MINUS: + return ctx.mkBVSub(left, right); + case DIVIDE: + return ctx.mkBVSDiv(left, right); + case MODULO: + return ctx.mkBVSMod(left, right); + case MULTIPLY: + return ctx.mkBVMul(left, right); + default: + return ctx.mkBV(0, BIT_SIZE); + } + + } + + @Override + public BitVecExpr visit(UnaryIntExpression intExpr) { + BitVecExpr expr = intExpr.intExpr().accept(this); + switch (intExpr.op()) { + case SGN: + return (BitVecExpr) ctx.mkITE(ctx.mkEq(expr, ctx.mkBV(0, BIT_SIZE)) + , ctx.mkBV(0, BIT_SIZE) + , ctx.mkITE(ctx.mkBVSGT(expr, ctx.mkBV(0, BIT_SIZE)) + , ctx.mkBV(1, BIT_SIZE) + , ctx.mkBV(-1, BIT_SIZE))); + case NOT: + return ctx.mkBVNot(expr); + case NEG: + return ctx.mkBVNeg(expr); + case ABS: + return (BitVecExpr) ctx.mkITE(ctx.mkBVSLT(expr, ctx.mkBV(0, BIT_SIZE)), ctx.mkBVNeg(expr), expr); + default: + return ctx.mkBV(0, BIT_SIZE); + } + + } + + private FuncDecl sum(SumExpression sumExpression) { + + int tempNotCount = notCount; + notCount = 0; + + VariableDetector variableDetector = new VariableDetector(); + sumExpression.accept(variableDetector); + + List outerVariables = new ArrayList<>(variableDetector.variables()); + List declVariables = new ArrayList<>(); + + Set declExpressionSet = new HashSet<>(); + Set declFormulaSet = new HashSet<>(); + + sumExpression.decls().forEach(decl -> { + if (decl.multiplicity() != Multiplicity.ONE) + throw new HigherOrderDeclException(decl); + if (decl.expression().arity() != 1) + throw new RuntimeException(decl + ": decl.expression.arity != 1"); + declVariables.add(decl.variable()); + declExpressionSet.add(decl.expression()); + declFormulaSet.add(decl.variable().in(decl.expression())); + }); + + outerVariables.removeAll(declVariables); + + outerVariables.sort(Comparator.comparingInt(Object::hashCode)); + + Map tempMap = new HashMap<>(variableExprMap); + + Expr[] declExprs = new Expr[declVariables.size()]; + Expr[] outerExprs = new Expr[outerVariables.size()]; + + int inSize = outerVariables.size(); + int outSize = declVariables.size(); + + Sort[] inSorts = new Sort[inSize]; + Arrays.fill(inSorts, UNIV); + + FuncDecl sum = ctx.mkFuncDecl("SUM[" + sumExpression.toString() + "]" + varCount++ + , inSorts, ctx.mkBitVecSort(BIT_SIZE)); + + FuncDecl cardinalityFunc = ctx.mkFuncDecl("#[" + sumExpression.toString() + "]" + varCount++ + , inSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Sort[] sumSorts = new Sort[inSize + 1]; + Arrays.fill(sumSorts, UNIV); + sumSorts[sumSorts.length - 1] = ctx.mkBitVecSort(BIT_SIZE); + + FuncDecl sumRecursive = ctx.mkFuncDecl("SUM_RECURSIVE[" + sumExpression.toString() + "]" + varCount++ + , sumSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Sort[] ordSorts = new Sort[inSize + outSize]; + Arrays.fill(ordSorts, UNIV); + + FuncDecl ordFunc = ctx.mkFuncDecl("ord[" + sumExpression.toString() + "]" + varCount++, ordSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Sort[] invSorts = new Sort[inSize + 1]; + System.arraycopy(inSorts, 0, invSorts, 0, inSize); + invSorts[invSorts.length - 1] = ctx.mkBitVecSort(BIT_SIZE); + + Set> outerMapSet = QuantifierEliminator.getQuantifiers(objectExprMap, upperBoundFinder, outerVariables.toArray(new Variable[0])); + Set> declMapSet = QuantifierEliminator.getQuantifiers(objectExprMap, upperBoundFinder, declVariables.toArray(new Variable[0])); + + FuncDecl generalFunc = ctx.mkFuncDecl("PARTIAL_SUM[" + sumExpression.toString() + "]" + varCount++, invSorts, ctx.mkBitVecSort(BIT_SIZE)); + + int minCount = (int) Math.min(Math.pow(2, BIT_SIZE - 1) - 1, declMapSet.size() * outerMapSet.size()); + + outerMapSet.forEach(outerMap -> { + for (int i = 0; i < outerExprs.length; i++) { + outerExprs[i] = outerMap.get(outerVariables.get(i)); + variableExprMap.put(outerVariables.get(i), outerExprs[i]); + } + + Expr[] invExprs = new Expr[inSize + 1]; + System.arraycopy(outerExprs, 0, invExprs, 0, inSize); + invExprs[invExprs.length - 1] = null; + + Expr[] sumRecursiveExprsPlus1 = new Expr[invExprs.length]; + System.arraycopy(outerExprs, 0, sumRecursiveExprsPlus1, 0, inSize); + sumRecursiveExprsPlus1[sumRecursiveExprsPlus1.length - 1] = null; + + // crd = 0 ⇔ ∀f : FSO, ¬isFSO(f ) + // ****************************************** // + BoolExpr first = ctx.mkImplies(ctx.mkEq(cardinalityFunc.apply(outerExprs), ctx.mkBV(0, BIT_SIZE)), Expression.union(declExpressionSet).no().accept(this)); + notCount++; + BoolExpr second = ctx.mkImplies(Expression.union(declExpressionSet).no().accept(this), ctx.mkEq(cardinalityFunc.apply(outerExprs), ctx.mkBV(0, BIT_SIZE))); + notCount--; + BoolExpr boolExprEqZero = ctx.mkAnd(first, second); + + goal.add(boolExprEqZero); + // ****************************************** // + + // ∀i : Nat | 1 ≤ i ≤ crd ⇒ isFSO(inv(i)) + // inv = ord^−1 + + Expr[] ordExprs = new Expr[ordSorts.length]; + System.arraycopy(outerExprs, 0, ordExprs, 0, inSize); + for (int i = inSize; i < ordExprs.length; i++) { + ordExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + declExprs[i - inSize] = ordExprs[i]; + } + + for (int i = 0; i < declExprs.length; i++) { + variableExprMap.put(declVariables.get(i), declExprs[i]); + } + + for (int i = 1; i <= minCount; i++) { + BitVecExpr bitVecExpr = ctx.mkBV(i, BIT_SIZE); + invExprs[invExprs.length - 1] = bitVecExpr; + sumRecursiveExprsPlus1[sumRecursiveExprsPlus1.length - 1] = ctx.mkBV(i + 1, BIT_SIZE); + + BoolExpr boolExprInv = ctx.mkImplies(ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), bitVecExpr) + , ctx.mkBVSLE(bitVecExpr, (BitVecExpr) cardinalityFunc.apply(outerExprs))) + , ctx.mkExists(declExprs, ctx.mkAnd( + ctx.mkEq(ordFunc.apply(ordExprs), bitVecExpr) + , Formula.and(declFormulaSet).accept(this)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null)); + + goal.add(boolExprInv); + + BoolExpr boolExprSumRecursive = ctx.mkEq(sumRecursive.apply(invExprs) + , ctx.mkITE(ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), bitVecExpr) + , ctx.mkBVSLE(bitVecExpr, (BitVecExpr) cardinalityFunc.apply(outerExprs))) + , ctx.mkBVAdd((BitVecExpr) generalFunc.apply(invExprs), (BitVecExpr) sumRecursive.apply(sumRecursiveExprsPlus1)) + , ctx.mkBV(0, BIT_SIZE))); + + goal.add(boolExprSumRecursive); + } + + // ****************************************** // + + Expr[] outerExprsPlus1 = new Expr[outerExprs.length + 1]; + System.arraycopy(outerExprs, 0, outerExprsPlus1, 0, outerExprs.length); + outerExprsPlus1[outerExprsPlus1.length - 1] = ctx.mkBV(1, BIT_SIZE); + + BoolExpr boolExprSum = ctx.mkEq(sum.apply(outerExprs), sumRecursive.apply(outerExprsPlus1)); + + goal.add(boolExprSum); + + declMapSet.forEach(declMap -> { + for (int i = 0; i < declExprs.length; i++) { + declExprs[i] = declMap.get(declVariables.get(i)); + variableExprMap.put(declVariables.get(i), declExprs[i]); + } + + BitVecExpr generalSum = sumExpression.intExpr().accept(this); + + System.arraycopy(declExprs, 0, ordExprs, inSize, outSize); + + // ∀f : FSO | isFSO(f) ⇒ 1 ≤ ord(f ) ≤ crd + // ****************************************** // + + notCount++; + BoolExpr boolExprOrd = ctx.mkImplies(Formula.and(declFormulaSet).accept(this) + , ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), (BitVecExpr) ordFunc.apply(ordExprs)) + , ctx.mkBVSLE((BitVecExpr) ordFunc.apply(ordExprs) + , (BitVecExpr) cardinalityFunc.apply(outerExprs)))); + notCount--; + + goal.add(boolExprOrd); + // ****************************************** // + + Expr[] oneToOneExprs = new Expr[inSize + outSize * 2]; + System.arraycopy(ordExprs, 0, oneToOneExprs, 0, ordExprs.length); + + declMapSet.forEach(declMap2 -> { + for (int i = 0; i < declExprs.length; i++) { + oneToOneExprs[i + ordExprs.length] = declMap2.get(declVariables.get(i)); + } + + Expr[] firstOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, firstOne, 0, firstOne.length); + + Expr[] secondOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, secondOne, 0, inSize); + System.arraycopy(oneToOneExprs, ordExprs.length, secondOne, inSize, outSize); + + BoolExpr[] eqs = new BoolExpr[outSize]; + for (int i = 0; i < outSize; i++) { + eqs[i] = ctx.mkEq(firstOne[i + inSize], secondOne[i + inSize]); + } + + BoolExpr boolExprOneToOne = ctx.mkImplies(ctx.mkEq(ordFunc.apply(firstOne), ordFunc.apply(secondOne)) + , ctx.mkAnd(eqs)); + + goal.add(boolExprOneToOne); + }); + + for (int i = 1; i <= minCount; i++) { + BitVecExpr bitVecExpr = ctx.mkBV(i, BIT_SIZE); + invExprs[invExprs.length - 1] = bitVecExpr; + + sumRecursiveExprsPlus1[sumRecursiveExprsPlus1.length - 1] = ctx.mkBV(i + 1, BIT_SIZE); + + BoolExpr boolExprGeneral = ctx.mkImplies(ctx.mkEq(ordFunc.apply(ordExprs), bitVecExpr) + , ctx.mkEq(generalFunc.apply(invExprs), generalSum)); + + goal.add(boolExprGeneral); + } + + }); + }); + + intExprFuncMap.put(sumExpression.toString(), sum); + + variableExprMap = tempMap; + notCount = tempNotCount; + + return sum; + } + + @Override + public BitVecExpr visit(SumExpression sumExpression) { + VariableDetector variableDetector = new VariableDetector(); + sumExpression.accept(variableDetector); + + List outerVariables = new ArrayList<>(variableDetector.variables()); + + sumExpression.decls().forEach(decl -> { + outerVariables.remove(decl.variable()); + }); + + outerVariables.sort(Comparator.comparingInt(Object::hashCode)); + + Expr[] inExpr = outerVariables.stream().map(v -> variableExprMap.get(v)).toArray(Expr[]::new); + + return (BitVecExpr) intExprFuncMap.computeIfAbsent(sumExpression.toString(), s -> sum(sumExpression)).apply(inExpr); + } + + @Override + public BoolExpr visit(IntComparisonFormula intComparisonFormula) { + BitVecExpr left; + BitVecExpr right; + switch (intComparisonFormula.op()) { + case EQ: + left = intComparisonFormula.left().accept(this); + right = intComparisonFormula.right().accept(this); + return ctx.mkEq(left, right); + case GT: + left = intComparisonFormula.left().accept(this); + right = intComparisonFormula.right().accept(this); + return ctx.mkBVSGT(left, right); + case LT: + left = intComparisonFormula.left().accept(this); + right = intComparisonFormula.right().accept(this); + return ctx.mkBVSLT(left, right); + case GTE: + left = intComparisonFormula.left().accept(this); + right = intComparisonFormula.right().accept(this); + return ctx.mkBVSGE(left, right); + case LTE: + left = intComparisonFormula.left().accept(this); + right = intComparisonFormula.right().accept(this); + return ctx.mkBVSLE(left, right); + default: + return ctx.mkFalse(); + } + + } + + @Override + public BoolExpr visit(QuantifiedFormula quantifiedFormula) { + int exprsSize = quantifiedFormula.decls().size(); + + if ((quantifiedFormula.quantifier() == Quantifier.ALL && notCount % 2 == 0) || + (quantifiedFormula.quantifier() == Quantifier.SOME && notCount % 2 == 1)) { + BoolExpr[] ands = new BoolExpr[exprsSize]; + + Expr[] temp = exprs; + + quantifiedFormula.accept(upperBoundFinder); + + Variable[] variables = new Variable[quantifiedFormula.decls().size()]; + for (int i = 0; i < quantifiedFormula.decls().size(); i++) { + variables[i] = quantifiedFormula.decls().get(i).variable(); + } + Set> q = QuantifierEliminator.getQuantifiers(objectExprMap, upperBoundFinder, variables); + + Set boolExprs = new HashSet<>(); + q.forEach(map -> { + variableExprMap.putAll(map); + BoolExpr boolExpr = quantifiedFormula.formula().accept(this); + notCount++; + for (int i = 0; i < exprsSize; i++) { + Decl decl = quantifiedFormula.decls().get(i); + ands[i] = decl.accept(this); + } + notCount--; + switch (quantifiedFormula.quantifier()) { + case ALL: + boolExpr = ctx.mkImplies(ctx.mkAnd(ands), boolExpr); + break; + case SOME: + boolExpr = ctx.mkAnd(ctx.mkAnd(ands), boolExpr); + break; + } + + boolExprs.add(boolExpr); + }); + + exprs = temp; + + BoolExpr[] boolExprArray = boolExprs.toArray(new BoolExpr[0]); + + return quantifiedFormula.quantifier() == Quantifier.ALL ? ctx.mkAnd(boolExprArray) : ctx.mkOr(boolExprArray); + } + else { + Expr[] exprs1 = new Expr[exprsSize]; + BoolExpr[] ands = new BoolExpr[exprsSize]; + + for (int i = 0; i < exprsSize; i++) { + Decl decl = quantifiedFormula.decls().get(i); + exprs1[i] = ctx.mkConst(decl.variable().name(), UNIV); + variableExprMap.put(decl.variable(), exprs1[i]); + } + + notCount++; + for (int i = 0; i < exprsSize; i++) { + Decl decl = quantifiedFormula.decls().get(i); + ands[i] = decl.accept(this); + } + notCount--; + + Expr[] temp = exprs; + + exprs = exprs1; + BoolExpr boolExpr = quantifiedFormula.formula().accept(this); + + exprs = temp; + + return quantifiedFormula.quantifier() == Quantifier.SOME + ? ctx.mkExists(exprs1 + , ctx.mkAnd(ctx.mkAnd(ands), boolExpr) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++) + , ctx.mkSymbol(skolemPrefix + skolemID++)) + : ctx.mkForall(exprs1 + , ctx.mkImplies(ctx.mkAnd(ands), boolExpr) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++) + , ctx.mkSymbol(skolemPrefix + skolemID++)); + } + + } + + @Override + public BoolExpr visit(BinaryFormula binFormula) { + BoolExpr left; + BoolExpr right; + switch (binFormula.op()) { + case IMPLIES: + notCount++; + left = binFormula.left().accept(this); + notCount--; + right = binFormula.right().accept(this); + return ctx.mkImplies(left, right); + case IFF: + notCount++; + left = binFormula.left().accept(this); + notCount--; + right = binFormula.right().accept(this); + BoolExpr first = ctx.mkImplies(left, right); + + left = binFormula.left().accept(this); + notCount++; + right = binFormula.right().accept(this); + notCount--; + BoolExpr second = ctx.mkImplies(right, left); + return ctx.mkAnd(first, second); + case OR: + left = binFormula.left().accept(this); + right = binFormula.right().accept(this); + return ctx.mkOr(left, right); + case AND: + left = binFormula.left().accept(this); + right = binFormula.right().accept(this); + return ctx.mkAnd(left, right); + default: + return ctx.mkFalse(); + } + + } + + @Override + public BoolExpr visit(NotFormula not) { + notCount++; + BoolExpr boolExpr = not.formula().accept(this); + notCount--; + return ctx.mkNot(boolExpr); + } + + @Override + public BoolExpr visit(ComparisonFormula compFormula) { + switch (compFormula.op()) { + case EQUALS: + Expr[] exprs1; + if (compFormula.left() instanceof Variable) { + if (compFormula.right() instanceof Variable) { + return ctx.mkEq(variableExprMap.get(compFormula.left()), variableExprMap.get(compFormula.right())); + } + else { + Variable variable = Variable.unary("x!" + varCount++); + return variable.eq(compFormula.left()).forAll(variable.oneOf(compFormula.right())).accept(this); + } + } + else if (compFormula.right() instanceof Variable) { + Variable variable = Variable.unary("x!" + varCount++); + return variable.eq(compFormula.right()).forAll(variable.oneOf(compFormula.left())).accept(this); + } + + Expr[] temp = exprs; + + if (notCount % 2 == 0) { + Set boolExprs = new HashSet<>(); + + Set tupleSet = new HashSet<>(upperBoundCache.computeIfAbsent(compFormula.left() + , e -> compFormula.left().accept(upperBoundFinder))); + tupleSet.addAll(upperBoundCache.computeIfAbsent(compFormula.right() + , e -> compFormula.right().accept(upperBoundFinder))); + + tupleSet.forEach(tuple -> { + exprs = new Expr[tuple.arity()]; + for (int i = 0; i < tuple.arity(); i++) { + exprs[i] = objectExprMap.get(tuple.atom(i)); + } + + notCount++; + BoolExpr left = compFormula.left().accept(this); + notCount--; + BoolExpr right = compFormula.right().accept(this); + + BoolExpr first = ctx.mkImplies(left, right); + + left = compFormula.left().accept(this); + notCount++; + right = compFormula.right().accept(this); + notCount--; + + BoolExpr second = ctx.mkImplies(right, left); + + boolExprs.add(ctx.mkAnd(first, second)); + + }); + + exprs = temp; + return ctx.mkAnd(boolExprs.toArray(new BoolExpr[0])); + } + else { + exprs1 = new Expr[compFormula.left().arity()]; + for (int i = 0; i < exprs1.length; i++) { + exprs1[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + + exprs = exprs1; + + notCount++; + BoolExpr left = compFormula.left().accept(this); + notCount--; + BoolExpr right = compFormula.right().accept(this); + + BoolExpr first = ctx.mkImplies(left, right); + + left = compFormula.left().accept(this); + notCount++; + right = compFormula.right().accept(this); + notCount--; + + BoolExpr second = ctx.mkImplies(right, left); + + exprs = temp; + + return ctx.mkForall(exprs1, ctx.mkAnd(first, second) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + } + + case SUBSET: + if (compFormula.left() instanceof Variable) { + if (compFormula.right() instanceof Variable) { + return ctx.mkEq(variableExprMap.get(compFormula.left()), variableExprMap.get(compFormula.right())); + + } else { + exprs1 = new Expr[compFormula.left().arity()]; + exprs1[0] = variableExprMap.get(compFormula.left()); + + temp = exprs; + + exprs = exprs1; + BoolExpr boolExpr = compFormula.right().accept(this); + + exprs = temp; + + return boolExpr; + } + } else if (compFormula.right() instanceof Variable) { + Variable variable = Variable.unary("x!" + varCount++); + return variable.eq(compFormula.right()).forAll(variable.oneOf(compFormula.left())).accept(this); + } + + temp = exprs; + + if (notCount % 2 == 0) { + Set boolExprs = new HashSet<>(); + upperBoundCache.computeIfAbsent(compFormula.left(), e -> compFormula.left().accept(upperBoundFinder)).forEach(tuple -> { + exprs = new Expr[tuple.arity()]; + for (int i = 0; i < tuple.arity(); i++) { + exprs[i] = objectExprMap.get(tuple.atom(i)); + } + + notCount++; + BoolExpr left = compFormula.left().accept(this); + notCount--; + BoolExpr right = compFormula.right().accept(this); + + boolExprs.add(ctx.mkImplies(left, right)); + + }); + + exprs = temp; + + return ctx.mkAnd(boolExprs.toArray(new BoolExpr[0])); + } + else { + exprs1 = new Expr[compFormula.left().arity()]; + for (int i = 0; i < exprs1.length; i++) { + exprs1[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + + exprs = exprs1; + + notCount++; + BoolExpr left = compFormula.left().accept(this); + notCount--; + + BoolExpr right = compFormula.right().accept(this); + + exprs = temp; + + return ctx.mkForall(exprs1 + , ctx.mkImplies(left, right) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + } + default: + return ctx.mkFalse(); + + } + } + + @Override + public BoolExpr visit(MultiplicityFormula multiplicityFormula) { + switch (multiplicityFormula.multiplicity()) { + case SOME: + Expr[] temp = exprs; + + if (notCount % 2 == 0) { + Expr[] exprs1 = new Expr[multiplicityFormula.expression().arity()]; + for (int i = 0; i < exprs1.length; i++) { + exprs1[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + + exprs = exprs1; + BoolExpr boolExpr = multiplicityFormula.expression().accept(this); + + exprs = temp; + return ctx.mkExists(exprs1, boolExpr + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), ctx.mkSymbol(skolemPrefix + skolemID++)); + } + else { + Set boolExprs = new HashSet<>(); + + upperBoundCache.computeIfAbsent(multiplicityFormula.expression() + , e -> multiplicityFormula.expression().accept(upperBoundFinder)) + .forEach(tuple -> { + exprs = new Expr[tuple.arity()]; + for (int i = 0; i < tuple.arity(); i++) { + exprs[i] = objectExprMap.get(tuple.atom(i)); + } + boolExprs.add(multiplicityFormula.expression().accept(this)); + }); + + exprs = temp; + + return ctx.mkOr(boolExprs.toArray(new BoolExpr[0])); + } + + case NO: + temp = exprs; + + if (notCount % 2 == 0) { + Set boolExprs = new HashSet<>(); + upperBoundCache.computeIfAbsent(multiplicityFormula.expression() + , e -> multiplicityFormula.expression().accept(upperBoundFinder)) + .forEach(tuple -> { + exprs = new Expr[tuple.arity()]; + for (int i = 0; i < tuple.arity(); i++) { + exprs[i] = objectExprMap.get(tuple.atom(i)); + } + notCount++; + BoolExpr b = multiplicityFormula.expression().accept(this); + notCount--; + + boolExprs.add(ctx.mkNot(b)); + + }); + + exprs = temp; + + return ctx.mkAnd(boolExprs.toArray(new BoolExpr[0])); + } + else { + Expr[]exprs1 = new Expr[multiplicityFormula.expression().arity()]; + if (multiplicityFormula.expression() instanceof IntToExprCast) { + for (int i = 0; i < exprs1.length; i++) { + exprs1[i] = ctx.mkBVConst("i!" + (varCount++), BIT_SIZE); + } + } + else { + for (int i = 0; i < exprs1.length; i++) { + exprs1[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + } + + exprs = exprs1; + + notCount++; + BoolExpr boolExpr = multiplicityFormula.expression().accept(this); + notCount--; + + exprs = temp; + + return ctx.mkNot(ctx.mkExists(exprs1, boolExpr + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), ctx.mkSymbol(skolemPrefix + skolemID++))); + } + case ONE: + BoolExpr some = multiplicityFormula.expression().some().accept(this); + BoolExpr lone = multiplicityFormula.expression().lone().accept(this); + return ctx.mkAnd(some, lone); + + case LONE: + temp = exprs; + + if (notCount % 2 == 0) { + Set boolExprs = new HashSet<>(); + + Set tupleSet = upperBoundCache.computeIfAbsent(multiplicityFormula.expression() + , e -> multiplicityFormula.expression().accept(upperBoundFinder)); + + notCount++; + + tupleSet.forEach(tuple -> { + exprs = new Expr[tuple.arity()]; + for (int i = 0; i < tuple.arity(); i++) { + exprs[i] = objectExprMap.get(tuple.atom(i)); + } + + BoolExpr b1 = multiplicityFormula.expression().accept(this); + + Expr[] exprs2 = exprs; + + tupleSet.forEach(tuple2 -> { + exprs = new Expr[tuple2.arity()]; + for (int i = 0; i < tuple2.arity(); i++) { + exprs[i] = objectExprMap.get(tuple2.atom(i)); + } + + BoolExpr b2 = multiplicityFormula.expression().accept(this); + + BoolExpr[] eqs = new BoolExpr[exprs.length]; + for (int i = 0; i < eqs.length; i++) { + eqs[i] = ctx.mkEq(exprs[i], exprs2[i]); + + } + boolExprs.add(ctx.mkImplies(ctx.mkAnd(b1, b2), ctx.mkAnd(eqs))); + + }); + }); + + notCount--; + + exprs = temp; + return ctx.mkAnd(boolExprs.toArray(new BoolExpr[0])); + } + else { + Expr[] exprs1 = new Expr[multiplicityFormula.expression().arity()]; + for (int i = 0; i < exprs1.length; i++) { + exprs1[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + Expr[] exprs2 = new Expr[multiplicityFormula.expression().arity()]; + for (int i = 0; i < exprs1.length; i++) { + exprs2[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + BoolExpr[] eqs = new BoolExpr[exprs1.length]; + for (int i = 0; i < eqs.length; i++) { + eqs[i] = ctx.mkEq(exprs1[i], exprs2[i]); + } + + Expr[] allExprs = new Expr[exprs1.length + exprs2.length]; + System.arraycopy(exprs1, 0, allExprs, 0, exprs1.length); + System.arraycopy(exprs2, 0, allExprs, exprs1.length, exprs2.length); + + notCount++; + + exprs = exprs1; + BoolExpr boolExpr1 = multiplicityFormula.expression().accept(this); + exprs = exprs2; + BoolExpr boolExpr2 = multiplicityFormula.expression().accept(this); + + notCount--; + + exprs = temp; + + return ctx.mkForall(allExprs + , ctx.mkImplies(ctx.mkAnd(boolExpr1, boolExpr2), ctx.mkAnd(eqs)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + } + default: + return ctx.mkFalse(); + + } + } +} diff --git a/Source/kodkod/src/kodkod/util/z3/Z3FormulaConverter.java b/Source/kodkod/src/kodkod/util/z3/Z3FormulaConverter.java new file mode 100644 index 0000000..3f1d863 --- /dev/null +++ b/Source/kodkod/src/kodkod/util/z3/Z3FormulaConverter.java @@ -0,0 +1,675 @@ +package kodkod.util.z3; + +import com.microsoft.z3.*; +import kodkod.ast.*; +import kodkod.ast.operator.Multiplicity; +import kodkod.ast.visitor.ReturnVisitor; +import kodkod.engine.fol2sat.HigherOrderDeclException; +import kodkod.instance.Bounds; + +import java.util.*; +import java.util.stream.Collectors; + +public abstract class Z3FormulaConverter implements ReturnVisitor { + + static final String quantifierPrefix = "q!"; + static final String skolemPrefix = "s!"; + + int BIT_SIZE; + + int quantifierID; + int skolemID; + + Context ctx; + Map funcDeclMap; + Sort UNIV; + FuncDecl univToInt; + + Map intExprFuncMap; + + Map variableExprMap; + Expr[] exprs; + int varCount; + + Set goal; + + Map createdRelations; + + public Z3FormulaConverter(Context ctx, Sort UNIV, Map funcDeclMap + , Map objectExprMap, int BIT_SIZE) { + this.ctx = ctx; + this.funcDeclMap = funcDeclMap; + this.UNIV = UNIV; + this.BIT_SIZE = BIT_SIZE; + + this.variableExprMap = new HashMap<>(); + this.exprs = null; + this.varCount = 0; + this.quantifierID = 0; + this.skolemID = 0; + + intExprFuncMap = new HashMap<>(); + + this.goal = new HashSet<>(); + createdRelations = new HashMap<>(); + } + + public BoolExpr convert(Formula formula) { + this.exprs = new Expr[0]; + this.varCount = 0; + this.variableExprMap.clear(); + return formula.accept(this); + } + + public Set getCreatedBoolExpressions() { + return goal; + } + + @Override + public BoolExpr visit(Decls decls) { + BoolExpr[] boolExprs = new BoolExpr[decls.size()]; + for (int i = 0; i < decls.size(); i++) { + boolExprs[i] = decls.get(i).accept(this); + } + return ctx.mkAnd(boolExprs); + } + + @Override + public BoolExpr visit(Decl decl) { + if (!decl.multiplicity().equals(Multiplicity.ONE)) + throw new HigherOrderDeclException(decl); + if (decl.expression().arity() != 1) + throw new RuntimeException(decl + ": decl.expression.arity != 1"); + return decl.variable().in(decl.expression()).accept(this); + } + + @Override + public BoolExpr visit(Relation relation) { + return (BoolExpr) ctx.mkApp(funcDeclMap.get(relation), exprs); + } + + @Override + public BoolExpr visit(Variable variable) { + return ctx.mkEq(variableExprMap.get(variable), exprs[0]); + } + + @Override + public BoolExpr visit(ConstantExpression constExpr) { + if (constExpr == Relation.IDEN) { + return exprs.length == 2 ? ctx.mkEq(exprs[0], exprs[1]) : ctx.mkFalse(); + } + if (constExpr == Relation.NONE) { + return exprs.length == 0 ? ctx.mkTrue() : ctx.mkFalse(); + } + if (constExpr == Relation.UNIV) { + return exprs.length == 1 ? ctx.mkTrue() : ctx.mkFalse(); + } + + FuncDecl funcDecl = funcDeclMap.get(constExpr); + return funcDecl == null ? ctx.mkFalse() : (BoolExpr) ctx.mkApp(funcDecl, exprs); + } + + @Override + public BoolExpr visit(UnaryExpression unaryExpr) { + switch (unaryExpr.op()) { + case TRANSPOSE: + Expr[] temp = exprs; + exprs = new Expr[] {exprs[1], exprs[0]}; + BoolExpr boolExpr = unaryExpr.expression().accept(this); + exprs = temp; + return boolExpr; + case REFLEXIVE_CLOSURE: + FuncDecl funcDecl = funcDeclMap.computeIfAbsent(createdRelations.computeIfAbsent(unaryExpr.toString(), s -> unaryExpr), e -> { + FuncDecl fd = ctx.mkFuncDecl(unaryExpr.toString(), new Sort[] {UNIV, UNIV}, ctx.mkBoolSort()); + + Relation relation = Relation.binary(unaryExpr.toString()); + + funcDeclMap.put(relation, fd); + + Variable a = Variable.unary("a"); + Variable b = Variable.unary("b"); + Variable x = Variable.unary("x"); + + Formula formula = b.in(a.join(relation)).iff(a.eq(b).or(b.in(a.join(unaryExpr.expression())) + .or(x.in(a.join(unaryExpr.expression())).and(b.in(x.join(relation))).and(a.eq(x).not()).and(b.eq(x).not()).forSome(x.oneOf(Relation.UNIV))))) + .forAll(a.oneOf(Relation.UNIV).and(b.oneOf(Relation.UNIV))); + + goal.add(formula.accept(this)); + + return fd; + }); + + return (BoolExpr) funcDecl.apply(exprs); + + /*int loopCount = constSize - 1; + + List expressions = new ArrayList<>(); + + expressions.add(Relation.IDEN); + + for (int i = 0; i < loopCount; i++) { + Expression expression = unaryExpr.expression(); + for (int j = 0; j < i; j++) { + expression = expression.join(unaryExpr.expression()); + } + expressions.add(expression); + } + + return ctx.mkOr(expressions.stream().map(e -> e.accept(this)).toArray(BoolExpr[]::new));*/ + + /*Expression unionExpr = Relation.IDEN; + for (int i = 0; i < loopCount; i++) { + unionExpr = Relation.IDEN.union(unaryExpr.expression().join(unionExpr)); + } + + return unionExpr.accept(this);*/ + case CLOSURE: + funcDecl = funcDeclMap.computeIfAbsent(createdRelations.computeIfAbsent(unaryExpr.toString(), s -> unaryExpr), e -> { + FuncDecl fd = ctx.mkFuncDecl(unaryExpr.toString(), new Sort[] {UNIV, UNIV}, ctx.mkBoolSort()); + + Relation relation = Relation.binary(unaryExpr.toString()); + + funcDeclMap.put(relation, fd); + + Variable a = Variable.unary("a"); + Variable b = Variable.unary("b"); + Variable x = Variable.unary("x"); + + Formula formula = b.in(a.join(relation)).iff(b.in(a.join(unaryExpr.expression())) + .or(x.in(a.join(unaryExpr.expression())).and(b.in(x.join(relation))).and(a.eq(x).not()).and(b.eq(x).not()).forSome(x.oneOf(Relation.UNIV)))) + .forAll(a.oneOf(Relation.UNIV).and(b.oneOf(Relation.UNIV))); + + goal.add(formula.accept(this)); + + return fd; + }); + + return (BoolExpr) funcDecl.apply(exprs); + + /*loopCount = constSize - 1; + + expressions = new ArrayList<>(); + + for (int i = 0; i < loopCount; i++) { + Expression expression = unaryExpr.expression(); + for (int j = 0; j < i; j++) { + expression = expression.join(unaryExpr.expression()); + } + expressions.add(expression); + } + + return ctx.mkOr(expressions.stream().map(e -> e.accept(this)).toArray(BoolExpr[]::new));*/ + + /*unionExpr = Relation.IDEN; + for (int i = 0; i < loopCount; i++) { + unionExpr = Relation.IDEN.union(unaryExpr.expression().join(unionExpr)); + } + + if (unionExpr instanceof BinaryExpression && ((BinaryExpression) unionExpr).op().equals(ExprOperator.UNION)) + return ((BinaryExpression) unionExpr).right().accept(this); + else { + return ctx.mkFalse(); + }*/ + default: + return ctx.mkFalse(); + } + } + + @Override + public BoolExpr visit(BinaryExpression binExpr) { + switch (binExpr.op()) { + case JOIN: + Expr expr = ctx.mkConst("x!" + varCount++, UNIV); + + Expression leftExpression = binExpr.left(); + Expression rightExpression = binExpr.right(); + + Expr[] leftExprs = new Expr[leftExpression.arity()]; + + System.arraycopy(exprs, 0, leftExprs, 0, leftExprs.length - 1); + leftExprs[leftExprs.length - 1] = expr; + + Expr[] rightExprs = new Expr[rightExpression.arity()]; + + rightExprs[0] = expr; + System.arraycopy(exprs, exprs.length - rightExprs.length + 1, rightExprs, 1, rightExprs.length - 1); + + if (leftExpression instanceof Variable) { + rightExprs[0] = variableExprMap.get(leftExpression); + + Expr[] temp = exprs; + exprs = rightExprs; + BoolExpr boolExpr = rightExpression.accept(this); + exprs = temp; + return boolExpr; + } + else if (rightExpression instanceof Variable) { + leftExprs[leftExprs.length - 1] = variableExprMap.get(rightExpression); + Expr[] temp = exprs; + exprs = leftExprs; + BoolExpr boolExpr = leftExpression.accept(this); + exprs = temp; + return boolExpr; + } + + Expr[] temp = exprs; + + exprs = leftExprs; + BoolExpr leftBoolExpr = leftExpression.accept(this); + exprs = rightExprs; + BoolExpr rightBoolExpr = rightExpression.accept(this); + + exprs = temp; + + return ctx.mkExists(new Expr[] {expr} + , ctx.mkAnd(leftBoolExpr, rightBoolExpr) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), ctx.mkSymbol(skolemPrefix + skolemID++)); + case UNION: + return ctx.mkOr(binExpr.left().accept(this), binExpr.right().accept(this)); + case INTERSECTION: + return ctx.mkAnd(binExpr.left().accept(this), binExpr.right().accept(this)); + case PRODUCT: + leftExpression = binExpr.left(); + rightExpression = binExpr.right(); + + leftExprs = new Expr[leftExpression.arity()]; + System.arraycopy(exprs, 0, leftExprs, 0, leftExprs.length); + + rightExprs = new Expr[rightExpression.arity()]; + System.arraycopy(exprs, leftExpression.arity(), rightExprs, 0, rightExprs.length); + + temp = exprs; + + exprs = leftExprs; + leftBoolExpr = leftExpression.accept(this); + exprs = rightExprs; + rightBoolExpr = rightExpression.accept(this); + + exprs = temp; + + return ctx.mkAnd(leftBoolExpr, rightBoolExpr); + case DIFFERENCE: + return ctx.mkAnd(binExpr.left().accept(this), ctx.mkNot(binExpr.right().accept(this))); + case OVERRIDE: + BoolExpr boolExpr = binExpr.right().accept(this); + return (BoolExpr) ctx.mkITE(boolExpr, ctx.mkTrue(), binExpr.left().accept(this)); + default: + return ctx.mkFalse(); + } + } + + @Override + public BoolExpr visit(NaryExpression expr) { + switch (expr.op()) { + case UNION: + BoolExpr[] boolExprs = new BoolExpr[expr.size()]; + for (int i = 0; i < boolExprs.length; i++) { + boolExprs[i] = expr.child(i).accept(this); + } + return ctx.mkOr(boolExprs); + case PRODUCT: + boolExprs = new BoolExpr[expr.size()]; + for (int i = 0; i < boolExprs.length; i++) { + int start = 0; + + for (int j = 0; j < i; j++) + start += expr.child(i - 1).arity(); + + Expression expression = expr.child(i); + Expr[] exprs1 = new Expr[expression.arity()]; + + System.arraycopy(exprs, start, exprs1, 0, exprs1.length); + + Expr[] temp = exprs; + + exprs = exprs1; + boolExprs[i] = expression.accept(this); + + exprs = temp; + } + return ctx.mkAnd(boolExprs); + case INTERSECTION: + boolExprs = new BoolExpr[expr.size()]; + for (int i = 0; i < boolExprs.length; i++) { + boolExprs[i] = expr.child(i).accept(this); + } + return ctx.mkAnd(boolExprs); + case OVERRIDE: + if (expr.size() <= 0) + return ctx.mkFalse(); + + BoolExpr boolExpr = expr.child(0).accept(this); + for (int i = 1; i < expr.size(); i++) { + BoolExpr temp = expr.child(i).accept(this); + boolExpr = (BoolExpr) ctx.mkITE(temp, ctx.mkTrue(), boolExpr); + } + + return boolExpr; + default: + return ctx.mkFalse(); + } + } + + @Override + public BoolExpr visit(Comprehension comprehension) { + // TODO: Implement this. + return ctx.mkFalse(); + } + + @Override + public BoolExpr visit(IfExpression ifExpr) { + return (BoolExpr) ctx.mkITE(ifExpr.condition().accept(this) + , ifExpr.thenExpr().accept(this) + , ifExpr.elseExpr().accept(this)); + } + + @Override + public BoolExpr visit(ProjectExpression project) { + // TODO: Implement this. + return ctx.mkFalse(); + } + + @Override + public BoolExpr visit(IntToExprCast castExpr) { + // TODO: Implement this. + return ctx.mkFalse(); + } + + @Override + public abstract T visit(IntConstant intConst); + + @Override + public abstract T visit(IfIntExpression intExpr); + + @Override + public abstract T visit(ExprToIntCast exprToIntCast); + + @Override + public abstract T visit(NaryIntExpression naryIntExpression); + + @Override + public abstract T visit(BinaryIntExpression binaryIntExpression); + + @Override + public abstract T visit(UnaryIntExpression intExpr); + + @Override + public abstract T visit(SumExpression sumExpression); + + @Override + public abstract BoolExpr visit(IntComparisonFormula intComparisonFormula); + + @Override + public BoolExpr visit(QuantifiedFormula quantifiedFormula) { + int exprsSize = quantifiedFormula.decls().size(); + + Expr[] exprs1 = new Expr[exprsSize]; + + for (int i = 0; i < exprsSize; i++) { + Decl decl = quantifiedFormula.decls().get(i); + exprs1[i] = ctx.mkConst(decl.variable().name(), UNIV); + variableExprMap.put(decl.variable(), exprs1[i]); + } + + BoolExpr ands = quantifiedFormula.decls().accept(this); + + Expr[] temp = exprs; + + exprs = exprs1; + BoolExpr boolExpr = quantifiedFormula.formula().accept(this); + exprs = temp; + + switch (quantifiedFormula.quantifier()) { + case ALL: + return ctx.mkForall(exprs1 + , ctx.mkImplies(ands, boolExpr) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + case SOME: + return ctx.mkExists(exprs1 + , ctx.mkAnd(ands, boolExpr) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), ctx.mkSymbol(skolemPrefix + skolemID++)); + default: + return ctx.mkFalse(); + } + } + + @Override + public BoolExpr visit(NaryFormula formula) { + switch (formula.op()) { + case AND: + BoolExpr[] boolExprs = new BoolExpr[formula.size()]; + for (int i = 0; i < boolExprs.length; i++) { + boolExprs[i] = formula.child(i).accept(this); + } + return ctx.mkAnd(boolExprs); + case OR: + boolExprs = new BoolExpr[formula.size()]; + for (int i = 0; i < boolExprs.length; i++) { + boolExprs[i] = formula.child(i).accept(this); + } + return ctx.mkOr(boolExprs); + default: + return ctx.mkFalse(); + } + } + + @Override + public BoolExpr visit(BinaryFormula binFormula) { + switch (binFormula.op()) { + case IMPLIES: + return ctx.mkImplies(binFormula.left().accept(this), binFormula.right().accept(this)); + case IFF: + return ctx.mkEq(binFormula.left().accept(this), binFormula.right().accept(this)); + case OR: + return ctx.mkOr(binFormula.left().accept(this), binFormula.right().accept(this)); + case AND: + return ctx.mkAnd(binFormula.left().accept(this), binFormula.right().accept(this)); + default: + return ctx.mkFalse(); + } + } + + @Override + public BoolExpr visit(NotFormula not) { + return ctx.mkNot(not.formula().accept(this)); + } + + @Override + public BoolExpr visit(ConstantFormula constant) { + return constant.booleanValue() ? ctx.mkTrue() : ctx.mkFalse(); + } + + @Override + public BoolExpr visit(ComparisonFormula compFormula) { + switch (compFormula.op()) { + case EQUALS: + Expr[] exprs1; + if (compFormula.left() instanceof Variable) { + if (compFormula.right() instanceof Variable) { + return ctx.mkEq(variableExprMap.get(compFormula.left()), variableExprMap.get(compFormula.right())); + } + else { + Variable variable = Variable.unary("x!" + varCount++); + return variable.eq(compFormula.left()).forAll(variable.oneOf(compFormula.right())).accept(this); + } + } + else if (compFormula.right() instanceof Variable) { + Variable variable = Variable.unary("x!" + varCount++); + return variable.eq(compFormula.right()).forAll(variable.oneOf(compFormula.left())).accept(this); + } + + exprs1 = new Expr[compFormula.left().arity()]; + for (int i = 0; i < exprs1.length; i++) { + exprs1[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + + Expr[] temp = exprs; + + exprs = exprs1; + BoolExpr left = compFormula.left().accept(this); + BoolExpr right = compFormula.right().accept(this); + + exprs = temp; + + return ctx.mkForall(exprs1, ctx.mkEq(left, right) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + case SUBSET: + if (compFormula.left() instanceof Variable) { + if (compFormula.right() instanceof Variable) { + return ctx.mkEq(variableExprMap.get(compFormula.left()), variableExprMap.get(compFormula.right())); + } + else { + exprs1 = new Expr[compFormula.left().arity()]; + exprs1[0] = variableExprMap.get(compFormula.left()); + + temp = exprs; + + exprs = exprs1; + BoolExpr boolExpr = compFormula.right().accept(this); + + exprs = temp; + + return boolExpr; + } + } + else if (compFormula.right() instanceof Variable) { + Variable variable = Variable.unary("x!" + varCount++); + return variable.eq(compFormula.right()).forAll(variable.oneOf(compFormula.left())).accept(this); + } + + exprs1 = new Expr[compFormula.left().arity()]; + for (int i = 0; i < exprs1.length; i++) { + exprs1[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + + temp = exprs; + + exprs = exprs1; + left = compFormula.left().accept(this); + right = compFormula.right().accept(this); + + exprs = temp; + + return ctx.mkForall(exprs1 + , ctx.mkImplies(left, right) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + default: + return ctx.mkFalse(); + } + } + + @Override + public BoolExpr visit(MultiplicityFormula multiplicityFormula) { + switch (multiplicityFormula.multiplicity()) { + case SOME: + Expr[] exprs1 = new Expr[multiplicityFormula.expression().arity()]; + for (int i = 0; i < exprs1.length; i++) { + exprs1[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + + Expr[] temp = exprs; + + exprs = exprs1; + BoolExpr boolExpr = multiplicityFormula.expression().accept(this); + + exprs = temp; + + return ctx.mkExists(exprs1, boolExpr + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), ctx.mkSymbol(skolemPrefix + skolemID++)); + case NO: + exprs1 = new Expr[multiplicityFormula.expression().arity()]; + if (multiplicityFormula.expression() instanceof IntToExprCast) { + for (int i = 0; i < exprs1.length; i++) { + exprs1[i] = ctx.mkBVConst("i!" + (varCount++), BIT_SIZE); + } + } + else { + for (int i = 0; i < exprs1.length; i++) { + exprs1[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + } + + temp = exprs; + + exprs = exprs1; + boolExpr = multiplicityFormula.expression().accept(this); + + exprs = temp; + + return ctx.mkNot(ctx.mkExists(exprs1, boolExpr + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), ctx.mkSymbol(skolemPrefix + skolemID++))); + case ONE: + exprs1 = new Expr[multiplicityFormula.expression().arity()]; + for (int i = 0; i < exprs1.length; i++) { + exprs1[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + Expr[] exprs2 = new Expr[multiplicityFormula.expression().arity()]; + for (int i = 0; i < exprs2.length; i++) { + exprs2[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + BoolExpr[] eqs = new BoolExpr[exprs1.length]; + for (int i = 0; i < eqs.length; i++) { + eqs[i] = ctx.mkEq(exprs1[i], exprs2[i]); + } + + Expr[] allExprs = new Expr[exprs1.length + exprs2.length]; + System.arraycopy(exprs1, 0, allExprs, 0, exprs1.length); + System.arraycopy(exprs2, 0, allExprs, exprs1.length, exprs2.length); + + temp = exprs; + + exprs = exprs1; + BoolExpr boolExpr1 = multiplicityFormula.expression().accept(this); + exprs = exprs2; + BoolExpr boolExpr2 = multiplicityFormula.expression().accept(this); + + exprs = temp; + + Quantifier lone = ctx.mkForall(allExprs + , ctx.mkImplies(ctx.mkAnd(boolExpr1, boolExpr2), ctx.mkAnd(eqs)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + Quantifier some = ctx.mkExists(exprs1, boolExpr1 + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), ctx.mkSymbol(skolemPrefix + skolemID++)); + + return ctx.mkAnd(some, lone); + case LONE: + exprs1 = new Expr[multiplicityFormula.expression().arity()]; + for (int i = 0; i < exprs1.length; i++) { + exprs1[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + exprs2 = new Expr[multiplicityFormula.expression().arity()]; + for (int i = 0; i < exprs1.length; i++) { + exprs2[i] = ctx.mkConst("x!" + (varCount++), UNIV); + } + eqs = new BoolExpr[exprs1.length]; + for (int i = 0; i < eqs.length; i++) { + eqs[i] = ctx.mkEq(exprs1[i], exprs2[i]); + } + + allExprs = new Expr[exprs1.length + exprs2.length]; + System.arraycopy(exprs1, 0, allExprs, 0, exprs1.length); + System.arraycopy(exprs2, 0, allExprs, exprs1.length, exprs2.length); + + temp = exprs; + + exprs = exprs1; + boolExpr1 = multiplicityFormula.expression().accept(this); + exprs = exprs2; + boolExpr2 = multiplicityFormula.expression().accept(this); + + exprs = temp; + + return ctx.mkForall(allExprs + , ctx.mkImplies(ctx.mkAnd(boolExpr1, boolExpr2), ctx.mkAnd(eqs)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + default: + return ctx.mkFalse(); + } + } + + @Override + public BoolExpr visit(RelationPredicate predicate) { + return predicate.toConstraints().accept(this); + } + +} diff --git a/Source/kodkod/src/kodkod/util/z3/Z3FormulaConverterWithBV.java b/Source/kodkod/src/kodkod/util/z3/Z3FormulaConverterWithBV.java new file mode 100644 index 0000000..ee51ba4 --- /dev/null +++ b/Source/kodkod/src/kodkod/util/z3/Z3FormulaConverterWithBV.java @@ -0,0 +1,721 @@ +package kodkod.util.z3; + +import com.microsoft.z3.*; +import com.microsoft.z3.enumerations.Z3_sort_kind; +import kodkod.ast.*; +import kodkod.ast.operator.ExprOperator; +import kodkod.ast.operator.IntCompOperator; +import kodkod.ast.operator.Multiplicity; +import kodkod.ast.visitor.ReturnVisitor; +import kodkod.engine.fol2sat.HigherOrderDeclException; +import kodkod.instance.Bounds; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Created by harun on 7/16/18. + */ +public class Z3FormulaConverterWithBV extends Z3FormulaConverter { + + public Z3FormulaConverterWithBV(Context ctx, Sort UNIV, Map funcDeclMap + , Map objectExprMap, int BIT_SIZE) { + super(ctx, UNIV, funcDeclMap, objectExprMap, BIT_SIZE); + + if (objectExprMap.entrySet().stream().anyMatch(e -> e.getKey() instanceof Integer)) { + FuncDecl intsFuncDecl = ctx.mkFuncDecl("Ints", new Sort[]{UNIV}, ctx.mkBoolSort()); + funcDeclMap.put(Relation.INTS, intsFuncDecl); + + univToInt = ctx.mkFuncDecl("toInt", UNIV, ctx.mkBitVecSort(BIT_SIZE)); + + objectExprMap.forEach(((o, expr) -> { + if (o instanceof Integer) { + goal.add((BoolExpr) ctx.mkApp(intsFuncDecl, expr)); + goal.add(ctx.mkEq(ctx.mkApp(univToInt, expr), ctx.mkBV((Integer) o, BIT_SIZE))); + } else { + try { + int i = Integer.parseInt(o.toString()); + goal.add(ctx.mkEq(ctx.mkApp(univToInt, expr), ctx.mkBV(i, BIT_SIZE))); + } + catch (NumberFormatException e) { + goal.add(ctx.mkEq(ctx.mkApp(univToInt, expr), ctx.mkBV(0, BIT_SIZE))); + } + goal.add(ctx.mkNot((BoolExpr) ctx.mkApp(intsFuncDecl, expr))); + } + })); + } + } + + @Override + public BitVecExpr visit(IntConstant intConst) { + return ctx.mkBV(intConst.value(), BIT_SIZE); + } + + @Override + public BitVecExpr visit(IfIntExpression intExpr) { + return (BitVecExpr) ctx.mkITE(intExpr.condition().accept(this) + , intExpr.thenExpr().accept(this) + , intExpr.elseExpr().accept(this)); + } + + private FuncDecl cardinality(Expression expression) { + VariableDetector variableDetector = new VariableDetector(); + expression.accept(variableDetector); + + Set variables = variableDetector.variables().stream() + .filter(v -> variableExprMap.containsKey(v)) + .collect(Collectors.toSet()); + + Map tempMap = new HashMap<>(); + + variables.forEach(variable -> { + Expr expr = variableExprMap.get(variable); + if (expr.isConst()) { + tempMap.put(variable, expr); + variableExprMap.put(variable, ctx.mkConst("x!" + varCount++, UNIV)); + } + }); + + Expr[] inExprs = variables.stream().sorted(Comparator.comparingInt(Object::hashCode)).map(v -> variableExprMap.get(v)).toArray(Expr[]::new); + + int inSize = variables.size(); + int outSize = expression.arity(); + + Sort[] inSorts = new Sort[inSize]; + Arrays.fill(inSorts, UNIV); + + FuncDecl cardinalityFunc = ctx.mkFuncDecl("#[" + expression.toString() + "]" + varCount++ + , inSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Sort[] ordSorts = new Sort[inSize + outSize]; + Arrays.fill(ordSorts, UNIV); + + FuncDecl ordFunc = ctx.mkFuncDecl("ord[" + expression.toString() + "]" + varCount++, ordSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Expr[] ordExprs = new Expr[ordSorts.length]; + System.arraycopy(inExprs, 0, ordExprs, 0, inSize); + for (int i = inSize; i < ordExprs.length; i++) { + ordExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + } + + Expr[] outExprs = new Expr[outSize]; + System.arraycopy(ordExprs, inSize, outExprs, 0, outSize); + + BitVecExpr bitVecExpr = ctx.mkBVConst("i!" + varCount++, BIT_SIZE); + + Expr[] invExprs = new Expr[inSize + 1]; + System.arraycopy(inExprs, 0, invExprs, 0, inSize); + invExprs[invExprs.length - 1] = bitVecExpr; + + Expr[] temp; + + // crd = 0 ⇔ ∀f : FSO, ¬isFSO(f ) + // ****************************************** // + BoolExpr boolExprEqZero = ctx.mkIff(ctx.mkEq(cardinalityFunc.apply(inExprs), ctx.mkBV(0, BIT_SIZE)), expression.no().accept(this)); + + if (inSize > 0) { + boolExprEqZero = ctx.mkForall(inExprs, boolExprEqZero + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + } + // ****************************************** // + + // ∀f : FSO | isFSO(f) ⇒ 1 ≤ ord(f ) ≤ crd + // ****************************************** // + + temp = exprs; + exprs = outExprs; + + BoolExpr boolExprOrd = ctx.mkForall(ordExprs + , ctx.mkImplies(expression.accept(this) + , ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), (BitVecExpr) ordFunc.apply(ordExprs)) + , ctx.mkBVSLE((BitVecExpr) ordFunc.apply(ordExprs) + , (BitVecExpr) cardinalityFunc.apply(inExprs)))) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + exprs = temp; + + // ****************************************** // + + // ∀i : Nat | 1 ≤ i ≤ crd ⇒ isFSO(inv(i)) + // inv = ord^−1 + // ****************************************** // + + temp = exprs; + exprs = outExprs; + + BoolExpr boolExprInv = ctx.mkForall(invExprs, + ctx.mkImplies(ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), bitVecExpr) + , ctx.mkBVSLE(bitVecExpr, (BitVecExpr) cardinalityFunc.apply(inExprs))) + , ctx.mkExists(outExprs, ctx.mkAnd( + /*ctx.mkEq(ordFunc.apply(ordExprs), bitVecExpr) + , */expression.accept(this)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + exprs = temp; + + Expr[] oneToOneExprs = new Expr[inSize + outSize * 2]; + for (int i = 0; i < oneToOneExprs.length; i++) { + oneToOneExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + } + + Expr[] firstOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, firstOne, 0, firstOne.length); + + Expr[] secondOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, secondOne, 0, inSize); + System.arraycopy(oneToOneExprs, ordExprs.length, secondOne, inSize, outSize); + + BoolExpr[] eqs = new BoolExpr[outSize]; + for (int i = 0; i < outSize; i++) { + eqs[i] = ctx.mkEq(firstOne[i + inSize], secondOne[i + inSize]); + } + + BoolExpr boolExprOneToOne = ctx.mkForall(oneToOneExprs + , ctx.mkImplies(ctx.mkEq(ordFunc.apply(firstOne), ordFunc.apply(secondOne)) + , ctx.mkAnd(eqs)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + // ****************************************** // + + goal.add(boolExprEqZero); + goal.add(boolExprOrd); + goal.add(boolExprInv); + goal.add(boolExprOneToOne); + + variableExprMap.putAll(tempMap); + + return cardinalityFunc; + } + + private FuncDecl sum(Expression expression) { + VariableDetector variableDetector = new VariableDetector(); + expression.accept(variableDetector); + + Set variables = variableDetector.variables().stream() + .filter(v -> variableExprMap.containsKey(v)) + .collect(Collectors.toSet()); + + Map tempMap = new HashMap<>(); + + variables.forEach(variable -> { + Expr expr = variableExprMap.get(variable); + if (expr.isConst()) { + tempMap.put(variable, expr); + variableExprMap.put(variable, ctx.mkConst("x!" + varCount++, UNIV)); + } + }); + + Expr[] inExprs = variables.stream().sorted(Comparator.comparingInt(Object::hashCode)).map(v -> variableExprMap.get(v)).toArray(Expr[]::new); + + int inSize = variables.size(); + int outSize = expression.arity(); + + Sort[] inSorts = new Sort[inSize]; + Arrays.fill(inSorts, UNIV); + + FuncDecl sum = ctx.mkFuncDecl("SUM[" + expression.toString() + "]" + varCount++ + , inSorts, ctx.mkBitVecSort(BIT_SIZE)); + + FuncDecl cardinalityFunc = ctx.mkFuncDecl("#[" + expression.toString() + "]" + varCount++ + , inSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Sort[] sumSorts = new Sort[inSize + 1]; + Arrays.fill(sumSorts, UNIV); + sumSorts[sumSorts.length - 1] = ctx.mkBitVecSort(BIT_SIZE); + + FuncDecl sumFunc = ctx.mkFuncDecl("SUM_RECURSIVE[" + expression.toString() + "]" + varCount++ + , sumSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Sort[] ordSorts = new Sort[inSize + outSize]; + Arrays.fill(ordSorts, UNIV); + + FuncDecl ordFunc = ctx.mkFuncDecl("ord[" + expression.toString() + "]" + varCount++, ordSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Expr[] ordExprs = new Expr[ordSorts.length]; + System.arraycopy(inExprs, 0, ordExprs, 0, inSize); + for (int i = inSize; i < ordExprs.length; i++) { + ordExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + } + + Expr[] outExprs = new Expr[outSize]; + System.arraycopy(ordExprs, inSize, outExprs, 0, outSize); + + BitVecExpr bitVecExpr = ctx.mkBVConst("i!" + varCount++, BIT_SIZE); + + Sort[] invSorts = new Sort[inSize + 1]; + System.arraycopy(inSorts, 0, invSorts, 0, inSize); + invSorts[invSorts.length - 1] = ctx.mkBitVecSort(BIT_SIZE); + + Expr[] invExprs = new Expr[inSize + 1]; + System.arraycopy(inExprs, 0, invExprs, 0, inSize); + invExprs[invExprs.length - 1] = bitVecExpr; + + Expr[] temp; + + // crd = 0 ⇔ ∀f : FSO, ¬isFSO(f ) + // ****************************************** // + BoolExpr boolExprEqZero = ctx.mkIff(ctx.mkEq(cardinalityFunc.apply(inExprs), ctx.mkBV(0, BIT_SIZE)), expression.no().accept(this)); + + if (inSize > 0) { + boolExprEqZero = ctx.mkForall(inExprs, boolExprEqZero + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + } + // ****************************************** // + + // ∀f : FSO | isFSO(f) ⇒ 1 ≤ ord(f ) ≤ crd + // ****************************************** // + + temp = exprs; + exprs = outExprs; + + BoolExpr boolExprOrd = ctx.mkForall(ordExprs + , ctx.mkImplies(expression.accept(this) + , ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), (BitVecExpr) ordFunc.apply(ordExprs)) + , ctx.mkBVSLE((BitVecExpr) ordFunc.apply(ordExprs) + , (BitVecExpr) cardinalityFunc.apply(inExprs)))) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + exprs = temp; + + // ****************************************** // + + // ∀i : Nat | 1 ≤ i ≤ crd ⇒ isFSO(inv(i)) + // inv = ord^−1 + // ****************************************** // + + temp = exprs; + exprs = outExprs; + + BoolExpr boolExprInv = ctx.mkForall(invExprs, + ctx.mkImplies(ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), bitVecExpr) + , ctx.mkBVSLE(bitVecExpr, (BitVecExpr) cardinalityFunc.apply(inExprs))) + , ctx.mkExists(outExprs, ctx.mkAnd( + ctx.mkEq(ordFunc.apply(ordExprs), bitVecExpr) + , expression.accept(this)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + exprs = temp; + + Expr[] oneToOneExprs = new Expr[inSize + outSize * 2]; + for (int i = 0; i < oneToOneExprs.length; i++) { + oneToOneExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + } + + Expr[] firstOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, firstOne, 0, firstOne.length); + + Expr[] secondOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, secondOne, 0, inSize); + System.arraycopy(oneToOneExprs, ordExprs.length, secondOne, inSize, outSize); + + BoolExpr[] eqs = new BoolExpr[outSize]; + for (int i = 0; i < outSize; i++) { + eqs[i] = ctx.mkEq(firstOne[i + inSize], secondOne[i + inSize]); + } + + BoolExpr boolExprOneToOne = ctx.mkForall(oneToOneExprs + , ctx.mkImplies(ctx.mkEq(ordFunc.apply(firstOne), ordFunc.apply(secondOne)) + , ctx.mkAnd(eqs)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + // ****************************************** // + + FuncDecl noToResultFunc = ctx.mkFuncDecl("NO[" + expression.toString() + "]" + varCount++ + , invSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Expr[] sumExprs = new Expr[ordExprs.length + 1]; + System.arraycopy(ordExprs, 0, sumExprs, 0, ordExprs.length); + sumExprs[sumExprs.length - 1] = bitVecExpr; + + BoolExpr boolExprNoToResult = ctx.mkForall(sumExprs, ctx.mkImplies(ctx.mkEq(ordFunc.apply(ordExprs), bitVecExpr) + , ctx.mkEq(noToResultFunc.apply(invExprs), univToInt == null ? ctx.mkBV(0, BIT_SIZE) : univToInt.apply(outExprs))) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + Expr[] exprsPlusBVminus1 = new Expr[invExprs.length]; + System.arraycopy(inExprs, 0, exprsPlusBVminus1, 0, inSize); + exprsPlusBVminus1[exprsPlusBVminus1.length - 1] = ctx.mkBVAdd(bitVecExpr, ctx.mkBV(1, BIT_SIZE)); + + BoolExpr boolExprSum = ctx.mkForall(invExprs + , ctx.mkEq(sumFunc.apply(invExprs) + , ctx.mkITE(ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), bitVecExpr) + , ctx.mkBVSLE(bitVecExpr, (BitVecExpr) cardinalityFunc.apply(inExprs))) + , ctx.mkBVAdd((BitVecExpr) sumFunc.apply(exprsPlusBVminus1), (BitVecExpr) noToResultFunc.apply(invExprs)) + , ctx.mkBV(0, BIT_SIZE))) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + Expr[] sumWithCardExprs = new Expr[invSorts.length]; + System.arraycopy(inExprs, 0, sumWithCardExprs, 0, inExprs.length); + sumWithCardExprs[sumWithCardExprs.length - 1] = ctx.mkBV(1, BIT_SIZE); + + BoolExpr boolExprSumEq = ctx.mkEq(sum.apply(inExprs), sumFunc.apply(sumWithCardExprs)); + if (inSize > 0) { + boolExprSumEq = ctx.mkForall(inExprs, boolExprSumEq + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + } + + goal.add(boolExprEqZero); + goal.add(boolExprOrd); + goal.add(boolExprInv); + goal.add(boolExprOneToOne); + goal.add(boolExprNoToResult); + goal.add(boolExprSum); + goal.add(boolExprSumEq); + + variableExprMap.putAll(tempMap); + + intExprFuncMap.put(expression.count().toString(), cardinalityFunc); + + return sum; + } + + @Override + public BitVecExpr visit(ExprToIntCast exprToIntCast) { + switch (exprToIntCast.op()) { + case CARDINALITY: + Expression expression = exprToIntCast.expression(); + + if (expression instanceof Variable) + return ctx.mkBV(1, BIT_SIZE); + + FuncDecl func = intExprFuncMap.computeIfAbsent(exprToIntCast.toString(), e -> cardinality(expression)); + + VariableDetector variableDetector = new VariableDetector(); + expression.accept(variableDetector); + Expr[] usedExprs = variableDetector.variables().stream().sorted(Comparator.comparingInt(Object::hashCode)) + .map(v -> variableExprMap.get(v)).filter(Objects::nonNull).toArray(Expr[]::new); + + return (BitVecExpr) func.apply(usedExprs); + case SUM: + expression = exprToIntCast.expression(); + + if (expression instanceof Variable && univToInt != null) + return (BitVecExpr) univToInt.apply(variableExprMap.get(expression)); + + func = intExprFuncMap.computeIfAbsent(exprToIntCast.toString(), e -> sum(expression)); + + variableDetector = new VariableDetector(); + expression.accept(variableDetector); + usedExprs = variableDetector.variables().stream().sorted(Comparator.comparingInt(Object::hashCode)) + .map(v -> variableExprMap.get(v)).filter(Objects::nonNull).toArray(Expr[]::new); + + return (BitVecExpr) func.apply(usedExprs); + default: + return ctx.mkBV(0, BIT_SIZE); + } + } + + @Override + public BitVecExpr visit(NaryIntExpression naryIntExpression) { + Iterator iterator = naryIntExpression.iterator(); + if (iterator.hasNext()) { + BitVecExpr expr = iterator.next().accept(this); + switch (naryIntExpression.op()) { + case MULTIPLY: + while (iterator.hasNext()) { + expr = ctx.mkBVMul(expr, iterator.next().accept(this)); + } + return expr; + case PLUS: + while (iterator.hasNext()) { + expr = ctx.mkBVAdd(expr, iterator.next().accept(this)); + } + return expr; + case AND: + while (iterator.hasNext()) { + expr = ctx.mkBVAND(expr, iterator.next().accept(this)); + } + return expr; + case OR: + while (iterator.hasNext()) { + expr = ctx.mkBVOR(expr, iterator.next().accept(this)); + } + return expr; + } + } + return ctx.mkBV(0, BIT_SIZE); + } + + @Override + public BitVecExpr visit(BinaryIntExpression binaryIntExpression) { + BitVecExpr left = binaryIntExpression.left().accept(this); + BitVecExpr right = binaryIntExpression.right().accept(this); + switch (binaryIntExpression.op()) { + case AND: + return ctx.mkBVAND(left, right); + case OR: + return ctx.mkBVOR(left, right); + case SHA: + return ctx.mkBVASHR(left, right); + case SHL: + return ctx.mkBVSHL(left, right); + case SHR: + return ctx.mkBVLSHR(left, right); + case XOR: + return ctx.mkBVXOR(left, right); + case PLUS: + return ctx.mkBVAdd(left, right); + case MINUS: + return ctx.mkBVSub(left, right); + case DIVIDE: + return ctx.mkBVSDiv(left, right); + case MODULO: + return ctx.mkBVSMod(left, right); + case MULTIPLY: + return ctx.mkBVMul(left, right); + default: + return ctx.mkBV(0, BIT_SIZE); + } + } + + @Override + public BitVecExpr visit(UnaryIntExpression intExpr) { + BitVecExpr expr = intExpr.intExpr().accept(this); + switch (intExpr.op()) { + case SGN: + return (BitVecExpr) ctx.mkITE(ctx.mkEq(expr, ctx.mkBV(0, BIT_SIZE)) + , ctx.mkBV(0, BIT_SIZE) + , ctx.mkITE(ctx.mkBVSGT(expr, ctx.mkBV(0, BIT_SIZE)) + , ctx.mkBV(1, BIT_SIZE) + , ctx.mkBV(-1, BIT_SIZE))); + case NOT: + return ctx.mkBVNot(expr); + case NEG: + return ctx.mkBVNeg(expr); + case ABS: + return (BitVecExpr) ctx.mkITE(ctx.mkBVSLT(expr, ctx.mkBV(0, BIT_SIZE)), ctx.mkBVNeg(expr), expr); + default: + return ctx.mkBV(0, BIT_SIZE); + } + } + + private FuncDecl sum(SumExpression sumExpression) { + + VariableDetector variableDetector = new VariableDetector(); + sumExpression.accept(variableDetector); + + List outerVariables = new ArrayList<>(variableDetector.variables()); + List declVariables = new ArrayList<>(); + + Set declExpressionSet = new HashSet<>(); + Set declFormulaSet = new HashSet<>(); + + sumExpression.decls().forEach(decl -> { + if (decl.multiplicity() != Multiplicity.ONE) + throw new HigherOrderDeclException(decl); + if (decl.expression().arity() != 1) + throw new RuntimeException(decl + ": decl.expression.arity != 1"); + declVariables.add(decl.variable()); + declExpressionSet.add(decl.expression()); + declFormulaSet.add(decl.variable().in(decl.expression())); + }); + + outerVariables.removeAll(declVariables); + + outerVariables.sort(Comparator.comparingInt(Object::hashCode)); + + Map tempMap = new HashMap<>(variableExprMap); + + Expr[] declExprs = new Expr[declVariables.size()]; + Expr[] outerExprs = new Expr[outerVariables.size()]; + + for (int i = 0; i < declExprs.length; i++) { + declExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + variableExprMap.put(declVariables.get(i), declExprs[i]); + } + + for (int i = 0; i < outerExprs.length; i++) { + outerExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + variableExprMap.put(outerVariables.get(i), outerExprs[i]); + } + + BitVecExpr generalSum = sumExpression.intExpr().accept(this); + + // **************************************** // + + int inSize = outerVariables.size(); + int outSize = declVariables.size(); + + Sort[] inSorts = new Sort[inSize]; + Arrays.fill(inSorts, UNIV); + + FuncDecl sum = ctx.mkFuncDecl("SUM[" + sumExpression.toString() + "]" + varCount++ + , inSorts, ctx.mkBitVecSort(BIT_SIZE)); + + FuncDecl cardinalityFunc = ctx.mkFuncDecl("#[" + sumExpression.toString() + "]" + varCount++ + , inSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Sort[] sumSorts = new Sort[inSize + 1]; + Arrays.fill(sumSorts, UNIV); + sumSorts[sumSorts.length - 1] = ctx.mkBitVecSort(BIT_SIZE); + + FuncDecl sumRecursive = ctx.mkFuncDecl("SUM_RECURSIVE[" + sumExpression.toString() + "]" + varCount++ + , sumSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Sort[] ordSorts = new Sort[inSize + outSize]; + Arrays.fill(ordSorts, UNIV); + + FuncDecl ordFunc = ctx.mkFuncDecl("ord[" + sumExpression.toString() + "]" + varCount++, ordSorts, ctx.mkBitVecSort(BIT_SIZE)); + + Expr[] ordExprs = new Expr[ordSorts.length]; + System.arraycopy(outerExprs, 0, ordExprs, 0, inSize); + System.arraycopy(declExprs, 0, ordExprs, inSize, outSize); + + BitVecExpr bitVecExpr = ctx.mkBVConst("i!" + varCount++, BIT_SIZE); + + Sort[] invSorts = new Sort[inSize + 1]; + System.arraycopy(inSorts, 0, invSorts, 0, inSize); + invSorts[invSorts.length - 1] = ctx.mkBitVecSort(BIT_SIZE); + + Expr[] invExprs = new Expr[inSize + 1]; + System.arraycopy(outerExprs, 0, invExprs, 0, inSize); + invExprs[invExprs.length - 1] = bitVecExpr; + + // crd = 0 ⇔ ∀f : FSO, ¬isFSO(f ) + // ****************************************** // + BoolExpr boolExprEqZero = ctx.mkIff(ctx.mkEq(cardinalityFunc.apply(outerExprs), ctx.mkBV(0, BIT_SIZE)), Expression.union(declExpressionSet).no().accept(this)); + + if (inSize > 0) { + boolExprEqZero = ctx.mkForall(outerExprs, boolExprEqZero + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + } + // ****************************************** // + + // ∀f : FSO | isFSO(f) ⇒ 1 ≤ ord(f ) ≤ crd + // ****************************************** // + + BoolExpr boolExprOrd = ctx.mkForall(ordExprs + , ctx.mkImplies(Formula.and(declFormulaSet).accept(this) + , ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), (BitVecExpr) ordFunc.apply(ordExprs)) + , ctx.mkBVSLE((BitVecExpr) ordFunc.apply(ordExprs) + , (BitVecExpr) cardinalityFunc.apply(outerExprs)))) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + // ****************************************** // + + // ∀i : Nat | 1 ≤ i ≤ crd ⇒ isFSO(inv(i)) + // inv = ord^−1 + // ****************************************** // + + BoolExpr boolExprInv = ctx.mkForall(invExprs, + ctx.mkImplies(ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), bitVecExpr) + , ctx.mkBVSLE(bitVecExpr, (BitVecExpr) cardinalityFunc.apply(outerExprs))) + , ctx.mkExists(declExprs, ctx.mkAnd( + ctx.mkEq(ordFunc.apply(ordExprs), bitVecExpr) + , Formula.and(declFormulaSet).accept(this)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + Expr[] oneToOneExprs = new Expr[inSize + outSize * 2]; + for (int i = 0; i < oneToOneExprs.length; i++) { + oneToOneExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + } + + Expr[] firstOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, firstOne, 0, firstOne.length); + + Expr[] secondOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, secondOne, 0, inSize); + System.arraycopy(oneToOneExprs, ordExprs.length, secondOne, inSize, outSize); + + BoolExpr[] eqs = new BoolExpr[outSize]; + for (int i = 0; i < outSize; i++) { + eqs[i] = ctx.mkEq(firstOne[i + inSize], secondOne[i + inSize]); + } + + BoolExpr boolExprOneToOne = ctx.mkForall(oneToOneExprs + , ctx.mkImplies(ctx.mkEq(ordFunc.apply(firstOne), ordFunc.apply(secondOne)) + , ctx.mkAnd(eqs)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + goal.add(boolExprEqZero); + goal.add(boolExprOrd); + goal.add(boolExprInv); + goal.add(boolExprOneToOne); + + // ****************************************** // + + Expr[] allExprs = new Expr[ordExprs.length + 1]; + System.arraycopy(ordExprs, 0, allExprs, 0, ordExprs.length); + allExprs[allExprs.length - 1] = bitVecExpr; + + Expr[] sumRecursiveExprsPlus1 = new Expr[invExprs.length]; + System.arraycopy(outerExprs, 0, sumRecursiveExprsPlus1, 0, inSize); + sumRecursiveExprsPlus1[sumRecursiveExprsPlus1.length - 1] = ctx.mkBVAdd(bitVecExpr, ctx.mkBV(1, BIT_SIZE)); + + FuncDecl generalFunc = ctx.mkFuncDecl("PARTIAL_SUM[" + sumExpression.toString() + "]" + varCount++, invSorts, ctx.mkBitVecSort(BIT_SIZE)); + + BoolExpr boolExprGeneral = ctx.mkForall(allExprs + , ctx.mkImplies(ctx.mkEq(ordFunc.apply(ordExprs), bitVecExpr) + , ctx.mkEq(generalFunc.apply(invExprs), generalSum)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + goal.add(boolExprGeneral); + + BoolExpr boolExprSumRecursive = ctx.mkForall(invExprs, ctx.mkEq(sumRecursive.apply(invExprs) + , ctx.mkITE(ctx.mkAnd(ctx.mkBVSLE(ctx.mkBV(1, BIT_SIZE), bitVecExpr) + , ctx.mkBVSLE(bitVecExpr, (BitVecExpr) cardinalityFunc.apply(outerExprs))) + , ctx.mkBVAdd((BitVecExpr) generalFunc.apply(invExprs), (BitVecExpr) sumRecursive.apply(sumRecursiveExprsPlus1)) + , ctx.mkBV(0, BIT_SIZE))) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + goal.add(boolExprSumRecursive); + + Expr[] outerExprsPlus1 = new Expr[outerExprs.length + 1]; + System.arraycopy(outerExprs, 0, outerExprsPlus1, 0, outerExprs.length); + outerExprsPlus1[outerExprsPlus1.length - 1] = ctx.mkBV(1, BIT_SIZE); + + BoolExpr boolExprSum = ctx.mkForall(outerExprs, ctx.mkEq(sum.apply(outerExprs), sumRecursive.apply(outerExprsPlus1)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + goal.add(boolExprSum); + + intExprFuncMap.put(sumExpression.toString(), sum); + + variableExprMap = tempMap; + + return sum; + } + + @Override + public BitVecExpr visit(SumExpression sumExpression) { + VariableDetector variableDetector = new VariableDetector(); + sumExpression.accept(variableDetector); + + List outerVariables = new ArrayList<>(variableDetector.variables()); + + sumExpression.decls().forEach(decl -> { + outerVariables.remove(decl.variable()); + }); + + outerVariables.sort(Comparator.comparingInt(Object::hashCode)); + + Expr[] inExpr = outerVariables.stream().map(v -> variableExprMap.get(v)).toArray(Expr[]::new); + + return (BitVecExpr) intExprFuncMap.computeIfAbsent(sumExpression.toString(), s -> sum(sumExpression)).apply(inExpr); + } + + @Override + public BoolExpr visit(IntComparisonFormula intComparisonFormula) { + switch (intComparisonFormula.op()) { + case EQ: + return ctx.mkEq(intComparisonFormula.left().accept(this) + , intComparisonFormula.right().accept(this)); + case GT: + return ctx.mkBVSGT(intComparisonFormula.left().accept(this) + , intComparisonFormula.right().accept(this)); + case LT: + return ctx.mkBVSLT(intComparisonFormula.left().accept(this) + , intComparisonFormula.right().accept(this)); + case GTE: + return ctx.mkBVSGE(intComparisonFormula.left().accept(this) + , intComparisonFormula.right().accept(this)); + case LTE: + return ctx.mkBVSLE(intComparisonFormula.left().accept(this) + , intComparisonFormula.right().accept(this)); + default: + return ctx.mkFalse(); + } + } +} diff --git a/Source/kodkod/src/kodkod/util/z3/Z3FormulaConverterWithInt.java b/Source/kodkod/src/kodkod/util/z3/Z3FormulaConverterWithInt.java new file mode 100644 index 0000000..dfb8ccb --- /dev/null +++ b/Source/kodkod/src/kodkod/util/z3/Z3FormulaConverterWithInt.java @@ -0,0 +1,722 @@ +package kodkod.util.z3; + +import com.microsoft.z3.*; +import kodkod.ast.*; +import kodkod.ast.operator.ExprOperator; +import kodkod.ast.operator.Multiplicity; +import kodkod.ast.visitor.ReturnVisitor; +import kodkod.engine.fol2sat.HigherOrderDeclException; +import kodkod.instance.Bounds; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Created by harun on 7/16/18. + */ +public class Z3FormulaConverterWithInt extends Z3FormulaConverter { + + public Z3FormulaConverterWithInt(Context ctx, Sort UNIV, Map funcDeclMap + , Map objectExprMap, int BIT_SIZE) { + super(ctx, UNIV, funcDeclMap, objectExprMap, BIT_SIZE); + + if (objectExprMap.entrySet().stream().anyMatch(e -> e.getKey() instanceof Integer)) { + FuncDecl intsFuncDecl = ctx.mkFuncDecl("Ints", new Sort[]{UNIV}, ctx.mkBoolSort()); + funcDeclMap.put(Relation.INTS, intsFuncDecl); + + univToInt = ctx.mkFuncDecl("toInt", UNIV, ctx.mkIntSort()); + + objectExprMap.forEach(((o, expr) -> { + if (o instanceof Integer) { + goal.add((BoolExpr) ctx.mkApp(intsFuncDecl, expr)); + goal.add(ctx.mkEq(ctx.mkApp(univToInt, expr), ctx.mkInt((Integer) o))); + } else { + try { + int i = Integer.parseInt(o.toString()); + goal.add(ctx.mkEq(ctx.mkApp(univToInt, expr), ctx.mkInt(i))); + } + catch (NumberFormatException e) { + goal.add(ctx.mkEq(ctx.mkApp(univToInt, expr), ctx.mkInt(0))); + } + goal.add(ctx.mkNot((BoolExpr) ctx.mkApp(intsFuncDecl, expr))); + } + })); + } + } + + @Override + public IntExpr visit(IntConstant intConst) { + return ctx.mkInt(intConst.value()); + } + + @Override + public IntExpr visit(IfIntExpression intExpr) { + return (IntExpr) ctx.mkITE(intExpr.condition().accept(this) + , intExpr.thenExpr().accept(this) + , intExpr.elseExpr().accept(this)); + } + + private FuncDecl cardinality(Expression expression) { + VariableDetector variableDetector = new VariableDetector(); + expression.accept(variableDetector); + + Set variables = variableDetector.variables().stream() + .filter(v -> variableExprMap.containsKey(v)) + .collect(Collectors.toSet()); + + Map tempMap = new HashMap<>(); + + variables.forEach(variable -> { + Expr expr = variableExprMap.get(variable); + if (expr.isConst()) { + tempMap.put(variable, expr); + variableExprMap.put(variable, ctx.mkConst("x!" + varCount++, UNIV)); + } + }); + + Expr[] inExprs = variables.stream().sorted(Comparator.comparingInt(Object::hashCode)).map(v -> variableExprMap.get(v)).toArray(Expr[]::new); + + int inSize = variables.size(); + int outSize = expression.arity(); + + Sort[] inSorts = new Sort[inSize]; + Arrays.fill(inSorts, UNIV); + + FuncDecl cardinalityFunc = ctx.mkFuncDecl("#[" + expression.toString() + "]" + varCount++ + , inSorts, ctx.mkIntSort()); + + Sort[] ordSorts = new Sort[inSize + outSize]; + Arrays.fill(ordSorts, UNIV); + + FuncDecl ordFunc = ctx.mkFuncDecl("ord[" + expression.toString() + "]" + varCount++, ordSorts, ctx.mkIntSort()); + + Expr[] ordExprs = new Expr[ordSorts.length]; + System.arraycopy(inExprs, 0, ordExprs, 0, inSize); + for (int i = inSize; i < ordExprs.length; i++) { + ordExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + } + + Expr[] outExprs = new Expr[outSize]; + System.arraycopy(ordExprs, inSize, outExprs, 0, outSize); + + IntExpr intExpr = ctx.mkIntConst("i!" + varCount++); + + Expr[] invExprs = new Expr[inSize + 1]; + System.arraycopy(inExprs, 0, invExprs, 0, inSize); + invExprs[invExprs.length - 1] = intExpr; + + Expr[] temp; + + // crd = 0 ⇔ ∀f : FSO, ¬isFSO(f ) + // ****************************************** // + BoolExpr boolExprEqZero = ctx.mkIff(ctx.mkEq(cardinalityFunc.apply(inExprs), ctx.mkInt(0)), expression.no().accept(this)); + + if (inSize > 0) { + boolExprEqZero = ctx.mkForall(inExprs, boolExprEqZero + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + } + // ****************************************** // + + // ∀f : FSO | isFSO(f) ⇒ 1 ≤ ord(f ) ≤ crd + // ****************************************** // + + temp = exprs; + exprs = outExprs; + + BoolExpr boolExprOrd = ctx.mkForall(ordExprs + , ctx.mkImplies(expression.accept(this) + , ctx.mkAnd(ctx.mkLe(ctx.mkInt(1), (IntExpr) ordFunc.apply(ordExprs)) + , ctx.mkLe((IntExpr) ordFunc.apply(ordExprs) + , (IntExpr) cardinalityFunc.apply(inExprs)))) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + exprs = temp; + + // ****************************************** // + + // ∀i : Nat | 1 ≤ i ≤ crd ⇒ isFSO(inv(i)) + // inv = ord^−1 + // ****************************************** // + + temp = exprs; + exprs = outExprs; + + BoolExpr boolExprInv = ctx.mkForall(invExprs, + ctx.mkImplies(ctx.mkAnd(ctx.mkLe(ctx.mkInt(1), intExpr) + , ctx.mkLe(intExpr, (IntExpr) cardinalityFunc.apply(inExprs))) + , ctx.mkExists(outExprs, ctx.mkAnd( + ctx.mkEq(ordFunc.apply(ordExprs), intExpr) + , expression.accept(this)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + exprs = temp; + + Expr[] oneToOneExprs = new Expr[inSize + outSize * 2]; + for (int i = 0; i < oneToOneExprs.length; i++) { + oneToOneExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + } + + Expr[] firstOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, firstOne, 0, firstOne.length); + + Expr[] secondOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, secondOne, 0, inSize); + System.arraycopy(oneToOneExprs, ordExprs.length, secondOne, inSize, outSize); + + BoolExpr[] eqs = new BoolExpr[outSize]; + for (int i = 0; i < outSize; i++) { + eqs[i] = ctx.mkEq(firstOne[i + inSize], secondOne[i + inSize]); + } + + BoolExpr boolExprOneToOne = ctx.mkForall(oneToOneExprs + , ctx.mkImplies(ctx.mkEq(ordFunc.apply(firstOne), ordFunc.apply(secondOne)) + , ctx.mkAnd(eqs)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + // ****************************************** // + + goal.add(boolExprEqZero); + goal.add(boolExprOrd); + goal.add(boolExprInv); + goal.add(boolExprOneToOne); + + variableExprMap.putAll(tempMap); + + return cardinalityFunc; + } + + private FuncDecl sum(Expression expression) { + VariableDetector variableDetector = new VariableDetector(); + expression.accept(variableDetector); + + Set variables = variableDetector.variables().stream() + .filter(v -> variableExprMap.containsKey(v)) + .collect(Collectors.toSet()); + + Map tempMap = new HashMap<>(); + + variables.forEach(variable -> { + Expr expr = variableExprMap.get(variable); + if (expr.isConst()) { + tempMap.put(variable, expr); + variableExprMap.put(variable, ctx.mkConst("x!" + varCount++, UNIV)); + } + }); + + Expr[] inExprs = variables.stream().sorted(Comparator.comparingInt(Object::hashCode)).map(v -> variableExprMap.get(v)).toArray(Expr[]::new); + + int inSize = variables.size(); + int outSize = expression.arity(); + + Sort[] inSorts = new Sort[inSize]; + Arrays.fill(inSorts, UNIV); + + FuncDecl sum = ctx.mkFuncDecl("SUM[" + expression.toString() + "]" + varCount++ + , inSorts, ctx.mkIntSort()); + + FuncDecl cardinalityFunc = ctx.mkFuncDecl("#[" + expression.toString() + "]" + varCount++ + , inSorts, ctx.mkIntSort()); + + Sort[] sumSorts = new Sort[inSize + 1]; + Arrays.fill(sumSorts, UNIV); + sumSorts[sumSorts.length - 1] = ctx.mkIntSort(); + + FuncDecl sumFunc = ctx.mkFuncDecl("SUM_RECURSIVE[" + expression.toString() + "]" + varCount++ + , sumSorts, ctx.mkIntSort()); + + Sort[] ordSorts = new Sort[inSize + outSize]; + Arrays.fill(ordSorts, UNIV); + + FuncDecl ordFunc = ctx.mkFuncDecl("ord[" + expression.toString() + "]" + varCount++, ordSorts, ctx.mkIntSort()); + + Expr[] ordExprs = new Expr[ordSorts.length]; + System.arraycopy(inExprs, 0, ordExprs, 0, inSize); + for (int i = inSize; i < ordExprs.length; i++) { + ordExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + } + + Expr[] outExprs = new Expr[outSize]; + System.arraycopy(ordExprs, inSize, outExprs, 0, outSize); + + IntExpr intExpr = ctx.mkIntConst("i!" + varCount++); + + Sort[] invSorts = new Sort[inSize + 1]; + System.arraycopy(inSorts, 0, invSorts, 0, inSize); + invSorts[invSorts.length - 1] = ctx.mkIntSort(); + + Expr[] invExprs = new Expr[inSize + 1]; + System.arraycopy(inExprs, 0, invExprs, 0, inSize); + invExprs[invExprs.length - 1] = intExpr; + + Expr[] temp; + + // crd = 0 ⇔ ∀f : FSO, ¬isFSO(f ) + // ****************************************** // + BoolExpr boolExprEqZero = ctx.mkIff(ctx.mkEq(cardinalityFunc.apply(inExprs), ctx.mkInt(0)), expression.no().accept(this)); + + if (inSize > 0) { + boolExprEqZero = ctx.mkForall(inExprs, boolExprEqZero + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + } + // ****************************************** // + + // ∀f : FSO | isFSO(f) ⇒ 1 ≤ ord(f ) ≤ crd + // ****************************************** // + + temp = exprs; + exprs = outExprs; + + BoolExpr boolExprOrd = ctx.mkForall(ordExprs + , ctx.mkImplies(expression.accept(this) + , ctx.mkAnd(ctx.mkLe(ctx.mkInt(1), (IntExpr) ordFunc.apply(ordExprs)) + , ctx.mkLe((IntExpr) ordFunc.apply(ordExprs) + , (IntExpr) cardinalityFunc.apply(inExprs)))) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + exprs = temp; + + // ****************************************** // + + // ∀i : Nat | 1 ≤ i ≤ crd ⇒ isFSO(inv(i)) + // inv = ord^−1 + // ****************************************** // + + temp = exprs; + exprs = outExprs; + + BoolExpr boolExprInv = ctx.mkForall(invExprs, + ctx.mkImplies(ctx.mkAnd(ctx.mkLe(ctx.mkInt(1), intExpr) + , ctx.mkLe(intExpr, (IntExpr) cardinalityFunc.apply(inExprs))) + , ctx.mkExists(outExprs, ctx.mkAnd( + ctx.mkEq(ordFunc.apply(ordExprs), intExpr) + , expression.accept(this)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + exprs = temp; + + Expr[] oneToOneExprs = new Expr[inSize + outSize * 2]; + for (int i = 0; i < oneToOneExprs.length; i++) { + oneToOneExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + } + + Expr[] firstOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, firstOne, 0, firstOne.length); + + Expr[] secondOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, secondOne, 0, inSize); + System.arraycopy(oneToOneExprs, ordExprs.length, secondOne, inSize, outSize); + + BoolExpr[] eqs = new BoolExpr[outSize]; + for (int i = 0; i < outSize; i++) { + eqs[i] = ctx.mkEq(firstOne[i + inSize], secondOne[i + inSize]); + } + + BoolExpr boolExprOneToOne = ctx.mkForall(oneToOneExprs + , ctx.mkImplies(ctx.mkEq(ordFunc.apply(firstOne), ordFunc.apply(secondOne)) + , ctx.mkAnd(eqs)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + // ****************************************** // + + FuncDecl noToResultFunc = ctx.mkFuncDecl("NO[" + expression.toString() + "]" + varCount++ + , invSorts, ctx.mkIntSort()); + + Expr[] sumExprs = new Expr[ordExprs.length + 1]; + System.arraycopy(ordExprs, 0, sumExprs, 0, ordExprs.length); + sumExprs[sumExprs.length - 1] = intExpr; + + BoolExpr boolExprNoToResult = ctx.mkForall(sumExprs, ctx.mkImplies(ctx.mkEq(ordFunc.apply(ordExprs), intExpr) + , ctx.mkEq(noToResultFunc.apply(invExprs), univToInt == null ? ctx.mkInt(0) : univToInt.apply(outExprs))) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + Expr[] exprsPlusBVminus1 = new Expr[invExprs.length]; + System.arraycopy(inExprs, 0, exprsPlusBVminus1, 0, inSize); + exprsPlusBVminus1[exprsPlusBVminus1.length - 1] = ctx.mkAdd(intExpr, ctx.mkInt(1)); + + BoolExpr boolExprSum = ctx.mkForall(invExprs + , ctx.mkEq(sumFunc.apply(invExprs) + , ctx.mkITE(ctx.mkAnd(ctx.mkLe(ctx.mkInt(1), intExpr) + , ctx.mkLe(intExpr, (IntExpr) cardinalityFunc.apply(inExprs))) + , ctx.mkAdd((IntExpr) sumFunc.apply(exprsPlusBVminus1), (IntExpr) noToResultFunc.apply(invExprs)) + , ctx.mkInt(0))) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + Expr[] sumWithCardExprs = new Expr[invSorts.length]; + System.arraycopy(inExprs, 0, sumWithCardExprs, 0, inExprs.length); + sumWithCardExprs[sumWithCardExprs.length - 1] = ctx.mkInt(1); + + BoolExpr boolExprSumEq = ctx.mkEq(sum.apply(inExprs), sumFunc.apply(sumWithCardExprs)); + if (inSize > 0) { + boolExprSumEq = ctx.mkForall(inExprs, boolExprSumEq + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + } + + goal.add(boolExprEqZero); + goal.add(boolExprOrd); + goal.add(boolExprInv); + goal.add(boolExprOneToOne); + goal.add(boolExprNoToResult); + goal.add(boolExprSum); + goal.add(boolExprSumEq); + + variableExprMap.putAll(tempMap); + + intExprFuncMap.put(expression.count().toString(), cardinalityFunc); + + return sum; + } + + @Override + public IntExpr visit(ExprToIntCast exprToIntCast) { + switch (exprToIntCast.op()) { + case CARDINALITY: + Expression expression = exprToIntCast.expression(); + + if (expression instanceof Variable) + return ctx.mkInt(1); + + FuncDecl func = intExprFuncMap.computeIfAbsent(exprToIntCast.toString(), e -> cardinality(expression)); + + VariableDetector variableDetector = new VariableDetector(); + expression.accept(variableDetector); + Expr[] usedExprs = variableDetector.variables().stream().sorted(Comparator.comparingInt(Object::hashCode)) + .map(v -> variableExprMap.get(v)).filter(Objects::nonNull).toArray(Expr[]::new); + + return (IntExpr) func.apply(usedExprs); + case SUM: + expression = exprToIntCast.expression(); + + if (univToInt == null) + return ctx.mkInt(0); + + if (expression instanceof Variable) + return (IntExpr) univToInt.apply(variableExprMap.get(expression)); + + func = intExprFuncMap.computeIfAbsent(exprToIntCast.toString(), e -> sum(expression)); + + variableDetector = new VariableDetector(); + expression.accept(variableDetector); + usedExprs = variableDetector.variables().stream().sorted(Comparator.comparingInt(Object::hashCode)) + .map(v -> variableExprMap.get(v)).filter(Objects::nonNull).toArray(Expr[]::new); + + return (IntExpr) func.apply(usedExprs); + default: + return ctx.mkInt(0); + } + } + + @Override + public IntExpr visit(NaryIntExpression naryIntExpression) { + Iterator iterator = naryIntExpression.iterator(); + if (iterator.hasNext()) { + IntExpr expr = iterator.next().accept(this); + switch (naryIntExpression.op()) { + case MULTIPLY: + while (iterator.hasNext()) { + expr = (IntExpr) ctx.mkMul(expr, iterator.next().accept(this)); + } + return expr; + case PLUS: + while (iterator.hasNext()) { + expr = (IntExpr) ctx.mkAdd(expr, iterator.next().accept(this)); + } + return expr; + case AND: + while (iterator.hasNext()) { + expr = ctx.mkBV2Int(ctx.mkBVAND(ctx.mkInt2BV(BIT_SIZE, expr), ctx.mkInt2BV(BIT_SIZE, iterator.next().accept(this))), true); + } + return expr; + case OR: + while (iterator.hasNext()) { + expr = ctx.mkBV2Int(ctx.mkBVOR(ctx.mkInt2BV(BIT_SIZE, expr), ctx.mkInt2BV(BIT_SIZE, iterator.next().accept(this))), true); + } + return expr; + } + } + return ctx.mkInt(0); + } + + @Override + public IntExpr visit(BinaryIntExpression binaryIntExpression) { + IntExpr left = binaryIntExpression.left().accept(this); + IntExpr right = binaryIntExpression.right().accept(this); + switch (binaryIntExpression.op()) { + case AND: + return ctx.mkBV2Int(ctx.mkBVAND(ctx.mkInt2BV(BIT_SIZE, left), ctx.mkInt2BV(BIT_SIZE, right)), true); + case OR: + return ctx.mkBV2Int(ctx.mkBVOR(ctx.mkInt2BV(BIT_SIZE, left), ctx.mkInt2BV(BIT_SIZE, right)), true); + case SHA: + return ctx.mkBV2Int(ctx.mkBVASHR(ctx.mkInt2BV(BIT_SIZE, left), ctx.mkInt2BV(BIT_SIZE, right)), true); + case SHL: + return ctx.mkBV2Int(ctx.mkBVSHL(ctx.mkInt2BV(BIT_SIZE, left), ctx.mkInt2BV(BIT_SIZE, right)), true); + case SHR: + return ctx.mkBV2Int(ctx.mkBVLSHR(ctx.mkInt2BV(BIT_SIZE, left), ctx.mkInt2BV(BIT_SIZE, right)), true); + case XOR: + return ctx.mkBV2Int(ctx.mkBVXOR(ctx.mkInt2BV(BIT_SIZE, left), ctx.mkInt2BV(BIT_SIZE, right)), true); + case PLUS: + return (IntExpr) ctx.mkAdd(left, right); + case MINUS: + return (IntExpr) ctx.mkSub(left, right); + case DIVIDE: + return (IntExpr) ctx.mkDiv(left, right); + case MODULO: + return ctx.mkMod(left, right); + case MULTIPLY: + return (IntExpr) ctx.mkMul(left, right); + default: + return ctx.mkInt(0); + } + } + + @Override + public IntExpr visit(UnaryIntExpression intExpr) { + IntExpr expr = intExpr.intExpr().accept(this); + switch (intExpr.op()) { + case SGN: + return (IntExpr) ctx.mkITE(ctx.mkEq(expr, ctx.mkInt(0)) + , ctx.mkInt(0) + , ctx.mkITE(ctx.mkGt(expr, ctx.mkInt(0)) + , ctx.mkInt(1) + , ctx.mkInt(-1))); + case NOT: + return ctx.mkBV2Int(ctx.mkBVNot(ctx.mkInt2BV(BIT_SIZE, expr)), true); + case NEG: + return (IntExpr) ctx.mkMul(expr, ctx.mkInt(-1)); + case ABS: + return (IntExpr) ctx.mkITE(ctx.mkLe(expr, ctx.mkInt(0)), ctx.mkMul(expr, ctx.mkInt(-1)), expr); + default: + return ctx.mkInt(0); + } + } + + private FuncDecl sum(SumExpression sumExpression) { + + VariableDetector variableDetector = new VariableDetector(); + sumExpression.accept(variableDetector); + + List outerVariables = new ArrayList<>(variableDetector.variables()); + List declVariables = new ArrayList<>(); + + Set declExpressionSet = new HashSet<>(); + Set declFormulaSet = new HashSet<>(); + + sumExpression.decls().forEach(decl -> { + if (decl.multiplicity() != Multiplicity.ONE) + throw new HigherOrderDeclException(decl); + if (decl.expression().arity() != 1) + throw new RuntimeException(decl + ": decl.expression.arity != 1"); + declVariables.add(decl.variable()); + declExpressionSet.add(decl.expression()); + declFormulaSet.add(decl.variable().in(decl.expression())); + }); + + outerVariables.removeAll(declVariables); + + outerVariables.sort(Comparator.comparingInt(Object::hashCode)); + + Map tempMap = new HashMap<>(variableExprMap); + + Expr[] declExprs = new Expr[declVariables.size()]; + Expr[] outerExprs = new Expr[outerVariables.size()]; + + for (int i = 0; i < declExprs.length; i++) { + declExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + variableExprMap.put(declVariables.get(i), declExprs[i]); + } + + for (int i = 0; i < outerExprs.length; i++) { + outerExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + variableExprMap.put(outerVariables.get(i), outerExprs[i]); + } + + IntExpr generalSum = sumExpression.intExpr().accept(this); + + // **************************************** // + + int inSize = outerVariables.size(); + int outSize = declVariables.size(); + + Sort[] inSorts = new Sort[inSize]; + Arrays.fill(inSorts, UNIV); + + FuncDecl sum = ctx.mkFuncDecl("SUM[" + sumExpression.toString() + "]" + varCount++ + , inSorts, ctx.mkIntSort()); + + FuncDecl cardinalityFunc = ctx.mkFuncDecl("#[" + sumExpression.toString() + "]" + varCount++ + , inSorts, ctx.mkIntSort()); + + Sort[] sumSorts = new Sort[inSize + 1]; + Arrays.fill(sumSorts, UNIV); + sumSorts[sumSorts.length - 1] = ctx.mkIntSort(); + + FuncDecl sumRecursive = ctx.mkFuncDecl("SUM_RECURSIVE[" + sumExpression.toString() + "]" + varCount++ + , sumSorts, ctx.mkIntSort()); + + Sort[] ordSorts = new Sort[inSize + outSize]; + Arrays.fill(ordSorts, UNIV); + + FuncDecl ordFunc = ctx.mkFuncDecl("ord[" + sumExpression.toString() + "]" + varCount++, ordSorts, ctx.mkIntSort()); + + Expr[] ordExprs = new Expr[ordSorts.length]; + System.arraycopy(outerExprs, 0, ordExprs, 0, inSize); + System.arraycopy(declExprs, 0, ordExprs, inSize, outSize); + + IntExpr intExpr = ctx.mkIntConst("i!" + varCount++); + + Sort[] invSorts = new Sort[inSize + 1]; + System.arraycopy(inSorts, 0, invSorts, 0, inSize); + invSorts[invSorts.length - 1] = ctx.mkIntSort(); + + Expr[] invExprs = new Expr[inSize + 1]; + System.arraycopy(outerExprs, 0, invExprs, 0, inSize); + invExprs[invExprs.length - 1] = intExpr; + + // crd = 0 ⇔ ∀f : FSO, ¬isFSO(f ) + // ****************************************** // + BoolExpr boolExprEqZero = ctx.mkIff(ctx.mkEq(cardinalityFunc.apply(outerExprs), ctx.mkInt(0)), Expression.union(declExpressionSet).no().accept(this)); + + if (inSize > 0) { + boolExprEqZero = ctx.mkForall(outerExprs, boolExprEqZero + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + } + // ****************************************** // + + // ∀f : FSO | isFSO(f) ⇒ 1 ≤ ord(f ) ≤ crd + // ****************************************** // + + BoolExpr boolExprOrd = ctx.mkForall(ordExprs + , ctx.mkImplies(Formula.and(declFormulaSet).accept(this) + , ctx.mkAnd(ctx.mkLe(ctx.mkInt(1), (IntExpr) ordFunc.apply(ordExprs)) + , ctx.mkLe((IntExpr) ordFunc.apply(ordExprs) + , (IntExpr) cardinalityFunc.apply(outerExprs)))) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + // ****************************************** // + + // ∀i : Nat | 1 ≤ i ≤ crd ⇒ isFSO(inv(i)) + // inv = ord^−1 + // ****************************************** // + + BoolExpr boolExprInv = ctx.mkForall(invExprs, + ctx.mkImplies(ctx.mkAnd(ctx.mkLe(ctx.mkInt(1), intExpr) + , ctx.mkLe(intExpr, (IntExpr) cardinalityFunc.apply(outerExprs))) + , ctx.mkExists(declExprs, ctx.mkAnd( + ctx.mkEq(ordFunc.apply(ordExprs), intExpr) + , Formula.and(declFormulaSet).accept(this)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + Expr[] oneToOneExprs = new Expr[inSize + outSize * 2]; + for (int i = 0; i < oneToOneExprs.length; i++) { + oneToOneExprs[i] = ctx.mkConst("x!" + varCount++, UNIV); + } + + Expr[] firstOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, firstOne, 0, firstOne.length); + + Expr[] secondOne = new Expr[ordExprs.length]; + System.arraycopy(oneToOneExprs, 0, secondOne, 0, inSize); + System.arraycopy(oneToOneExprs, ordExprs.length, secondOne, inSize, outSize); + + BoolExpr[] eqs = new BoolExpr[outSize]; + for (int i = 0; i < outSize; i++) { + eqs[i] = ctx.mkEq(firstOne[i + inSize], secondOne[i + inSize]); + } + + BoolExpr boolExprOneToOne = ctx.mkForall(oneToOneExprs + , ctx.mkImplies(ctx.mkEq(ordFunc.apply(firstOne), ordFunc.apply(secondOne)) + , ctx.mkAnd(eqs)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + goal.add(boolExprEqZero); + goal.add(boolExprOrd); + goal.add(boolExprInv); + goal.add(boolExprOneToOne); + + // ****************************************** // + + Expr[] allExprs = new Expr[ordExprs.length + 1]; + System.arraycopy(ordExprs, 0, allExprs, 0, ordExprs.length); + allExprs[allExprs.length - 1] = intExpr; + + Expr[] sumRecursiveExprsPlus1 = new Expr[invExprs.length]; + System.arraycopy(outerExprs, 0, sumRecursiveExprsPlus1, 0, inSize); + sumRecursiveExprsPlus1[sumRecursiveExprsPlus1.length - 1] = ctx.mkAdd(intExpr, ctx.mkInt(1)); + + FuncDecl generalFunc = ctx.mkFuncDecl("PARTIAL_SUM[" + sumExpression.toString() + "]" + varCount++, invSorts, ctx.mkIntSort()); + + BoolExpr boolExprGeneral = ctx.mkForall(allExprs + , ctx.mkImplies(ctx.mkEq(ordFunc.apply(ordExprs), intExpr) + , ctx.mkEq(generalFunc.apply(invExprs), generalSum)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + goal.add(boolExprGeneral); + + BoolExpr boolExprSumRecursive = ctx.mkForall(invExprs, ctx.mkEq(sumRecursive.apply(invExprs) + , ctx.mkITE(ctx.mkAnd(ctx.mkLe(ctx.mkInt(1), intExpr) + , ctx.mkLe(intExpr, (IntExpr) cardinalityFunc.apply(outerExprs))) + , ctx.mkAdd((IntExpr) generalFunc.apply(invExprs), (IntExpr) sumRecursive.apply(sumRecursiveExprsPlus1)) + , ctx.mkInt(0))) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + goal.add(boolExprSumRecursive); + + Expr[] outerExprsPlus1 = new Expr[outerExprs.length + 1]; + System.arraycopy(outerExprs, 0, outerExprsPlus1, 0, outerExprs.length); + outerExprsPlus1[outerExprsPlus1.length - 1] = ctx.mkInt(1); + + BoolExpr boolExprSum = ctx.mkForall(outerExprs, ctx.mkEq(sum.apply(outerExprs), sumRecursive.apply(outerExprsPlus1)) + , 0, null, null, ctx.mkSymbol(quantifierPrefix + quantifierID++), null); + + goal.add(boolExprSum); + + intExprFuncMap.put(sumExpression.toString(), sum); + + variableExprMap = tempMap; + + return sum; + } + + @Override + public IntExpr visit(SumExpression sumExpression) { + VariableDetector variableDetector = new VariableDetector(); + sumExpression.accept(variableDetector); + + List outerVariables = new ArrayList<>(variableDetector.variables()); + + sumExpression.decls().forEach(decl -> { + outerVariables.remove(decl.variable()); + }); + + outerVariables.sort(Comparator.comparingInt(Object::hashCode)); + + Expr[] inExpr = outerVariables.stream().map(v -> variableExprMap.get(v)).toArray(Expr[]::new); + + return (IntExpr) intExprFuncMap.computeIfAbsent(sumExpression.toString(), s -> sum(sumExpression)).apply(inExpr); + } + + @Override + public BoolExpr visit(IntComparisonFormula intComparisonFormula) { + switch (intComparisonFormula.op()) { + case EQ: + return ctx.mkEq(intComparisonFormula.left().accept(this) + , intComparisonFormula.right().accept(this)); + case GT: + return ctx.mkGt(intComparisonFormula.left().accept(this) + , intComparisonFormula.right().accept(this)); + case LT: + return ctx.mkLt(intComparisonFormula.left().accept(this) + , intComparisonFormula.right().accept(this)); + case GTE: + return ctx.mkGe(intComparisonFormula.left().accept(this) + , intComparisonFormula.right().accept(this)); + case LTE: + return ctx.mkLe(intComparisonFormula.left().accept(this) + , intComparisonFormula.right().accept(this)); + default: + return ctx.mkFalse(); + } + } +} diff --git a/Source/kodkod/test_script.out b/Source/kodkod/test_script.out new file mode 100644 index 0000000..276b997 --- /dev/null +++ b/Source/kodkod/test_script.out @@ -0,0 +1,766 @@ +Aug 8, 2018 2:12:09 PM + +kodkod.examples.models.algorithm.discovery.INSLabelCheck is being tested. +Test 1: 1824 ms +Test 2: 888 ms +Test 3: 796 ms +Test 4: 423 ms +Test 5: 384 ms + +kodkod.examples.models.algorithm.discovery.INSLabelRun is being tested. +Test 1: 123 ms +Test 2: 111 ms +Test 3: 119 ms +Test 4: 75 ms +Test 5: 91 ms + +kodkod.examples.models.algorithm.election.ringleadLeaderHighestCheck is being tested. +Test 1: 581 ms +Test 2: 454 ms +Test 3: 459 ms +Test 4: 519 ms +Test 5: 526 ms + +kodkod.examples.models.algorithm.election.ringleadLivenessCheck is being tested. +Test 1: 21 ms +Test 2: 13 ms +Test 3: 15 ms +Test 4: 15 ms +Test 5: 15 ms + +kodkod.examples.models.algorithm.election.ringleadNeverFindLeaderRun is being tested. +Test 1: 16 ms +Test 2: 15 ms +Test 3: 14 ms +Test 4: 13 ms +Test 5: 13 ms + +kodkod.examples.models.algorithm.election.ringleadOneLeaderCheck is being tested. +Test 1: 15 ms +Test 2: 13 ms +Test 3: 22 ms +Test 4: 14 ms +Test 5: 12 ms + +kodkod.examples.models.algorithm.election.ringleadSomeLeaderRun is being tested. +Test 1: 183 ms +Test 2: 165 ms +Test 3: 177 ms +Test 4: 146 ms +Test 5: 138 ms + +kodkod.examples.models.algorithm.election.stable_ringleadCBadLivenessTraceRun is being tested. +Test 1: 249 ms +Test 2: 193 ms +Test 3: 166 ms +Test 4: 113 ms +Test 5: 130 ms + +kodkod.examples.models.algorithm.election.stable_ringleadCMustConvergeCheck is being tested. +Test 1: 99 ms +Test 2: 82 ms +Test 3: 100 ms +Test 4: 84 ms +Test 5: 83 ms + +kodkod.examples.models.algorithm.election.stable_ringleadCoveringRun is being tested. +Test 1: 35 ms +Test 2: 45 ms +Test 3: 43 ms +Test 4: 37 ms +Test 5: 31 ms + +kodkod.examples.models.algorithm.election.stable_ringleadCTraceWithoutLoopRun is being tested. +Test 1: 31 ms +Test 2: 43 ms +Test 3: 49 ms +Test 4: 44 ms +Test 5: 33 ms + +kodkod.examples.models.algorithm.election.stable_ringleadDBadLivenessTraceRun is being tested. +Test 1: 34 ms +Test 2: 35 ms +Test 3: 40 ms +Test 4: 46 ms +Test 5: 41 ms + +kodkod.examples.models.algorithm.election.stable_ringleadDTraceWithoutLoopRun is being tested. +Test 1: 32 ms +Test 2: 31 ms +Test 3: 30 ms +Test 4: 40 ms +Test 5: 40 ms + +kodkod.examples.models.algorithm.gc.marksweepgcCompletenessCheck is being tested. +Test 1: 13 ms +Test 2: 12 ms +Test 3: 9 ms +Test 4: 12 ms +Test 5: 10 ms + +kodkod.examples.models.algorithm.gc.marksweepgcSoundness1Check is being tested. +Test 1: 9 ms +Test 2: 8 ms +Test 3: 8 ms +Test 4: 9 ms +Test 5: 8 ms + +kodkod.examples.models.algorithm.gc.marksweepgcSoundness2Check is being tested. +Test 1: 8 ms +Test 2: 8 ms +Test 3: 8 ms +Test 4: 7 ms +Test 5: 8 ms + +kodkod.examples.models.algorithm.multicasting.iolusOutsiderCantReadCheck is being tested. +Test 1: 2165 ms +Test 2: 2038 ms +Test 3: 1918 ms +Test 4: 1913 ms +Test 5: 1879 ms + +kodkod.examples.models.algorithm.mutex.dijkstra2ProcessDeadlockRun is being tested. +Test 1: 5 ms +Test 2: 4 ms +Test 3: 4 ms +Test 4: 4 ms +Test 5: 4 ms + +kodkod.examples.models.algorithm.mutex.dijkstra2ProcessDijkstraPreventsDeadlocksCheck is being tested. +Test 1: 146 ms +Test 2: 123 ms +Test 3: 109 ms +Test 4: 120 ms +Test 5: 123 ms + +kodkod.examples.models.algorithm.mutex.dijkstra2ProcessShowDijkstraRun is being tested. +Test 1: 10 ms +Test 2: 7 ms +Test 3: 8 ms +Test 4: 7 ms +Test 5: 8 ms + +kodkod.examples.models.algorithm.mutex.dijkstraKStateClosureCheck is being tested. +Test 1: 2978 ms +Test 2: 2966 ms +Test 3: 2892 ms +Test 4: 3077 ms +Test 5: 3088 ms + +kodkod.examples.models.algorithm.mutex.dijkstraKStateTraceShorterThanMaxLoopRun is being tested. +Test 1: 8 ms +Test 2: 9 ms +Test 3: 7 ms +Test 4: 9 ms +Test 5: 10 ms + +kodkod.examples.models.algorithm.mutex.dijkstraKStateTwoPrivilegedRun is being tested. +Test 1: 20 ms +Test 2: 17 ms +Test 3: 14 ms +Test 4: 14 ms +Test 5: 38 ms + +kodkod.examples.models.algorithm.mutex.petersonNotStuckCheck is being tested. +Test 1: 196 ms +Test 2: 175 ms +Test 3: 194 ms +Test 4: 175 ms +Test 5: 176 ms + +kodkod.examples.models.algorithm.mutex.petersonSafetyCheck is being tested. +Test 1: 72 ms +Test 2: 62 ms +Test 3: 51 ms +Test 4: 60 ms +Test 5: 56 ms + +kodkod.examples.models.algorithm.mutex.petersonTwoRun is being tested. +Test 1: 106 ms +Test 2: 118 ms +Test 3: 119 ms +Test 4: 102 ms +Test 5: 118 ms + +kodkod.examples.models.algorithm.ringOrientation.stableOrientRingClosureCheck is being tested. +Test 1: 14 ms +Test 2: 12 ms +Test 3: 16 ms +Test 4: 14 ms +Test 5: 8 ms + +kodkod.examples.models.algorithm.ringOrientation.stableOrientRingSomeStateRun is being tested. +Test 1: 8 ms +Test 2: 8 ms +Test 3: 11 ms +Test 4: 12 ms +Test 5: 10 ms + +kodkod.examples.models.algorithm.spanningTree.opt_spanTreeBadLivenessTraceRun is being tested. +Test 1: 221 ms +Test 2: 161 ms +Test 3: 161 ms +Test 4: 156 ms +Test 5: 174 ms + +kodkod.examples.models.algorithm.spanningTree.opt_spanTreeClosureCheck is being tested. +Test 1: 262 ms +Test 2: 234 ms +Test 3: 215 ms +Test 4: 217 ms +Test 5: 200 ms + +kodkod.examples.models.algorithm.spanningTree.opt_spanTreeSuccessfulRun is being tested. +Test 1: 26 ms +Test 2: 21 ms +Test 3: 22 ms +Test 4: 43 ms +Test 5: 22 ms + +kodkod.examples.models.algorithm.synchronsation.syncimplCorrectnessCheck is being tested. +Test 1: 12 ms +Test 2: 9 ms +Test 3: 9 ms +Test 4: 6 ms +Test 5: 6 ms + +kodkod.examples.models.algorithm.synchronsation.syncSpecNotUniqueRun is being tested. +Test 1: 770 ms +Test 2: 761 ms +Test 3: 712 ms +Test 4: 858 ms +Test 5: 871 ms + +kodkod.examples.models.model.java.javatypesRun is being tested. +Test 1: 3 ms +Test 2: 3 ms +Test 3: 3 ms +Test 4: 4 ms +Test 5: 3 ms + +kodkod.examples.models.model.microsoftCom.comTheorem1Check is being tested. +Test 1: 13 ms +Test 2: 11 ms +Test 3: 11 ms +Test 4: 11 ms +Test 5: 11 ms + +kodkod.examples.models.model.microsoftCom.comTheorem2Check is being tested. +Test 1: 12 ms +Test 2: 12 ms +Test 3: 13 ms +Test 4: 13 ms +Test 5: 12 ms + +kodkod.examples.models.model.microsoftCom.comTheorem3Check is being tested. +Test 1: 16 ms +Test 2: 11 ms +Test 3: 11 ms +Test 4: 11 ms +Test 5: 13 ms + +kodkod.examples.models.model.microsoftCom.comTheorem4aCheck is being tested. +Test 1: 20 ms +Test 2: 21 ms +Test 3: 24 ms +Test 4: 19 ms +Test 5: 17 ms + +kodkod.examples.models.model.microsoftCom.comTheorem4bCheck is being tested. +Test 1: 13 ms +Test 2: 13 ms +Test 3: 12 ms +Test 4: 10 ms +Test 5: 11 ms + +kodkod.examples.models.model.transport.railwayPolicyWorksCheck is being tested. +Test 1: 6 ms +Test 2: 6 ms +Test 3: 5 ms +Test 4: 6 ms +Test 5: 5 ms + +kodkod.examples.models.model.transport.railwayTrainsMoveLegalRun is being tested. +Test 1: 6 ms +Test 2: 5 ms +Test 3: 6 ms +Test 4: 8 ms +Test 5: 7 ms + +kodkod.examples.models.model.typography.paragraphNumberingAddNeverReducesCheck is being tested. +Test 1: 34 ms +Test 2: 36 ms +Test 3: 33 ms +Test 4: 27 ms +Test 5: 27 ms + +kodkod.examples.models.model.typography.paragraphNumberingPreserveForestCheck is being tested. +Test 1: 46 ms +Test 2: 70 ms +Test 3: 45 ms +Test 4: 41 ms +Test 5: 41 ms + +kodkod.examples.models.puzzle.farmerChickenFox.farmerNoQuantumObjectCheck is being tested. +Test 1: 13 ms +Test 2: 17 ms +Test 3: 18 ms +Test 4: 17 ms +Test 5: 16 ms + +kodkod.examples.models.puzzle.farmerChickenFox.farmerSolvePuzzleRun is being tested. +Test 1: 9 ms +Test 2: 10 ms +Test 3: 13 ms +Test 4: 12 ms +Test 5: 9 ms + +kodkod.examples.models.puzzle.halmosHandshake.handshakeP10Run is being tested. +Test 1: 1289 ms +Test 2: 1103 ms +Test 3: 1049 ms +Test 4: 1051 ms +Test 5: 1076 ms + +kodkod.examples.models.puzzle.halmosHandshake.handshakeP12Run is being tested. +Test 1: 18521 ms +Test 2: 18497 ms +Test 3: 18466 ms +Test 4: 18494 ms +Test 5: 18371 ms + +kodkod.examples.models.puzzle.halmosHandshake.handshakeP14Run is being tested. +Test 1: Couldn't solve in 60 seconds +Aborting... + +kodkod.examples.models.puzzle.halmosHandshake.handshakeP16Run is being tested. +Test 1: Couldn't solve in 60 seconds +Aborting... + +kodkod.examples.models.puzzle.prisonerRoomVisit.prisonerCountInvariantCheck is being tested. +Test 1: 3010 ms +Test 2: 2257 ms +Test 3: 2322 ms +Test 4: 2418 ms +Test 5: 2329 ms + +kodkod.examples.models.puzzle.prisonerRoomVisit.prisonerRun is being tested. +Test 1: 127 ms +Test 2: 183 ms +Test 3: 97 ms +Test 4: 110 ms +Test 5: 120 ms + +kodkod.examples.models.puzzle.prisonerRoomVisit.prisonerSafetyCheck is being tested. +Test 1: 543 ms +Test 2: 420 ms +Test 3: 446 ms +Test 4: 454 ms +Test 5: 422 ms + +kodkod.examples.models.puzzle.prisonerRoomVisit.prisonerTheoremCheck is being tested. +Test 1: 611 ms +Test 2: 630 ms +Test 3: 600 ms +Test 4: 595 ms +Test 5: 635 ms + +kodkod.examples.models.puzzle.prisonerRoomVisit.prisonerTypeOKCheck is being tested. +Test 1: 836 ms +Test 2: 815 ms +Test 3: 811 ms +Test 4: 827 ms +Test 5: 818 ms + +kodkod.examples.models.simple.book.birthdayAddWorksCheck is being tested. +Test 1: 3 ms +Test 2: 3 ms +Test 3: 3 ms +Test 4: 2 ms +Test 5: 2 ms + +kodkod.examples.models.simple.book.birthdayBusyDayRun is being tested. +Test 1: 3 ms +Test 2: 2 ms +Test 3: 1 ms +Test 4: 2 ms +Test 5: 2 ms + +kodkod.examples.models.simple.book.birthdayDellsUndoCheck is being tested. +Test 1: 3 ms +Test 2: 4 ms +Test 3: 5 ms +Test 4: 5 ms +Test 5: 5 ms + +kodkod.examples.models.simple.games.lifeInterestingRun is being tested. +Test 1: 38 ms +Test 2: 33 ms +Test 3: 33 ms +Test 4: 40 ms +Test 5: 39 ms + +kodkod.examples.models.simple.games.lifeShowRun is being tested. +Test 1: 2877 ms +Test 2: 3138 ms +Test 3: 4113 ms +Test 4: 4094 ms +Test 5: 4099 ms + +kodkod.examples.models.simple.games.lifeSquareRun is being tested. +Test 1: 121 ms +Test 2: 124 ms +Test 3: 126 ms +Test 4: 123 ms +Test 5: 121 ms + +kodkod.examples.models.simple.genealogy.genealogyShowRun is being tested. +Test 1: 15 ms +Test 2: 14 ms +Test 3: 14 ms +Test 4: 14 ms +Test 5: 15 ms + +kodkod.examples.models.simple.genealogy.grandpaOwnGrandpaRun is being tested. +Test 1: 8 ms +Test 2: 7 ms +Test 3: 8 ms +Test 4: 23 ms +Test 5: 10 ms + +kodkod.examples.models.simple.lists.listsEmptiesCheck is being tested. +Test 1: 62 ms +Test 2: 37 ms +Test 3: 35 ms +Test 4: 33 ms +Test 5: 34 ms + +kodkod.examples.models.simple.lists.listsReflexiveCheck is being tested. +Test 1: 94 ms +Test 2: 86 ms +Test 3: 87 ms +Test 4: 83 ms +Test 5: 89 ms + +kodkod.examples.models.simple.lists.listsShowRun is being tested. +Test 1: 19 ms +Test 2: 14 ms +Test 3: 12 ms +Test 4: 12 ms +Test 5: 13 ms + +kodkod.examples.models.simple.lists.listsSymmetricCheck is being tested. +Test 1: 196 ms +Test 2: 190 ms +Test 3: 200 ms +Test 4: 202 ms +Test 5: 206 ms + +kodkod.examples.models.simple.stateMachine.flipflopShowRun is being tested. +Test 1: 4 ms +Test 2: 10 ms +Test 3: 6 ms +Test 4: 18 ms +Test 5: 5 ms + +kodkod.examples.models.simple.stateMachine.reset_flip_flop_with_enableShowRun is being tested. +Test 1: 6 ms +Test 2: 5 ms +Test 3: 15 ms +Test 4: 6 ms +Test 5: 4 ms + +kodkod.examples.models.softwareAbstractions.appendixE.p306HotelNotIntruderCheck is being tested. +Test 1: 12603 ms +Test 2: 12406 ms +Test 3: 12556 ms +Test 4: 12162 ms +Test 5: 12266 ms + +kodkod.examples.models.softwareAbstractions.chapter2.addressBook3dAddIdempotentCheck is being tested. +Test 1: 12 ms +Test 2: 10 ms +Test 3: 11 ms +Test 4: 10 ms +Test 5: 10 ms + +kodkod.examples.models.softwareAbstractions.chapter2.addressBook3dAddLocalCheck is being tested. +Test 1: 8 ms +Test 2: 7 ms +Test 3: 7 ms +Test 4: 9 ms +Test 5: 8 ms + +kodkod.examples.models.softwareAbstractions.chapter2.addressBook3dDellUndoesAddCheck is being tested. +Test 1: 11 ms +Test 2: 10 ms +Test 3: 11 ms +Test 4: 11 ms +Test 5: 10 ms + +kodkod.examples.models.softwareAbstractions.chapter2.addressBook3dLookupYields2Check is being tested. +Test 1: 2562 ms +Test 2: 2352 ms +Test 3: 2458 ms +Test 4: 2414 ms +Test 5: 2416 ms + +kodkod.examples.models.softwareAbstractions.chapter2.addressBook3dLookupYieldsCheck is being tested. +Test 1: 13 ms +Test 2: 11 ms +Test 3: 12 ms +Test 4: 12 ms +Test 5: 11 ms + +kodkod.examples.models.softwareAbstractions.chapter4.filesystemFileInDirCheck is being tested. +Test 1: 2 ms +Test 2: 1 ms +Test 3: 1 ms +Test 4: 1 ms +Test 5: 1 ms + +kodkod.examples.models.softwareAbstractions.chapter4.filesystemRootTopCheck is being tested. +Test 1: 2 ms +Test 2: 1 ms +Test 3: 2 ms +Test 4: 2 ms +Test 5: 1 ms + +kodkod.examples.models.softwareAbstractions.chapter4.filesystemSomeDirCheck is being tested. +Test 1: 2 ms +Test 2: 2 ms +Test 3: 2 ms +Test 4: 2 ms +Test 5: 3 ms + +kodkod.examples.models.softwareAbstractions.chapter4.grandpa3NoSelfFatherCheck is being tested. +Test 1: 4 ms +Test 2: 3 ms +Test 3: 3 ms +Test 4: 6 ms +Test 5: 4 ms + +kodkod.examples.models.softwareAbstractions.chapter4.grandpa3OwnGrandpaRun is being tested. +Test 1: 7 ms +Test 2: 9 ms +Test 3: 6 ms +Test 4: 6 ms +Test 5: 6 ms + +kodkod.examples.models.softwareAbstractions.chapter4.grandpa3SameCheck is being tested. +Test 1: 5 ms +Test 2: 7 ms +Test 3: 5 ms +Test 4: 4 ms +Test 5: 4 ms + +kodkod.examples.models.softwareAbstractions.chapter4.lightsSafeCheck is being tested. +Test 1: 5 ms +Test 2: 4 ms +Test 3: 5 ms +Test 4: 4 ms +Test 5: 5 ms + +kodkod.examples.models.softwareAbstractions.chapter5.addressBookAddLocalCheck is being tested. +Test 1: 5 ms +Test 2: 7 ms +Test 3: 5 ms +Test 4: 5 ms +Test 5: 5 ms + +kodkod.examples.models.softwareAbstractions.chapter5.addressBookAddRun is being tested. +Test 1: 14 ms +Test 2: 3 ms +Test 3: 7 ms +Test 4: 5 ms +Test 5: 4 ms + +kodkod.examples.models.softwareAbstractions.chapter5.sets2ClosedCheck is being tested. +Test 1: 600 ms +Test 2: 540 ms +Test 3: 525 ms +Test 4: 549 ms +Test 5: 546 ms + +kodkod.examples.models.softwareAbstractions.chapter6.hotel4NoBadEntryCheck is being tested. +Test 1: 35540 ms +Test 2: 35460 ms +Test 3: 35403 ms +Test 4: 24950 ms +Test 5: 29735 ms + +kodkod.examples.models.softwareAbstractions.chapter6.mediaAssetsCutPasteCheck is being tested. +Test 1: 16 ms +Test 2: 14 ms +Test 3: 28 ms +Test 4: 18 ms +Test 5: 21 ms + +kodkod.examples.models.softwareAbstractions.chapter6.mediaAssetsNoBadEntryCheck is being tested. +Test 1: 13 ms +Test 2: 7 ms +Test 3: 6 ms +Test 4: 6 ms +Test 5: 6 ms + +kodkod.examples.models.softwareAbstractions.chapter6.mediaAssetsPasteCutCheck is being tested. +Test 1: 23 ms +Test 2: 22 ms +Test 3: 23 ms +Test 4: 56 ms +Test 5: 36 ms + +kodkod.examples.models.softwareAbstractions.chapter6.mediaAssetsPasteNotAffectHiddenCheck is being tested. +Test 1: 16 ms +Test 2: 16 ms +Test 3: 16 ms +Test 4: 12 ms +Test 5: 14 ms + +kodkod.examples.models.softwareAbstractions.chapter6.memory.abstractMemoryWriteIdempotentCheck is being tested. +Test 1: 8 ms +Test 2: 7 ms +Test 3: 14 ms +Test 4: 6 ms +Test 5: 6 ms + +kodkod.examples.models.softwareAbstractions.chapter6.memory.abstractMemoryWriteReadCheck is being tested. +Test 1: 5 ms +Test 2: 5 ms +Test 3: 24 ms +Test 4: 5 ms +Test 5: 7 ms + +kodkod.examples.models.softwareAbstractions.chapter6.memory.cacheMemoryLoadNotObservableCheck is being tested. +Test 1: 10 ms +Test 2: 8 ms +Test 3: 9 ms +Test 4: 9 ms +Test 5: 20 ms + +kodkod.examples.models.softwareAbstractions.chapter6.ringElection2AtLeastOneElectedCheck is being tested. +Test 1: 46 ms +Test 2: 49 ms +Test 3: 61 ms +Test 4: 44 ms +Test 5: 40 ms + +kodkod.examples.models.softwareAbstractions.chapter6.ringElection2AtMostOneElectedCheck is being tested. +Test 1: 38 ms +Test 2: 59 ms +Test 3: 51 ms +Test 4: 37 ms +Test 5: 36 ms + +kodkod.examples.models.softwareAbstractions.chapter6.ringElection2LooplessPathRun is being tested. +Test 1: 103 ms +Test 2: 107 ms +Test 3: 76 ms +Test 4: 67 ms +Test 5: 120 ms + +kodkod.examples.models.softwareAbstractions.chapter6.ringElection2ShowRun is being tested. +Test 1: 26 ms +Test 2: 32 ms +Test 3: 15 ms +Test 4: 27 ms +Test 5: 15 ms + +kodkod.examples.models.util.messaging.messagingOutOfOrderRun is being tested. +Test 1: 34 ms +Test 2: 42 ms +Test 3: 30 ms +Test 4: 30 ms +Test 5: 61 ms + +kodkod.examples.models.util.messaging.messagingSomeStateRun is being tested. +Test 1: 11 ms +Test 2: 9 ms +Test 3: 12 ms +Test 4: 8 ms +Test 5: 6 ms + +kodkod.examples.models.util.trace.traceTotalCheck is being tested. +Test 1: 5 ms +Test 2: 2 ms +Test 3: 4 ms +Test 4: 1 ms +Test 5: 2 ms + +kodkod.examples.models.util.types.orderingCorrectCheck0 is being tested. +Test 1: 4 ms +Test 2: 1 ms +Test 3: 1 ms +Test 4: 1 ms +Test 5: 1 ms + +kodkod.examples.models.util.types.orderingCorrectCheck1 is being tested. +Test 1: 2 ms +Test 2: 1 ms +Test 3: 1 ms +Test 4: 2 ms +Test 5: 1 ms + +kodkod.examples.models.util.types.orderingCorrectCheck2 is being tested. +Test 1: 1 ms +Test 2: 2 ms +Test 3: 2 ms +Test 4: 1 ms +Test 5: 5 ms + +kodkod.examples.models.util.types.orderingCorrectCheck3 is being tested. +Test 1: 6 ms +Test 2: 3 ms +Test 3: 3 ms +Test 4: 14 ms +Test 5: 3 ms + +kodkod.examples.models.util.types.orderingCorrectCheck4 is being tested. +Test 1: 3 ms +Test 2: 4 ms +Test 3: 3 ms +Test 4: 19 ms +Test 5: 4 ms + +kodkod.examples.models.util.types.orderingCorrectCheck5 is being tested. +Test 1: 3 ms +Test 2: 4 ms +Test 3: 2 ms +Test 4: 3 ms +Test 5: 2 ms + +kodkod.examples.models.util.types.orderingRun1 is being tested. +Test 1: 1 ms +Test 2: 1 ms +Test 3: 1 ms +Test 4: 0 ms +Test 5: 0 ms + +kodkod.examples.models.util.types.orderingRun2 is being tested. +Test 1: 0 ms +Test 2: 0 ms +Test 3: 0 ms +Test 4: 7 ms +Test 5: 1 ms + +kodkod.examples.models.util.types.orderingRun3 is being tested. +Test 1: 2 ms +Test 2: 1 ms +Test 3: 1 ms +Test 4: 1 ms +Test 5: 1 ms + +kodkod.examples.models.util.types.orderingRun4 is being tested. +Test 1: 1 ms +Test 2: 0 ms +Test 3: 1 ms +Test 4: 1 ms +Test 5: 1 ms + +kodkod.examples.models.util.types.orderingRun5 is being tested. +Test 1: 2 ms +Test 2: 0 ms +Test 3: 1 ms +Test 4: 1 ms +Test 5: 1 ms +