From a591cb921930f0751bd0100c787b6e664b99e0f6 Mon Sep 17 00:00:00 2001 From: hellerve Date: Thu, 27 Dec 2018 16:09:41 +0100 Subject: [PATCH] no toolboxes, apparently --- .gitignore | 1 + DieHard.toolbox/.project | 24 - .../.settings/org.lamport.tla.toolbox.prefs | 2 - DieHard.toolbox/DieHard___Model_1.launch | 46 - ...rd___Model_1_SnapShot_1545406431357.launch | 43 - ...rd___Model_1_SnapShot_1545406506746.launch | 45 - ...rd___Model_1_SnapShot_1545406592577.launch | 46 - DieHard.toolbox/Model_1/DieHard.tla | 46 - DieHard.toolbox/Model_1/MC.cfg | 11 - DieHard.toolbox/Model_1/MC.tla | 22 - .../DieHard.tla | 46 - .../Model_1_SnapShot_1545406431357/MC.cfg | 7 - .../Model_1_SnapShot_1545406431357/MC.tla | 14 - .../DieHard.tla | 46 - .../Model_1_SnapShot_1545406506746/MC.cfg | 10 - .../Model_1_SnapShot_1545406506746/MC.tla | 18 - .../DieHard.tla | 46 - .../Model_1_SnapShot_1545406592577/MC.cfg | 11 - .../Model_1_SnapShot_1545406592577/MC.tla | 22 - TCommit.toolbox/.project | 24 - .../.settings/org.lamport.tla.toolbox.prefs | 2 - TCommit.toolbox/Model_1/MC.cfg | 14 - TCommit.toolbox/Model_1/MC.tla | 27 - TCommit.toolbox/Model_1/TCommit.tla | 82 -- .../Model_1_SnapShot_1545410479536/MC.cfg | 13 - .../Model_1_SnapShot_1545410479536/MC.tla | 23 - .../TCommit.tla | 82 -- .../Model_1_SnapShot_1545410497334/MC.cfg | 13 - .../Model_1_SnapShot_1545410497334/MC.tla | 23 - .../TCommit.tla | 82 -- .../Model_1_SnapShot_1545410597019/MC.cfg | 14 - .../Model_1_SnapShot_1545410597019/MC.tla | 27 - .../TCommit.tla | 82 -- TCommit.toolbox/TCommit.pdf | Bin 147967 -> 0 bytes TCommit.toolbox/TCommit.tex | 1082 ----------------- TCommit.toolbox/TCommit___Model_1.launch | 48 - ...it___Model_1_SnapShot_1545410479536.launch | 47 - ...it___Model_1_SnapShot_1545410497334.launch | 47 - ...it___Model_1_SnapShot_1545410597019.launch | 48 - TwoPhase.toolbox/.project | 29 - .../.settings/org.lamport.tla.toolbox.prefs | 2 - TwoPhase.toolbox/Model_1/MC.cfg | 21 - TwoPhase.toolbox/Model_1/MC.tla | 37 - TwoPhase.toolbox/Model_1/TCommit.tla | 82 -- TwoPhase.toolbox/Model_1/TwoPhase.tla | 182 --- .../Model_1_SnapShot_1545922765832/MC.cfg | 13 - .../Model_1_SnapShot_1545922765832/MC.tla | 23 - .../TCommit.tla | 82 -- .../TwoPhase.tla | 182 --- .../Model_1_SnapShot_1545922881813/MC.cfg | 13 - .../Model_1_SnapShot_1545922881813/MC.tla | 23 - .../TCommit.tla | 82 -- .../TwoPhase.tla | 182 --- .../Model_1_SnapShot_1545922927774/MC.cfg | 20 - .../Model_1_SnapShot_1545922927774/MC.tla | 33 - .../TCommit.tla | 82 -- .../TwoPhase.tla | 182 --- .../Model_1_SnapShot_1545923020132/MC.cfg | 21 - .../Model_1_SnapShot_1545923020132/MC.tla | 37 - .../TCommit.tla | 82 -- .../TwoPhase.tla | 182 --- TwoPhase.toolbox/TwoPhase___Model_1.launch | 48 - ...se___Model_1_SnapShot_1545922765832.launch | 47 - ...se___Model_1_SnapShot_1545922881813.launch | 47 - ...se___Model_1_SnapShot_1545922927774.launch | 47 - ...se___Model_1_SnapShot_1545923020132.launch | 48 - Untitled.toolbox/.project | 24 - .../.settings/org.lamport.tla.toolbox.prefs | 2 - Untitled.toolbox/Model_1/MC.cfg | 7 - Untitled.toolbox/Model_1/MC.tla | 14 - Untitled.toolbox/Model_1/SimpleProgram.tla | 21 - .../Model_1_SnapShot_1545403778936/MC.cfg | 7 - .../Model_1_SnapShot_1545403778936/MC.tla | 14 - .../SimpleProgram.tla | 21 - .../Model_1_SnapShot_1545403888272/MC.cfg | 7 - .../Model_1_SnapShot_1545403888272/MC.tla | 14 - .../SimpleProgram.tla | 21 - Untitled.toolbox/SimpleProgram.pdf | Bin 99659 -> 0 bytes Untitled.toolbox/SimpleProgram.tex | 976 --------------- Untitled.toolbox/Untitled___Model_1.launch | 43 - ...ed___Model_1_SnapShot_1545403778936.launch | 8 - ...ed___Model_1_SnapShot_1545403888272.launch | 43 - 82 files changed, 1 insertion(+), 5336 deletions(-) create mode 100644 .gitignore delete mode 100644 DieHard.toolbox/.project delete mode 100644 DieHard.toolbox/.settings/org.lamport.tla.toolbox.prefs delete mode 100644 DieHard.toolbox/DieHard___Model_1.launch delete mode 100644 DieHard.toolbox/DieHard___Model_1_SnapShot_1545406431357.launch delete mode 100644 DieHard.toolbox/DieHard___Model_1_SnapShot_1545406506746.launch delete mode 100644 DieHard.toolbox/DieHard___Model_1_SnapShot_1545406592577.launch delete mode 100644 DieHard.toolbox/Model_1/DieHard.tla delete mode 100644 DieHard.toolbox/Model_1/MC.cfg delete mode 100644 DieHard.toolbox/Model_1/MC.tla delete mode 100644 DieHard.toolbox/Model_1_SnapShot_1545406431357/DieHard.tla delete mode 100644 DieHard.toolbox/Model_1_SnapShot_1545406431357/MC.cfg delete mode 100644 DieHard.toolbox/Model_1_SnapShot_1545406431357/MC.tla delete mode 100644 DieHard.toolbox/Model_1_SnapShot_1545406506746/DieHard.tla delete mode 100644 DieHard.toolbox/Model_1_SnapShot_1545406506746/MC.cfg delete mode 100644 DieHard.toolbox/Model_1_SnapShot_1545406506746/MC.tla delete mode 100644 DieHard.toolbox/Model_1_SnapShot_1545406592577/DieHard.tla delete mode 100644 DieHard.toolbox/Model_1_SnapShot_1545406592577/MC.cfg delete mode 100644 DieHard.toolbox/Model_1_SnapShot_1545406592577/MC.tla delete mode 100644 TCommit.toolbox/.project delete mode 100644 TCommit.toolbox/.settings/org.lamport.tla.toolbox.prefs delete mode 100644 TCommit.toolbox/Model_1/MC.cfg delete mode 100644 TCommit.toolbox/Model_1/MC.tla delete mode 100644 TCommit.toolbox/Model_1/TCommit.tla delete mode 100644 TCommit.toolbox/Model_1_SnapShot_1545410479536/MC.cfg delete mode 100644 TCommit.toolbox/Model_1_SnapShot_1545410479536/MC.tla delete mode 100644 TCommit.toolbox/Model_1_SnapShot_1545410479536/TCommit.tla delete mode 100644 TCommit.toolbox/Model_1_SnapShot_1545410497334/MC.cfg delete mode 100644 TCommit.toolbox/Model_1_SnapShot_1545410497334/MC.tla delete mode 100644 TCommit.toolbox/Model_1_SnapShot_1545410497334/TCommit.tla delete mode 100644 TCommit.toolbox/Model_1_SnapShot_1545410597019/MC.cfg delete mode 100644 TCommit.toolbox/Model_1_SnapShot_1545410597019/MC.tla delete mode 100644 TCommit.toolbox/Model_1_SnapShot_1545410597019/TCommit.tla delete mode 100644 TCommit.toolbox/TCommit.pdf delete mode 100644 TCommit.toolbox/TCommit.tex delete mode 100644 TCommit.toolbox/TCommit___Model_1.launch delete mode 100644 TCommit.toolbox/TCommit___Model_1_SnapShot_1545410479536.launch delete mode 100644 TCommit.toolbox/TCommit___Model_1_SnapShot_1545410497334.launch delete mode 100644 TCommit.toolbox/TCommit___Model_1_SnapShot_1545410597019.launch delete mode 100644 TwoPhase.toolbox/.project delete mode 100644 TwoPhase.toolbox/.settings/org.lamport.tla.toolbox.prefs delete mode 100644 TwoPhase.toolbox/Model_1/MC.cfg delete mode 100644 TwoPhase.toolbox/Model_1/MC.tla delete mode 100644 TwoPhase.toolbox/Model_1/TCommit.tla delete mode 100644 TwoPhase.toolbox/Model_1/TwoPhase.tla delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545922765832/MC.cfg delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545922765832/MC.tla delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545922765832/TCommit.tla delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545922765832/TwoPhase.tla delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545922881813/MC.cfg delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545922881813/MC.tla delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545922881813/TCommit.tla delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545922881813/TwoPhase.tla delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545922927774/MC.cfg delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545922927774/MC.tla delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545922927774/TCommit.tla delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545922927774/TwoPhase.tla delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545923020132/MC.cfg delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545923020132/MC.tla delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545923020132/TCommit.tla delete mode 100644 TwoPhase.toolbox/Model_1_SnapShot_1545923020132/TwoPhase.tla delete mode 100644 TwoPhase.toolbox/TwoPhase___Model_1.launch delete mode 100644 TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545922765832.launch delete mode 100644 TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545922881813.launch delete mode 100644 TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545922927774.launch delete mode 100644 TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545923020132.launch delete mode 100644 Untitled.toolbox/.project delete mode 100644 Untitled.toolbox/.settings/org.lamport.tla.toolbox.prefs delete mode 100644 Untitled.toolbox/Model_1/MC.cfg delete mode 100644 Untitled.toolbox/Model_1/MC.tla delete mode 100644 Untitled.toolbox/Model_1/SimpleProgram.tla delete mode 100644 Untitled.toolbox/Model_1_SnapShot_1545403778936/MC.cfg delete mode 100644 Untitled.toolbox/Model_1_SnapShot_1545403778936/MC.tla delete mode 100644 Untitled.toolbox/Model_1_SnapShot_1545403778936/SimpleProgram.tla delete mode 100644 Untitled.toolbox/Model_1_SnapShot_1545403888272/MC.cfg delete mode 100644 Untitled.toolbox/Model_1_SnapShot_1545403888272/MC.tla delete mode 100644 Untitled.toolbox/Model_1_SnapShot_1545403888272/SimpleProgram.tla delete mode 100644 Untitled.toolbox/SimpleProgram.pdf delete mode 100644 Untitled.toolbox/SimpleProgram.tex delete mode 100644 Untitled.toolbox/Untitled___Model_1.launch delete mode 100644 Untitled.toolbox/Untitled___Model_1_SnapShot_1545403778936.launch delete mode 100644 Untitled.toolbox/Untitled___Model_1_SnapShot_1545403888272.launch diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e097dbf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.toolbox/ diff --git a/DieHard.toolbox/.project b/DieHard.toolbox/.project deleted file mode 100644 index 9e00a41..0000000 --- a/DieHard.toolbox/.project +++ /dev/null @@ -1,24 +0,0 @@ - - - DieHard - - - - - - toolbox.builder.TLAParserBuilder - - - - - - toolbox.natures.TLANature - - - - DieHard.tla - 1 - PARENT-1-PROJECT_LOC/DieHard.tla - - - diff --git a/DieHard.toolbox/.settings/org.lamport.tla.toolbox.prefs b/DieHard.toolbox/.settings/org.lamport.tla.toolbox.prefs deleted file mode 100644 index f80647d..0000000 --- a/DieHard.toolbox/.settings/org.lamport.tla.toolbox.prefs +++ /dev/null @@ -1,2 +0,0 @@ -ProjectRootFile=PARENT-1-PROJECT_LOC/DieHard.tla -eclipse.preferences.version=1 diff --git a/DieHard.toolbox/DieHard___Model_1.launch b/DieHard.toolbox/DieHard___Model_1.launch deleted file mode 100644 index b2f6597..0000000 --- a/DieHard.toolbox/DieHard___Model_1.launch +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DieHard.toolbox/DieHard___Model_1_SnapShot_1545406431357.launch b/DieHard.toolbox/DieHard___Model_1_SnapShot_1545406431357.launch deleted file mode 100644 index fccdd07..0000000 --- a/DieHard.toolbox/DieHard___Model_1_SnapShot_1545406431357.launch +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DieHard.toolbox/DieHard___Model_1_SnapShot_1545406506746.launch b/DieHard.toolbox/DieHard___Model_1_SnapShot_1545406506746.launch deleted file mode 100644 index 6906605..0000000 --- a/DieHard.toolbox/DieHard___Model_1_SnapShot_1545406506746.launch +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DieHard.toolbox/DieHard___Model_1_SnapShot_1545406592577.launch b/DieHard.toolbox/DieHard___Model_1_SnapShot_1545406592577.launch deleted file mode 100644 index 38e2b4b..0000000 --- a/DieHard.toolbox/DieHard___Model_1_SnapShot_1545406592577.launch +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DieHard.toolbox/Model_1/DieHard.tla b/DieHard.toolbox/Model_1/DieHard.tla deleted file mode 100644 index a2e2c9c..0000000 --- a/DieHard.toolbox/Model_1/DieHard.tla +++ /dev/null @@ -1,46 +0,0 @@ ------------------------------- MODULE DieHard ------------------------------ - -EXTENDS Integers -VARIABLES small, big - -TypeOK == /\ small \in 0..3 - /\ big \in 0..5 - - Init == /\ small = 0 - /\ big = 0 - - FillSmall == /\ big' = big - /\ small' = 3 - - FillBig == /\ big' = 5 - /\ small' = small - - EmptySmall == /\ big' = big - /\ small' = 0 - - EmptyBig == /\ big' = 0 - /\ small' = small - - SmallToBig == IF big + small <= 5 - THEN /\ big' = big + small - /\ small' = 0 - ELSE /\ big' = 5 - /\ small' = small - (5 - big) - - BigToSmall == IF big + small <= 3 - THEN /\ big' = 0 - /\ small' = big + small - ELSE /\ small' = 3 - /\ big' = big - (3 - small) - - Next == \/ FillSmall - \/ FillBig - \/ EmptySmall - \/ EmptyBig - \/ SmallToBig - \/ BigToSmall - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 16:33:15 CET 2018 by veitheller -\* Created Fri Dec 21 16:16:46 CET 2018 by veitheller diff --git a/DieHard.toolbox/Model_1/MC.cfg b/DieHard.toolbox/Model_1/MC.cfg deleted file mode 100644 index 4259c62..0000000 --- a/DieHard.toolbox/Model_1/MC.cfg +++ /dev/null @@ -1,11 +0,0 @@ -\* INIT definition -INIT -init_154540658308222000 -\* NEXT definition -NEXT -next_154540658308223000 -\* INVARIANT definition -INVARIANT -inv_154540658308324000 -inv_154540658308325000 -\* Generated on Fri Dec 21 16:36:23 CET 2018 \ No newline at end of file diff --git a/DieHard.toolbox/Model_1/MC.tla b/DieHard.toolbox/Model_1/MC.tla deleted file mode 100644 index a791433..0000000 --- a/DieHard.toolbox/Model_1/MC.tla +++ /dev/null @@ -1,22 +0,0 @@ ----- MODULE MC ---- -EXTENDS DieHard, TLC - -\* INIT definition @modelBehaviorInit:0 -init_154540658308222000 == -Init ----- -\* NEXT definition @modelBehaviorNext:0 -next_154540658308223000 == -Next ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_154540658308324000 == -TypeOK ----- -\* INVARIANT definition @modelCorrectnessInvariants:1 -inv_154540658308325000 == -big # 4 ----- -============================================================================= -\* Modification History -\* Created Fri Dec 21 16:36:23 CET 2018 by veitheller diff --git a/DieHard.toolbox/Model_1_SnapShot_1545406431357/DieHard.tla b/DieHard.toolbox/Model_1_SnapShot_1545406431357/DieHard.tla deleted file mode 100644 index a2e2c9c..0000000 --- a/DieHard.toolbox/Model_1_SnapShot_1545406431357/DieHard.tla +++ /dev/null @@ -1,46 +0,0 @@ ------------------------------- MODULE DieHard ------------------------------ - -EXTENDS Integers -VARIABLES small, big - -TypeOK == /\ small \in 0..3 - /\ big \in 0..5 - - Init == /\ small = 0 - /\ big = 0 - - FillSmall == /\ big' = big - /\ small' = 3 - - FillBig == /\ big' = 5 - /\ small' = small - - EmptySmall == /\ big' = big - /\ small' = 0 - - EmptyBig == /\ big' = 0 - /\ small' = small - - SmallToBig == IF big + small <= 5 - THEN /\ big' = big + small - /\ small' = 0 - ELSE /\ big' = 5 - /\ small' = small - (5 - big) - - BigToSmall == IF big + small <= 3 - THEN /\ big' = 0 - /\ small' = big + small - ELSE /\ small' = 3 - /\ big' = big - (3 - small) - - Next == \/ FillSmall - \/ FillBig - \/ EmptySmall - \/ EmptyBig - \/ SmallToBig - \/ BigToSmall - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 16:33:15 CET 2018 by veitheller -\* Created Fri Dec 21 16:16:46 CET 2018 by veitheller diff --git a/DieHard.toolbox/Model_1_SnapShot_1545406431357/MC.cfg b/DieHard.toolbox/Model_1_SnapShot_1545406431357/MC.cfg deleted file mode 100644 index e3f8031..0000000 --- a/DieHard.toolbox/Model_1_SnapShot_1545406431357/MC.cfg +++ /dev/null @@ -1,7 +0,0 @@ -\* INIT definition -INIT -init_154540641525210000 -\* NEXT definition -NEXT -next_154540641525211000 -\* Generated on Fri Dec 21 16:33:35 CET 2018 \ No newline at end of file diff --git a/DieHard.toolbox/Model_1_SnapShot_1545406431357/MC.tla b/DieHard.toolbox/Model_1_SnapShot_1545406431357/MC.tla deleted file mode 100644 index f82c8f8..0000000 --- a/DieHard.toolbox/Model_1_SnapShot_1545406431357/MC.tla +++ /dev/null @@ -1,14 +0,0 @@ ----- MODULE MC ---- -EXTENDS DieHard, TLC - -\* INIT definition @modelBehaviorInit:0 -init_154540641525210000 == -Init ----- -\* NEXT definition @modelBehaviorNext:0 -next_154540641525211000 == -Next ----- -============================================================================= -\* Modification History -\* Created Fri Dec 21 16:33:35 CET 2018 by veitheller diff --git a/DieHard.toolbox/Model_1_SnapShot_1545406506746/DieHard.tla b/DieHard.toolbox/Model_1_SnapShot_1545406506746/DieHard.tla deleted file mode 100644 index a2e2c9c..0000000 --- a/DieHard.toolbox/Model_1_SnapShot_1545406506746/DieHard.tla +++ /dev/null @@ -1,46 +0,0 @@ ------------------------------- MODULE DieHard ------------------------------ - -EXTENDS Integers -VARIABLES small, big - -TypeOK == /\ small \in 0..3 - /\ big \in 0..5 - - Init == /\ small = 0 - /\ big = 0 - - FillSmall == /\ big' = big - /\ small' = 3 - - FillBig == /\ big' = 5 - /\ small' = small - - EmptySmall == /\ big' = big - /\ small' = 0 - - EmptyBig == /\ big' = 0 - /\ small' = small - - SmallToBig == IF big + small <= 5 - THEN /\ big' = big + small - /\ small' = 0 - ELSE /\ big' = 5 - /\ small' = small - (5 - big) - - BigToSmall == IF big + small <= 3 - THEN /\ big' = 0 - /\ small' = big + small - ELSE /\ small' = 3 - /\ big' = big - (3 - small) - - Next == \/ FillSmall - \/ FillBig - \/ EmptySmall - \/ EmptyBig - \/ SmallToBig - \/ BigToSmall - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 16:33:15 CET 2018 by veitheller -\* Created Fri Dec 21 16:16:46 CET 2018 by veitheller diff --git a/DieHard.toolbox/Model_1_SnapShot_1545406506746/MC.cfg b/DieHard.toolbox/Model_1_SnapShot_1545406506746/MC.cfg deleted file mode 100644 index 4bfc4e8..0000000 --- a/DieHard.toolbox/Model_1_SnapShot_1545406506746/MC.cfg +++ /dev/null @@ -1,10 +0,0 @@ -\* INIT definition -INIT -init_154540649359515000 -\* NEXT definition -NEXT -next_154540649359516000 -\* INVARIANT definition -INVARIANT -inv_154540649359517000 -\* Generated on Fri Dec 21 16:34:53 CET 2018 \ No newline at end of file diff --git a/DieHard.toolbox/Model_1_SnapShot_1545406506746/MC.tla b/DieHard.toolbox/Model_1_SnapShot_1545406506746/MC.tla deleted file mode 100644 index 38304f3..0000000 --- a/DieHard.toolbox/Model_1_SnapShot_1545406506746/MC.tla +++ /dev/null @@ -1,18 +0,0 @@ ----- MODULE MC ---- -EXTENDS DieHard, TLC - -\* INIT definition @modelBehaviorInit:0 -init_154540649359515000 == -Init ----- -\* NEXT definition @modelBehaviorNext:0 -next_154540649359516000 == -Next ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_154540649359517000 == -TypeOK ----- -============================================================================= -\* Modification History -\* Created Fri Dec 21 16:34:53 CET 2018 by veitheller diff --git a/DieHard.toolbox/Model_1_SnapShot_1545406592577/DieHard.tla b/DieHard.toolbox/Model_1_SnapShot_1545406592577/DieHard.tla deleted file mode 100644 index a2e2c9c..0000000 --- a/DieHard.toolbox/Model_1_SnapShot_1545406592577/DieHard.tla +++ /dev/null @@ -1,46 +0,0 @@ ------------------------------- MODULE DieHard ------------------------------ - -EXTENDS Integers -VARIABLES small, big - -TypeOK == /\ small \in 0..3 - /\ big \in 0..5 - - Init == /\ small = 0 - /\ big = 0 - - FillSmall == /\ big' = big - /\ small' = 3 - - FillBig == /\ big' = 5 - /\ small' = small - - EmptySmall == /\ big' = big - /\ small' = 0 - - EmptyBig == /\ big' = 0 - /\ small' = small - - SmallToBig == IF big + small <= 5 - THEN /\ big' = big + small - /\ small' = 0 - ELSE /\ big' = 5 - /\ small' = small - (5 - big) - - BigToSmall == IF big + small <= 3 - THEN /\ big' = 0 - /\ small' = big + small - ELSE /\ small' = 3 - /\ big' = big - (3 - small) - - Next == \/ FillSmall - \/ FillBig - \/ EmptySmall - \/ EmptyBig - \/ SmallToBig - \/ BigToSmall - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 16:33:15 CET 2018 by veitheller -\* Created Fri Dec 21 16:16:46 CET 2018 by veitheller diff --git a/DieHard.toolbox/Model_1_SnapShot_1545406592577/MC.cfg b/DieHard.toolbox/Model_1_SnapShot_1545406592577/MC.cfg deleted file mode 100644 index 4259c62..0000000 --- a/DieHard.toolbox/Model_1_SnapShot_1545406592577/MC.cfg +++ /dev/null @@ -1,11 +0,0 @@ -\* INIT definition -INIT -init_154540658308222000 -\* NEXT definition -NEXT -next_154540658308223000 -\* INVARIANT definition -INVARIANT -inv_154540658308324000 -inv_154540658308325000 -\* Generated on Fri Dec 21 16:36:23 CET 2018 \ No newline at end of file diff --git a/DieHard.toolbox/Model_1_SnapShot_1545406592577/MC.tla b/DieHard.toolbox/Model_1_SnapShot_1545406592577/MC.tla deleted file mode 100644 index a791433..0000000 --- a/DieHard.toolbox/Model_1_SnapShot_1545406592577/MC.tla +++ /dev/null @@ -1,22 +0,0 @@ ----- MODULE MC ---- -EXTENDS DieHard, TLC - -\* INIT definition @modelBehaviorInit:0 -init_154540658308222000 == -Init ----- -\* NEXT definition @modelBehaviorNext:0 -next_154540658308223000 == -Next ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_154540658308324000 == -TypeOK ----- -\* INVARIANT definition @modelCorrectnessInvariants:1 -inv_154540658308325000 == -big # 4 ----- -============================================================================= -\* Modification History -\* Created Fri Dec 21 16:36:23 CET 2018 by veitheller diff --git a/TCommit.toolbox/.project b/TCommit.toolbox/.project deleted file mode 100644 index c3a7cdd..0000000 --- a/TCommit.toolbox/.project +++ /dev/null @@ -1,24 +0,0 @@ - - - TCommit - - - - - - toolbox.builder.TLAParserBuilder - - - - - - toolbox.natures.TLANature - - - - TCommit.tla - 1 - PARENT-1-PROJECT_LOC/TCommit.tla - - - diff --git a/TCommit.toolbox/.settings/org.lamport.tla.toolbox.prefs b/TCommit.toolbox/.settings/org.lamport.tla.toolbox.prefs deleted file mode 100644 index cc1d253..0000000 --- a/TCommit.toolbox/.settings/org.lamport.tla.toolbox.prefs +++ /dev/null @@ -1,2 +0,0 @@ -ProjectRootFile=PARENT-1-PROJECT_LOC/TCommit.tla -eclipse.preferences.version=1 diff --git a/TCommit.toolbox/Model_1/MC.cfg b/TCommit.toolbox/Model_1/MC.cfg deleted file mode 100644 index b6e7eae..0000000 --- a/TCommit.toolbox/Model_1/MC.cfg +++ /dev/null @@ -1,14 +0,0 @@ -\* CONSTANT definitions -CONSTANT -RM <- const_154541058889823000 -\* INIT definition -INIT -init_154541058889824000 -\* NEXT definition -NEXT -next_154541058889825000 -\* INVARIANT definition -INVARIANT -inv_154541058889826000 -inv_154541058889827000 -\* Generated on Fri Dec 21 17:43:08 CET 2018 \ No newline at end of file diff --git a/TCommit.toolbox/Model_1/MC.tla b/TCommit.toolbox/Model_1/MC.tla deleted file mode 100644 index c09bec9..0000000 --- a/TCommit.toolbox/Model_1/MC.tla +++ /dev/null @@ -1,27 +0,0 @@ ----- MODULE MC ---- -EXTENDS TCommit, TLC - -\* CONSTANT definitions @modelParameterConstants:0RM -const_154541058889823000 == -{"r1","r2","r3"} ----- - -\* INIT definition @modelBehaviorInit:0 -init_154541058889824000 == -TCInit ----- -\* NEXT definition @modelBehaviorNext:0 -next_154541058889825000 == -TCNext ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_154541058889826000 == -TCTypeOK ----- -\* INVARIANT definition @modelCorrectnessInvariants:1 -inv_154541058889827000 == -TCConsistent ----- -============================================================================= -\* Modification History -\* Created Fri Dec 21 17:43:08 CET 2018 by veitheller diff --git a/TCommit.toolbox/Model_1/TCommit.tla b/TCommit.toolbox/Model_1/TCommit.tla deleted file mode 100644 index 86364e1..0000000 --- a/TCommit.toolbox/Model_1/TCommit.tla +++ /dev/null @@ -1,82 +0,0 @@ ------------------------------- MODULE TCommit ------------------------------ - -(***************************************************************************) -(* This specification is explained in "Transaction Commit", Lecture 5 of *) -(* the TLA+ Video Course. *) -(***************************************************************************) -CONSTANT RM \* The set of participating resource managers - -VARIABLE rmState \* rmState[rm] is the state of resource manager r. ------------------------------------------------------------------------------ -TCTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - -TCInit == rmState = [r \in RM |-> "working"] - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - -canCommit == \A r \in RM : rmState[r] \in {"prepared", "committed"} - (*************************************************************************) - (* True iff all RMs are in the "prepared" or "committed" state. *) - (*************************************************************************) - -notCommitted == \A r \in RM : rmState[r] # "committed" - (*************************************************************************) - (* True iff no resource manager has decided to commit. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the RMs, and then *) -(* define the complete next-state action of the specification to be the *) -(* disjunction of the possible RM actions. *) -(***************************************************************************) -Prepare(r) == /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - -Decide(r) == \/ /\ rmState[r] = "prepared" - /\ canCommit - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - \/ /\ rmState[r] \in {"working", "prepared"} - /\ notCommitted - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - -TCNext == \E r \in RM : Prepare(r) \/ Decide(r) - (*************************************************************************) - (* The next-state action. *) - (*************************************************************************) ------------------------------------------------------------------------------ -TCConsistent == - (*************************************************************************) - (* A state predicate asserting that two RMs have not arrived at *) - (* conflicting decisions. It is an invariant of the specification. *) - (*************************************************************************) - \A r1, r2 \in RM : ~ /\ rmState[r1] = "aborted" - /\ rmState[r2] = "committed" ------------------------------------------------------------------------------ -(***************************************************************************) -(* The following part of the spec is not discussed in Video Lecture 5. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) -TCSpec == TCInit /\ [][TCNext]_rmState - (*************************************************************************) - (* The complete specification of the protocol written as a temporal *) - (* formula. *) - (*************************************************************************) - -THEOREM TCSpec => [](TCTypeOK /\ TCConsistent) - (*************************************************************************) - (* This theorem asserts the truth of the temporal formula whose meaning *) - (* is that the state predicate TCTypeOK /\ TCInvariant is an invariant *) - (* of the specification TCSpec. Invariance of this conjunction is *) - (* equivalent to invariance of both of the formulas TCTypeOK and *) - (* TCConsistent. *) - (*************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 17:16:06 CET 2018 by veitheller -\* Created Fri Dec 21 17:15:44 CET 2018 by veitheller diff --git a/TCommit.toolbox/Model_1_SnapShot_1545410479536/MC.cfg b/TCommit.toolbox/Model_1_SnapShot_1545410479536/MC.cfg deleted file mode 100644 index 13c6793..0000000 --- a/TCommit.toolbox/Model_1_SnapShot_1545410479536/MC.cfg +++ /dev/null @@ -1,13 +0,0 @@ -\* CONSTANT definitions -CONSTANT -RM <- const_15454104746206000 -\* INIT definition -INIT -init_15454104746207000 -\* NEXT definition -NEXT -next_15454104746208000 -\* INVARIANT definition -INVARIANT -inv_15454104746209000 -\* Generated on Fri Dec 21 17:41:14 CET 2018 \ No newline at end of file diff --git a/TCommit.toolbox/Model_1_SnapShot_1545410479536/MC.tla b/TCommit.toolbox/Model_1_SnapShot_1545410479536/MC.tla deleted file mode 100644 index 4de6902..0000000 --- a/TCommit.toolbox/Model_1_SnapShot_1545410479536/MC.tla +++ /dev/null @@ -1,23 +0,0 @@ ----- MODULE MC ---- -EXTENDS TCommit, TLC - -\* CONSTANT definitions @modelParameterConstants:0RM -const_15454104746206000 == -{"r1","r2","r3"} ----- - -\* INIT definition @modelBehaviorInit:0 -init_15454104746207000 == -TCInit ----- -\* NEXT definition @modelBehaviorNext:0 -next_15454104746208000 == -TCNext ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_15454104746209000 == -TCTypeOK ----- -============================================================================= -\* Modification History -\* Created Fri Dec 21 17:41:14 CET 2018 by veitheller diff --git a/TCommit.toolbox/Model_1_SnapShot_1545410479536/TCommit.tla b/TCommit.toolbox/Model_1_SnapShot_1545410479536/TCommit.tla deleted file mode 100644 index 86364e1..0000000 --- a/TCommit.toolbox/Model_1_SnapShot_1545410479536/TCommit.tla +++ /dev/null @@ -1,82 +0,0 @@ ------------------------------- MODULE TCommit ------------------------------ - -(***************************************************************************) -(* This specification is explained in "Transaction Commit", Lecture 5 of *) -(* the TLA+ Video Course. *) -(***************************************************************************) -CONSTANT RM \* The set of participating resource managers - -VARIABLE rmState \* rmState[rm] is the state of resource manager r. ------------------------------------------------------------------------------ -TCTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - -TCInit == rmState = [r \in RM |-> "working"] - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - -canCommit == \A r \in RM : rmState[r] \in {"prepared", "committed"} - (*************************************************************************) - (* True iff all RMs are in the "prepared" or "committed" state. *) - (*************************************************************************) - -notCommitted == \A r \in RM : rmState[r] # "committed" - (*************************************************************************) - (* True iff no resource manager has decided to commit. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the RMs, and then *) -(* define the complete next-state action of the specification to be the *) -(* disjunction of the possible RM actions. *) -(***************************************************************************) -Prepare(r) == /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - -Decide(r) == \/ /\ rmState[r] = "prepared" - /\ canCommit - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - \/ /\ rmState[r] \in {"working", "prepared"} - /\ notCommitted - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - -TCNext == \E r \in RM : Prepare(r) \/ Decide(r) - (*************************************************************************) - (* The next-state action. *) - (*************************************************************************) ------------------------------------------------------------------------------ -TCConsistent == - (*************************************************************************) - (* A state predicate asserting that two RMs have not arrived at *) - (* conflicting decisions. It is an invariant of the specification. *) - (*************************************************************************) - \A r1, r2 \in RM : ~ /\ rmState[r1] = "aborted" - /\ rmState[r2] = "committed" ------------------------------------------------------------------------------ -(***************************************************************************) -(* The following part of the spec is not discussed in Video Lecture 5. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) -TCSpec == TCInit /\ [][TCNext]_rmState - (*************************************************************************) - (* The complete specification of the protocol written as a temporal *) - (* formula. *) - (*************************************************************************) - -THEOREM TCSpec => [](TCTypeOK /\ TCConsistent) - (*************************************************************************) - (* This theorem asserts the truth of the temporal formula whose meaning *) - (* is that the state predicate TCTypeOK /\ TCInvariant is an invariant *) - (* of the specification TCSpec. Invariance of this conjunction is *) - (* equivalent to invariance of both of the formulas TCTypeOK and *) - (* TCConsistent. *) - (*************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 17:16:06 CET 2018 by veitheller -\* Created Fri Dec 21 17:15:44 CET 2018 by veitheller diff --git a/TCommit.toolbox/Model_1_SnapShot_1545410497334/MC.cfg b/TCommit.toolbox/Model_1_SnapShot_1545410497334/MC.cfg deleted file mode 100644 index f7789bf..0000000 --- a/TCommit.toolbox/Model_1_SnapShot_1545410497334/MC.cfg +++ /dev/null @@ -1,13 +0,0 @@ -\* CONSTANT definitions -CONSTANT -RM <- const_154541048821114000 -\* INIT definition -INIT -init_154541048821115000 -\* NEXT definition -NEXT -next_154541048821116000 -\* INVARIANT definition -INVARIANT -inv_154541048821117000 -\* Generated on Fri Dec 21 17:41:28 CET 2018 \ No newline at end of file diff --git a/TCommit.toolbox/Model_1_SnapShot_1545410497334/MC.tla b/TCommit.toolbox/Model_1_SnapShot_1545410497334/MC.tla deleted file mode 100644 index d5bcceb..0000000 --- a/TCommit.toolbox/Model_1_SnapShot_1545410497334/MC.tla +++ /dev/null @@ -1,23 +0,0 @@ ----- MODULE MC ---- -EXTENDS TCommit, TLC - -\* CONSTANT definitions @modelParameterConstants:0RM -const_154541048821114000 == -{"r1","r2","r3"} ----- - -\* INIT definition @modelBehaviorInit:0 -init_154541048821115000 == -TCInit ----- -\* NEXT definition @modelBehaviorNext:0 -next_154541048821116000 == -TCNext ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_154541048821117000 == -TCTypeOK ----- -============================================================================= -\* Modification History -\* Created Fri Dec 21 17:41:28 CET 2018 by veitheller diff --git a/TCommit.toolbox/Model_1_SnapShot_1545410497334/TCommit.tla b/TCommit.toolbox/Model_1_SnapShot_1545410497334/TCommit.tla deleted file mode 100644 index 86364e1..0000000 --- a/TCommit.toolbox/Model_1_SnapShot_1545410497334/TCommit.tla +++ /dev/null @@ -1,82 +0,0 @@ ------------------------------- MODULE TCommit ------------------------------ - -(***************************************************************************) -(* This specification is explained in "Transaction Commit", Lecture 5 of *) -(* the TLA+ Video Course. *) -(***************************************************************************) -CONSTANT RM \* The set of participating resource managers - -VARIABLE rmState \* rmState[rm] is the state of resource manager r. ------------------------------------------------------------------------------ -TCTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - -TCInit == rmState = [r \in RM |-> "working"] - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - -canCommit == \A r \in RM : rmState[r] \in {"prepared", "committed"} - (*************************************************************************) - (* True iff all RMs are in the "prepared" or "committed" state. *) - (*************************************************************************) - -notCommitted == \A r \in RM : rmState[r] # "committed" - (*************************************************************************) - (* True iff no resource manager has decided to commit. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the RMs, and then *) -(* define the complete next-state action of the specification to be the *) -(* disjunction of the possible RM actions. *) -(***************************************************************************) -Prepare(r) == /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - -Decide(r) == \/ /\ rmState[r] = "prepared" - /\ canCommit - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - \/ /\ rmState[r] \in {"working", "prepared"} - /\ notCommitted - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - -TCNext == \E r \in RM : Prepare(r) \/ Decide(r) - (*************************************************************************) - (* The next-state action. *) - (*************************************************************************) ------------------------------------------------------------------------------ -TCConsistent == - (*************************************************************************) - (* A state predicate asserting that two RMs have not arrived at *) - (* conflicting decisions. It is an invariant of the specification. *) - (*************************************************************************) - \A r1, r2 \in RM : ~ /\ rmState[r1] = "aborted" - /\ rmState[r2] = "committed" ------------------------------------------------------------------------------ -(***************************************************************************) -(* The following part of the spec is not discussed in Video Lecture 5. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) -TCSpec == TCInit /\ [][TCNext]_rmState - (*************************************************************************) - (* The complete specification of the protocol written as a temporal *) - (* formula. *) - (*************************************************************************) - -THEOREM TCSpec => [](TCTypeOK /\ TCConsistent) - (*************************************************************************) - (* This theorem asserts the truth of the temporal formula whose meaning *) - (* is that the state predicate TCTypeOK /\ TCInvariant is an invariant *) - (* of the specification TCSpec. Invariance of this conjunction is *) - (* equivalent to invariance of both of the formulas TCTypeOK and *) - (* TCConsistent. *) - (*************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 17:16:06 CET 2018 by veitheller -\* Created Fri Dec 21 17:15:44 CET 2018 by veitheller diff --git a/TCommit.toolbox/Model_1_SnapShot_1545410597019/MC.cfg b/TCommit.toolbox/Model_1_SnapShot_1545410597019/MC.cfg deleted file mode 100644 index b6e7eae..0000000 --- a/TCommit.toolbox/Model_1_SnapShot_1545410597019/MC.cfg +++ /dev/null @@ -1,14 +0,0 @@ -\* CONSTANT definitions -CONSTANT -RM <- const_154541058889823000 -\* INIT definition -INIT -init_154541058889824000 -\* NEXT definition -NEXT -next_154541058889825000 -\* INVARIANT definition -INVARIANT -inv_154541058889826000 -inv_154541058889827000 -\* Generated on Fri Dec 21 17:43:08 CET 2018 \ No newline at end of file diff --git a/TCommit.toolbox/Model_1_SnapShot_1545410597019/MC.tla b/TCommit.toolbox/Model_1_SnapShot_1545410597019/MC.tla deleted file mode 100644 index c09bec9..0000000 --- a/TCommit.toolbox/Model_1_SnapShot_1545410597019/MC.tla +++ /dev/null @@ -1,27 +0,0 @@ ----- MODULE MC ---- -EXTENDS TCommit, TLC - -\* CONSTANT definitions @modelParameterConstants:0RM -const_154541058889823000 == -{"r1","r2","r3"} ----- - -\* INIT definition @modelBehaviorInit:0 -init_154541058889824000 == -TCInit ----- -\* NEXT definition @modelBehaviorNext:0 -next_154541058889825000 == -TCNext ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_154541058889826000 == -TCTypeOK ----- -\* INVARIANT definition @modelCorrectnessInvariants:1 -inv_154541058889827000 == -TCConsistent ----- -============================================================================= -\* Modification History -\* Created Fri Dec 21 17:43:08 CET 2018 by veitheller diff --git a/TCommit.toolbox/Model_1_SnapShot_1545410597019/TCommit.tla b/TCommit.toolbox/Model_1_SnapShot_1545410597019/TCommit.tla deleted file mode 100644 index 86364e1..0000000 --- a/TCommit.toolbox/Model_1_SnapShot_1545410597019/TCommit.tla +++ /dev/null @@ -1,82 +0,0 @@ ------------------------------- MODULE TCommit ------------------------------ - -(***************************************************************************) -(* This specification is explained in "Transaction Commit", Lecture 5 of *) -(* the TLA+ Video Course. *) -(***************************************************************************) -CONSTANT RM \* The set of participating resource managers - -VARIABLE rmState \* rmState[rm] is the state of resource manager r. ------------------------------------------------------------------------------ -TCTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - -TCInit == rmState = [r \in RM |-> "working"] - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - -canCommit == \A r \in RM : rmState[r] \in {"prepared", "committed"} - (*************************************************************************) - (* True iff all RMs are in the "prepared" or "committed" state. *) - (*************************************************************************) - -notCommitted == \A r \in RM : rmState[r] # "committed" - (*************************************************************************) - (* True iff no resource manager has decided to commit. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the RMs, and then *) -(* define the complete next-state action of the specification to be the *) -(* disjunction of the possible RM actions. *) -(***************************************************************************) -Prepare(r) == /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - -Decide(r) == \/ /\ rmState[r] = "prepared" - /\ canCommit - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - \/ /\ rmState[r] \in {"working", "prepared"} - /\ notCommitted - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - -TCNext == \E r \in RM : Prepare(r) \/ Decide(r) - (*************************************************************************) - (* The next-state action. *) - (*************************************************************************) ------------------------------------------------------------------------------ -TCConsistent == - (*************************************************************************) - (* A state predicate asserting that two RMs have not arrived at *) - (* conflicting decisions. It is an invariant of the specification. *) - (*************************************************************************) - \A r1, r2 \in RM : ~ /\ rmState[r1] = "aborted" - /\ rmState[r2] = "committed" ------------------------------------------------------------------------------ -(***************************************************************************) -(* The following part of the spec is not discussed in Video Lecture 5. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) -TCSpec == TCInit /\ [][TCNext]_rmState - (*************************************************************************) - (* The complete specification of the protocol written as a temporal *) - (* formula. *) - (*************************************************************************) - -THEOREM TCSpec => [](TCTypeOK /\ TCConsistent) - (*************************************************************************) - (* This theorem asserts the truth of the temporal formula whose meaning *) - (* is that the state predicate TCTypeOK /\ TCInvariant is an invariant *) - (* of the specification TCSpec. Invariance of this conjunction is *) - (* equivalent to invariance of both of the formulas TCTypeOK and *) - (* TCConsistent. *) - (*************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 17:16:06 CET 2018 by veitheller -\* Created Fri Dec 21 17:15:44 CET 2018 by veitheller diff --git a/TCommit.toolbox/TCommit.pdf b/TCommit.toolbox/TCommit.pdf deleted file mode 100644 index aad89834d11cba98c5cb16bde735e34a71f24fe4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147967 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

sy@tppNOZc`17EoMV|52If@#&eE{+~54RtEO} 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 diff --git a/TCommit.toolbox/TCommit.tex b/TCommit.toolbox/TCommit.tex deleted file mode 100644 index 21d3ae1..0000000 --- a/TCommit.toolbox/TCommit.tex +++ /dev/null @@ -1,1082 +0,0 @@ -\batchmode %% Suppresses most terminal output. -\documentclass{article} -\usepackage{color} -\definecolor{boxshade}{gray}{0.85} -\setlength{\textwidth}{360pt} -\setlength{\textheight}{541pt} -\usepackage{latexsym} -\usepackage{ifthen} -% \usepackage{color} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SWITCHES % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newboolean{shading} -\setboolean{shading}{false} -\makeatletter - %% this is needed only when inserted into the file, not when - %% used as a package file. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % -% DEFINITIONS OF SYMBOL-PRODUCING COMMANDS % -% % -% TLA+ LaTeX % -% symbol command % -% ------ ------- % -% => \implies % -% <: \ltcolon % -% :> \colongt % -% == \defeq % -% .. \dotdot % -% :: \coloncolon % -% =| \eqdash % -% ++ \pp % -% -- \mm % -% ** \stst % -% // \slsl % -% ^ \ct % -% \A \A % -% \E \E % -% \AA \AA % -% \EE \EE % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newlength{\symlength} -\newcommand{\implies}{\Rightarrow} -\newcommand{\ltcolon}{\mathrel{<\!\!\mbox{:}}} -\newcommand{\colongt}{\mathrel{\!\mbox{:}\!\!>}} -\newcommand{\defeq}{\;\mathrel{\smash %% keep this symbol from being too tall - {{\stackrel{\scriptscriptstyle\Delta}{=}}}}\;} -\newcommand{\dotdot}{\mathrel{\ldotp\ldotp}} -\newcommand{\coloncolon}{\mathrel{::\;}} -\newcommand{\eqdash}{\mathrel = \joinrel \hspace{-.28em}|} -\newcommand{\pp}{\mathbin{++}} -\newcommand{\mm}{\mathbin{--}} -\newcommand{\stst}{*\!*} -\newcommand{\slsl}{/\!/} -\newcommand{\ct}{\hat{\hspace{.4em}}} -\newcommand{\A}{\forall} -\newcommand{\E}{\exists} -\renewcommand{\AA}{\makebox{$\raisebox{.05em}{\makebox[0pt][l]{% - $\forall\hspace{-.517em}\forall\hspace{-.517em}\forall$}}% - \forall\hspace{-.517em}\forall \hspace{-.517em}\forall\,$}} -\newcommand{\EE}{\makebox{$\raisebox{.05em}{\makebox[0pt][l]{% - $\exists\hspace{-.517em}\exists\hspace{-.517em}\exists$}}% - \exists\hspace{-.517em}\exists\hspace{-.517em}\exists\,$}} -\newcommand{\whileop}{\.{\stackrel - {\mbox{\raisebox{-.3em}[0pt][0pt]{$\scriptscriptstyle+\;\,$}}}% - {-\hspace{-.16em}\triangleright}}} - -% Commands are defined to produce the upper-case keywords. -% Note that some have space after them. -\newcommand{\ASSUME}{\textsc{assume }} -\newcommand{\ASSUMPTION}{\textsc{assumption }} -\newcommand{\AXIOM}{\textsc{axiom }} -\newcommand{\BOOLEAN}{\textsc{boolean }} -\newcommand{\CASE}{\textsc{case }} -\newcommand{\CONSTANT}{\textsc{constant }} -\newcommand{\CONSTANTS}{\textsc{constants }} -\newcommand{\ELSE}{\settowidth{\symlength}{\THEN}% - \makebox[\symlength][l]{\textsc{ else}}} -\newcommand{\EXCEPT}{\textsc{ except }} -\newcommand{\EXTENDS}{\textsc{extends }} -\newcommand{\FALSE}{\textsc{false}} -\newcommand{\IF}{\textsc{if }} -\newcommand{\IN}{\settowidth{\symlength}{\LET}% - \makebox[\symlength][l]{\textsc{in}}} -\newcommand{\INSTANCE}{\textsc{instance }} -\newcommand{\LET}{\textsc{let }} -\newcommand{\LOCAL}{\textsc{local }} -\newcommand{\MODULE}{\textsc{module }} -\newcommand{\OTHER}{\textsc{other }} -\newcommand{\STRING}{\textsc{string}} -\newcommand{\THEN}{\textsc{ then }} -\newcommand{\THEOREM}{\textsc{theorem }} -\newcommand{\LEMMA}{\textsc{lemma }} -\newcommand{\PROPOSITION}{\textsc{proposition }} -\newcommand{\COROLLARY}{\textsc{corollary }} -\newcommand{\TRUE}{\textsc{true}} -\newcommand{\VARIABLE}{\textsc{variable }} -\newcommand{\VARIABLES}{\textsc{variables }} -\newcommand{\WITH}{\textsc{ with }} -\newcommand{\WF}{\textrm{WF}} -\newcommand{\SF}{\textrm{SF}} -\newcommand{\CHOOSE}{\textsc{choose }} -\newcommand{\ENABLED}{\textsc{enabled }} -\newcommand{\UNCHANGED}{\textsc{unchanged }} -\newcommand{\SUBSET}{\textsc{subset }} -\newcommand{\UNION}{\textsc{union }} -\newcommand{\DOMAIN}{\textsc{domain }} -% Added for tla2tex -\newcommand{\BY}{\textsc{by }} -\newcommand{\OBVIOUS}{\textsc{obvious }} -\newcommand{\HAVE}{\textsc{have }} -\newcommand{\QED}{\textsc{qed }} -\newcommand{\TAKE}{\textsc{take }} -\newcommand{\DEF}{\textsc{ def }} -\newcommand{\HIDE}{\textsc{hide }} -\newcommand{\RECURSIVE}{\textsc{recursive }} -\newcommand{\USE}{\textsc{use }} -\newcommand{\DEFINE}{\textsc{define }} -\newcommand{\PROOF}{\textsc{proof }} -\newcommand{\WITNESS}{\textsc{witness }} -\newcommand{\PICK}{\textsc{pick }} -\newcommand{\DEFS}{\textsc{defs }} -\newcommand{\PROVE}{\settowidth{\symlength}{\ASSUME}% - \makebox[\symlength][l]{\textsc{prove}}\@s{-4.1}}% - %% The \@s{-4.1) is a kludge added on 24 Oct 2009 [happy birthday, Ellen] - %% so the correct alignment occurs if the user types - %% ASSUME X - %% PROVE Y - %% because it cancels the extra 4.1 pts added because of the - %% extra space after the PROVE. This seems to works OK. - %% However, the 4.1 equals Parameters.LaTeXLeftSpace(1) and - %% should be changed if that method ever changes. -\newcommand{\SUFFICES}{\textsc{suffices }} -\newcommand{\NEW}{\textsc{new }} -\newcommand{\LAMBDA}{\textsc{lambda }} -\newcommand{\STATE}{\textsc{state }} -\newcommand{\ACTION}{\textsc{action }} -\newcommand{\TEMPORAL}{\textsc{temporal }} -\newcommand{\ONLY}{\textsc{only }} %% added by LL on 2 Oct 2009 -\newcommand{\OMITTED}{\textsc{omitted }} %% added by LL on 31 Oct 2009 -\newcommand{\@pfstepnum}[2]{\ensuremath{\langle#1\rangle}\textrm{#2}} -\newcommand{\bang}{\@s{1}\mbox{\small !}\@s{1}} -%% We should format || differently in PlusCal code than in TLA+ formulas. -\newcommand{\p@barbar}{\ifpcalsymbols - \,\,\rule[-.25em]{.075em}{1em}\hspace*{.2em}\rule[-.25em]{.075em}{1em}\,\,% - \else \,||\,\fi} -%% PlusCal keywords -\newcommand{\p@fair}{\textbf{fair }} -\newcommand{\p@semicolon}{\textbf{\,; }} -\newcommand{\p@algorithm}{\textbf{algorithm }} -\newcommand{\p@mmfair}{\textbf{-{}-fair }} -\newcommand{\p@mmalgorithm}{\textbf{-{}-algorithm }} -\newcommand{\p@assert}{\textbf{assert }} -\newcommand{\p@await}{\textbf{await }} -\newcommand{\p@begin}{\textbf{begin }} -\newcommand{\p@end}{\textbf{end }} -\newcommand{\p@call}{\textbf{call }} -\newcommand{\p@define}{\textbf{define }} -\newcommand{\p@do}{\textbf{ do }} -\newcommand{\p@either}{\textbf{either }} -\newcommand{\p@or}{\textbf{or }} -\newcommand{\p@goto}{\textbf{goto }} -\newcommand{\p@if}{\textbf{if }} -\newcommand{\p@then}{\,\,\textbf{then }} -\newcommand{\p@else}{\ifcsyntax \textbf{else } \else \,\,\textbf{else }\fi} -\newcommand{\p@elsif}{\,\,\textbf{elsif }} -\newcommand{\p@macro}{\textbf{macro }} -\newcommand{\p@print}{\textbf{print }} -\newcommand{\p@procedure}{\textbf{procedure }} -\newcommand{\p@process}{\textbf{process }} -\newcommand{\p@return}{\textbf{return}} -\newcommand{\p@skip}{\textbf{skip}} -\newcommand{\p@variable}{\textbf{variable }} -\newcommand{\p@variables}{\textbf{variables }} -\newcommand{\p@while}{\textbf{while }} -\newcommand{\p@when}{\textbf{when }} -\newcommand{\p@with}{\textbf{with }} -\newcommand{\p@lparen}{\textbf{(\,\,}} -\newcommand{\p@rparen}{\textbf{\,\,) }} -\newcommand{\p@lbrace}{\textbf{\{\,\,}} -\newcommand{\p@rbrace}{\textbf{\,\,\} }} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% REDEFINE STANDARD COMMANDS TO MAKE THEM FORMAT BETTER % -% % -% We redefine \in and \notin % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\renewcommand{\_}{\rule{.4em}{.06em}\hspace{.05em}} -\newlength{\equalswidth} -\let\oldin=\in -\let\oldnotin=\notin -\renewcommand{\in}{% - {\settowidth{\equalswidth}{$\.{=}$}\makebox[\equalswidth][c]{$\oldin$}}} -\renewcommand{\notin}{% - {\settowidth{\equalswidth}{$\.{=}$}\makebox[\equalswidth]{$\oldnotin$}}} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % -% HORIZONTAL BARS: % -% % -% \moduleLeftDash |~~~~~~~~~~ % -% \moduleRightDash ~~~~~~~~~~| % -% \midbar |----------| % -% \bottombar |__________| % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newlength{\charwidth}\settowidth{\charwidth}{{\small\tt M}} -\newlength{\boxrulewd}\setlength{\boxrulewd}{.4pt} -\newlength{\boxlineht}\setlength{\boxlineht}{.5\baselineskip} -\newcommand{\boxsep}{\charwidth} -\newlength{\boxruleht}\setlength{\boxruleht}{.5ex} -\newlength{\boxruledp}\setlength{\boxruledp}{-\boxruleht} -\addtolength{\boxruledp}{\boxrulewd} -\newcommand{\boxrule}{\leaders\hrule height \boxruleht depth \boxruledp - \hfill\mbox{}} -\newcommand{\@computerule}{% - \setlength{\boxruleht}{.5ex}% - \setlength{\boxruledp}{-\boxruleht}% - \addtolength{\boxruledp}{\boxrulewd}} - -\newcommand{\bottombar}{\hspace{-\boxsep}% - \raisebox{-\boxrulewd}[0pt][0pt]{\rule[.5ex]{\boxrulewd}{\boxlineht}}% - \boxrule - \raisebox{-\boxrulewd}[0pt][0pt]{% - \rule[.5ex]{\boxrulewd}{\boxlineht}}\hspace{-\boxsep}\vspace{0pt}} - -\newcommand{\moduleLeftDash}% - {\hspace*{-\boxsep}% - \raisebox{-\boxlineht}[0pt][0pt]{\rule[.5ex]{\boxrulewd - }{\boxlineht}}% - \boxrule\hspace*{.4em }} - -\newcommand{\moduleRightDash}% - {\hspace*{.4em}\boxrule - \raisebox{-\boxlineht}[0pt][0pt]{\rule[.5ex]{\boxrulewd - }{\boxlineht}}\hspace{-\boxsep}}%\vspace{.2em} - -\newcommand{\midbar}{\hspace{-\boxsep}\raisebox{-.5\boxlineht}[0pt][0pt]{% - \rule[.5ex]{\boxrulewd}{\boxlineht}}\boxrule\raisebox{-.5\boxlineht% - }[0pt][0pt]{\rule[.5ex]{\boxrulewd}{\boxlineht}}\hspace{-\boxsep}} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% FORMATING COMMANDS % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% PLUSCAL SHADING % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% The TeX pcalshading switch is set on to cause PlusCal shading to be -% performed. This changes the behavior of the following commands and -% environments to cause full-width shading to be performed on all lines. -% -% \tstrut \@x cpar mcom \@pvspace -% -% The TeX pcalsymbols switch is turned on when typesetting a PlusCal algorithm, -% whether or not shading is being performed. It causes symbols (other than -% parentheses and braces and PlusCal-only keywords) that should be typeset -% differently depending on whether they are in an algorithm to be typeset -% appropriately. Currently, the only such symbol is "||". -% -% The TeX csyntax switch is turned on when typesetting a PlusCal algorithm in -% c-syntax. This allows symbols to be format differently in the two syntaxes. -% The "else" keyword is the only one that is. - -\newif\ifpcalshading \pcalshadingfalse -\newif\ifpcalsymbols \pcalsymbolsfalse -\newif\ifcsyntax \csyntaxtrue - -% The \@pvspace command makes a vertical space. It uses \vspace -% except with \ifpcalshading, in which case it sets \pvcalvspace -% and the space is added by a following \@x command. -% -\newlength{\pcalvspace}\setlength{\pcalvspace}{0pt}% -\newcommand{\@pvspace}[1]{% - \ifpcalshading - \par\global\setlength{\pcalvspace}{#1}% - \else - \par\vspace{#1}% - \fi -} - -% The lcom environment was changed to set \lcomindent equal to -% the indentation it produces. This length is used by the -% cpar environment to make shading extend for the full width -% of the line. This assumes that lcom environments are not -% nested. I hope TLATeX does not nest them. -% -\newlength{\lcomindent}% -\setlength{\lcomindent}{0pt}% - -%\tstrut: A strut to produce inter-paragraph space in a comment. -%\rstrut: A strut to extend the bottom of a one-line comment so -% there's no break in the shading between comments on -% successive lines. -\newcommand\tstrut% - {\raisebox{\vshadelen}{\raisebox{-.25em}{\rule{0pt}{1.15em}}}% - \global\setlength{\vshadelen}{0pt}} -\newcommand\rstrut{\raisebox{-.25em}{\rule{0pt}{1.15em}}% - \global\setlength{\vshadelen}{0pt}} - - -% \.{op} formats operator op in math mode with empty boxes on either side. -% Used because TeX otherwise vary the amount of space it leaves around op. -\renewcommand{\.}[1]{\ensuremath{\mbox{}#1\mbox{}}} - -% \@s{n} produces an n-point space -\newcommand{\@s}[1]{\hspace{#1pt}} - -% \@x{txt} starts a specification line in the beginning with txt -% in the final LaTeX source. -\newlength{\@xlen} -\newcommand\xtstrut% - {\setlength{\@xlen}{1.05em}% - \addtolength{\@xlen}{\pcalvspace}% - \raisebox{\vshadelen}{\raisebox{-.25em}{\rule{0pt}{\@xlen}}}% - \global\setlength{\vshadelen}{0pt}% - \global\setlength{\pcalvspace}{0pt}} - -\newcommand{\@x}[1]{\par - \ifpcalshading - \makebox[0pt][l]{\shadebox{\xtstrut\hspace*{\textwidth}}}% - \fi - \mbox{$\mbox{}#1\mbox{}$}} - -% \@xx{txt} continues a specification line with the text txt. -\newcommand{\@xx}[1]{\mbox{$\mbox{}#1\mbox{}$}} - -% \@y{cmt} produces a one-line comment. -\newcommand{\@y}[1]{\mbox{\footnotesize\hspace{.65em}% - \ifthenelse{\boolean{shading}}{% - \shadebox{#1\hspace{-\the\lastskip}\rstrut}}% - {#1\hspace{-\the\lastskip}\rstrut}}} - -% \@z{cmt} produces a zero-width one-line comment. -\newcommand{\@z}[1]{\makebox[0pt][l]{\footnotesize - \ifthenelse{\boolean{shading}}{% - \shadebox{#1\hspace{-\the\lastskip}\rstrut}}% - {#1\hspace{-\the\lastskip}\rstrut}}} - - -% \@w{str} produces the TLA+ string "str". -\newcommand{\@w}[1]{\textsf{``{#1}''}} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SHADING % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\def\graymargin{1} - % The number of points of margin in the shaded box. - -% \definecolor{boxshade}{gray}{.85} -% Defines the darkness of the shading: 1 = white, 0 = black -% Added by TLATeX only if needed. - -% \shadebox{txt} puts txt in a shaded box. -\newlength{\templena} -\newlength{\templenb} -\newsavebox{\tempboxa} -\newcommand{\shadebox}[1]{{\setlength{\fboxsep}{\graymargin pt}% - \savebox{\tempboxa}{#1}% - \settoheight{\templena}{\usebox{\tempboxa}}% - \settodepth{\templenb}{\usebox{\tempboxa}}% - \hspace*{-\fboxsep}\raisebox{0pt}[\templena][\templenb]% - {\colorbox{boxshade}{\usebox{\tempboxa}}}\hspace*{-\fboxsep}}} - -% \vshade{n} makes an n-point inter-paragraph space, with -% shading if the `shading' flag is true. -\newlength{\vshadelen} -\setlength{\vshadelen}{0pt} -\newcommand{\vshade}[1]{\ifthenelse{\boolean{shading}}% - {\global\setlength{\vshadelen}{#1pt}}% - {\vspace{#1pt}}} - -\newlength{\boxwidth} -\newlength{\multicommentdepth} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE cpar ENVIRONMENT % -% ^^^^^^^^^^^^^^^^^^^^ % -% The LaTeX input % -% % -% \begin{cpar}{pop}{nest}{isLabel}{d}{e}{arg6} % -% XXXXXXXXXXXXXXX % -% XXXXXXXXXXXXXXX % -% XXXXXXXXXXXXXXX % -% \end{cpar} % -% % -% produces one of two possible results. If isLabel is the letter "T", % -% it produces the following, where [label] is the result of typesetting % -% arg6 in an LR box, and d is is a number representing a distance in % -% points. % -% % -% prevailing |<-- d -->[label]<- e ->XXXXXXXXXXXXXXX % -% left | XXXXXXXXXXXXXXX % -% margin | XXXXXXXXXXXXXXX % -% % -% If isLabel is the letter "F", then it produces % -% % -% prevailing |<-- d -->XXXXXXXXXXXXXXXXXXXXXXX % -% left | <- e ->XXXXXXXXXXXXXXXX % -% margin | XXXXXXXXXXXXXXXX % -% % -% where d and e are numbers representing distances in points. % -% % -% The prevailing left margin is the one in effect before the most recent % -% pop (argument 1) cpar environments with "T" as the nest argument, where % -% pop is a number \geq 0. % -% % -% If the nest argument is the letter "T", then the prevailing left % -% margin is moved to the left of the second (and following) lines of % -% X's. Otherwise, the prevailing left margin is left unchanged. % -% % -% An \unnest{n} command moves the prevailing left margin to where it was % -% before the most recent n cpar environments with "T" as the nesting % -% argument. % -% % -% The environment leaves no vertical space above or below it, or between % -% its paragraphs. (TLATeX inserts the proper amount of vertical space.) % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\newcounter{pardepth} -\setcounter{pardepth}{0} - -% \setgmargin{txt} defines \gmarginN to be txt, where N is \roman{pardepth}. -% \thegmargin equals \gmarginN, where N is \roman{pardepth}. -\newcommand{\setgmargin}[1]{% - \expandafter\xdef\csname gmargin\roman{pardepth}\endcsname{#1}} -\newcommand{\thegmargin}{\csname gmargin\roman{pardepth}\endcsname} -\newcommand{\gmargin}{0pt} - -\newsavebox{\tempsbox} - -\newlength{\@cparht} -\newlength{\@cpardp} -\newenvironment{cpar}[6]{% - \addtocounter{pardepth}{-#1}% - \ifthenelse{\boolean{shading}}{\par\begin{lrbox}{\tempsbox}% - \begin{minipage}[t]{\linewidth}}{}% - \begin{list}{}{% - \edef\temp{\thegmargin} - \ifthenelse{\equal{#3}{T}}% - {\settowidth{\leftmargin}{\hspace{\temp}\footnotesize #6\hspace{#5pt}}% - \addtolength{\leftmargin}{#4pt}}% - {\setlength{\leftmargin}{#4pt}% - \addtolength{\leftmargin}{#5pt}% - \addtolength{\leftmargin}{\temp}% - \setlength{\itemindent}{-#5pt}}% - \ifthenelse{\equal{#2}{T}}{\addtocounter{pardepth}{1}% - \setgmargin{\the\leftmargin}}{}% - \setlength{\labelwidth}{0pt}% - \setlength{\labelsep}{0pt}% - \setlength{\itemindent}{-\leftmargin}% - \setlength{\topsep}{0pt}% - \setlength{\parsep}{0pt}% - \setlength{\partopsep}{0pt}% - \setlength{\parskip}{0pt}% - \setlength{\itemsep}{0pt} - \setlength{\itemindent}{#4pt}% - \addtolength{\itemindent}{-\leftmargin}}% - \ifthenelse{\equal{#3}{T}}% - {\item[\tstrut\footnotesize \hspace{\temp}{#6}\hspace{#5pt}] - }% - {\item[\tstrut\hspace{\temp}]% - }% - \footnotesize} - {\hspace{-\the\lastskip}\tstrut - \end{list}% - \ifthenelse{\boolean{shading}}% - {\end{minipage}% - \end{lrbox}% - \ifpcalshading - \setlength{\@cparht}{\ht\tempsbox}% - \setlength{\@cpardp}{\dp\tempsbox}% - \addtolength{\@cparht}{.15em}% - \addtolength{\@cpardp}{.2em}% - \addtolength{\@cparht}{\@cpardp}% - % I don't know what's going on here. I want to add a - % \pcalvspace high shaded line, but I don't know how to - % do it. A little trial and error shows that the following - % does a reasonable job approximating that, eliminating - % the line if \pcalvspace is small. - \addtolength{\@cparht}{\pcalvspace}% - \ifdim \pcalvspace > .8em - \addtolength{\pcalvspace}{-.2em}% - \hspace*{-\lcomindent}% - \shadebox{\rule{0pt}{\pcalvspace}\hspace*{\textwidth}}\par - \global\setlength{\pcalvspace}{0pt}% - \fi - \hspace*{-\lcomindent}% - \makebox[0pt][l]{\raisebox{-\@cpardp}[0pt][0pt]{% - \shadebox{\rule{0pt}{\@cparht}\hspace*{\textwidth}}}}% - \hspace*{\lcomindent}\usebox{\tempsbox}% - \par - \else - \shadebox{\usebox{\tempsbox}}\par - \fi}% - {}% - } - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE ppar ENVIRONMENT % -% ^^^^^^^^^^^^^^^^^^^^ % -% The environment % -% % -% \begin{ppar} ... \end{ppar} % -% % -% is equivalent to % -% % -% \begin{cpar}{0}{F}{F}{0}{0}{} ... \end{cpar} % -% % -% The environment is put around each line of the output for a PlusCal % -% algorithm. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%\newenvironment{ppar}{% -% \ifthenelse{\boolean{shading}}{\par\begin{lrbox}{\tempsbox}% -% \begin{minipage}[t]{\linewidth}}{}% -% \begin{list}{}{% -% \edef\temp{\thegmargin} -% \setlength{\leftmargin}{0pt}% -% \addtolength{\leftmargin}{\temp}% -% \setlength{\itemindent}{0pt}% -% \setlength{\labelwidth}{0pt}% -% \setlength{\labelsep}{0pt}% -% \setlength{\itemindent}{-\leftmargin}% -% \setlength{\topsep}{0pt}% -% \setlength{\parsep}{0pt}% -% \setlength{\partopsep}{0pt}% -% \setlength{\parskip}{0pt}% -% \setlength{\itemsep}{0pt} -% \setlength{\itemindent}{0pt}% -% \addtolength{\itemindent}{-\leftmargin}}% -% \item[\tstrut\hspace{\temp}]}% -% {\hspace{-\the\lastskip}\tstrut -% \end{list}% -% \ifthenelse{\boolean{shading}}{\end{minipage} -% \end{lrbox}% -% \shadebox{\usebox{\tempsbox}}\par}{}% -% } - - %%% TESTING - \newcommand{\xtest}[1]{\par - \makebox[0pt][l]{\shadebox{\xtstrut\hspace*{\textwidth}}}% - \mbox{$\mbox{}#1\mbox{}$}} - -% \newcommand{\xxtest}[1]{\par -% \makebox[0pt][l]{\shadebox{\xtstrut{#1}\hspace*{\textwidth}}}% -% \mbox{$\mbox{}#1\mbox{}$}} - -%\newlength{\pcalvspace} -%\setlength{\pcalvspace}{0pt} -% \newlength{\xxtestlen} -% \setlength{\xxtestlen}{0pt} -% \newcommand\xtstrut% -% {\setlength{\xxtestlen}{1.15em}% -% \addtolength{\xxtestlen}{\pcalvspace}% -% \raisebox{\vshadelen}{\raisebox{-.25em}{\rule{0pt}{\xxtestlen}}}% -% \global\setlength{\vshadelen}{0pt}% -% \global\setlength{\pcalvspace}{0pt}} - - %%%% TESTING - - %% The xcpar environment - %% Note: overloaded use of \pcalvspace for testing. - %% -% \newlength{\xcparht}% -% \newlength{\xcpardp}% - -% \newenvironment{xcpar}[6]{% -% \addtocounter{pardepth}{-#1}% -% \ifthenelse{\boolean{shading}}{\par\begin{lrbox}{\tempsbox}% -% \begin{minipage}[t]{\linewidth}}{}% -% \begin{list}{}{% -% \edef\temp{\thegmargin}% -% \ifthenelse{\equal{#3}{T}}% -% {\settowidth{\leftmargin}{\hspace{\temp}\footnotesize #6\hspace{#5pt}}% -% \addtolength{\leftmargin}{#4pt}}% -% {\setlength{\leftmargin}{#4pt}% -% \addtolength{\leftmargin}{#5pt}% -% \addtolength{\leftmargin}{\temp}% -% \setlength{\itemindent}{-#5pt}}% -% \ifthenelse{\equal{#2}{T}}{\addtocounter{pardepth}{1}% -% \setgmargin{\the\leftmargin}}{}% -% \setlength{\labelwidth}{0pt}% -% \setlength{\labelsep}{0pt}% -% \setlength{\itemindent}{-\leftmargin}% -% \setlength{\topsep}{0pt}% -% \setlength{\parsep}{0pt}% -% \setlength{\partopsep}{0pt}% -% \setlength{\parskip}{0pt}% -% \setlength{\itemsep}{0pt}% -% \setlength{\itemindent}{#4pt}% -% \addtolength{\itemindent}{-\leftmargin}}% -% \ifthenelse{\equal{#3}{T}}% -% {\item[\xtstrut\footnotesize \hspace{\temp}{#6}\hspace{#5pt}]% -% }% -% {\item[\xtstrut\hspace{\temp}]% -% }% -% \footnotesize} -% {\hspace{-\the\lastskip}\tstrut -% \end{list}% -% \ifthenelse{\boolean{shading}}{\end{minipage} -% \end{lrbox}% -% \setlength{\xcparht}{\ht\tempsbox}% -% \setlength{\xcpardp}{\dp\tempsbox}% -% \addtolength{\xcparht}{.15em}% -% \addtolength{\xcpardp}{.2em}% -% \addtolength{\xcparht}{\xcpardp}% -% \hspace*{-\lcomindent}% -% \makebox[0pt][l]{\raisebox{-\xcpardp}[0pt][0pt]{% -% \shadebox{\rule{0pt}{\xcparht}\hspace*{\textwidth}}}}% -% \hspace*{\lcomindent}\usebox{\tempsbox}% -% \par}{}% -% } -% -% \newlength{\xmcomlen} -%\newenvironment{xmcom}[1]{% -% \setcounter{pardepth}{0}% -% \hspace{.65em}% -% \begin{lrbox}{\alignbox}\sloppypar% -% \setboolean{shading}{false}% -% \setlength{\boxwidth}{#1pt}% -% \addtolength{\boxwidth}{-.65em}% -% \begin{minipage}[t]{\boxwidth}\footnotesize -% \parskip=0pt\relax}% -% {\end{minipage}\end{lrbox}% -% \setlength{\xmcomlen}{\textwidth}% -% \addtolength{\xmcomlen}{-\wd\alignbox}% -% \settodepth{\alignwidth}{\usebox{\alignbox}}% -% \global\setlength{\multicommentdepth}{\alignwidth}% -% \setlength{\boxwidth}{\alignwidth}% -% \global\addtolength{\alignwidth}{-\maxdepth}% -% \addtolength{\boxwidth}{.1em}% -% \raisebox{0pt}[0pt][0pt]{% -% \ifthenelse{\boolean{shading}}% -% {\hspace*{-\xmcomlen}\shadebox{\rule[-\boxwidth]{0pt}{0pt}% -% \hspace*{\xmcomlen}\usebox{\alignbox}}}% -% {\usebox{\alignbox}}}% -% \vspace*{\alignwidth}\pagebreak[0]\vspace{-\alignwidth}\par} -% % a multi-line comment, whose first argument is its width in points. -% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE lcom ENVIRONMENT % -% ^^^^^^^^^^^^^^^^^^^^ % -% A multi-line comment with no text to its left is typeset in an lcom % -% environment, whose argument is a number representing the indentation % -% of the left margin, in points. All the text of the comment should be % -% inside cpar environments. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newenvironment{lcom}[1]{% - \setlength{\lcomindent}{#1pt} % Added for PlusCal handling. - \par\vspace{.2em}% - \sloppypar - \setcounter{pardepth}{0}% - \footnotesize - \begin{list}{}{% - \setlength{\leftmargin}{#1pt} - \setlength{\labelwidth}{0pt}% - \setlength{\labelsep}{0pt}% - \setlength{\itemindent}{0pt}% - \setlength{\topsep}{0pt}% - \setlength{\parsep}{0pt}% - \setlength{\partopsep}{0pt}% - \setlength{\parskip}{0pt}} - \item[]}% - {\end{list}\vspace{.3em}\setlength{\lcomindent}{0pt}% - } - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE mcom ENVIRONMENT AND \mutivspace COMMAND % -% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ % -% % -% A part of the spec containing a right-comment of the form % -% % -% xxxx (*************) % -% yyyy (* ccccccccc *) % -% ... (* ccccccccc *) % -% (* ccccccccc *) % -% (* ccccccccc *) % -% (*************) % -% % -% is typeset by % -% % -% XXXX \begin{mcom}{d} % -% CCCC ... CCC % -% \end{mcom} % -% YYYY ... % -% \multivspace{n} % -% % -% where the number d is the width in points of the comment, n is the % -% number of xxxx, yyyy, ... lines to the left of the comment. % -% All the text of the comment should be typeset in cpar environments. % -% % -% This puts the comment into a single box (so no page breaks can occur % -% within it). The entire box is shaded iff the shading flag is true. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newlength{\xmcomlen}% -\newenvironment{mcom}[1]{% - \setcounter{pardepth}{0}% - \hspace{.65em}% - \begin{lrbox}{\alignbox}\sloppypar% - \setboolean{shading}{false}% - \setlength{\boxwidth}{#1pt}% - \addtolength{\boxwidth}{-.65em}% - \begin{minipage}[t]{\boxwidth}\footnotesize - \parskip=0pt\relax}% - {\end{minipage}\end{lrbox}% - \setlength{\xmcomlen}{\textwidth}% % For PlusCal shading - \addtolength{\xmcomlen}{-\wd\alignbox}% % For PlusCal shading - \settodepth{\alignwidth}{\usebox{\alignbox}}% - \global\setlength{\multicommentdepth}{\alignwidth}% - \setlength{\boxwidth}{\alignwidth}% % For PlusCal shading - \global\addtolength{\alignwidth}{-\maxdepth}% - \addtolength{\boxwidth}{.1em}% % For PlusCal shading - \raisebox{0pt}[0pt][0pt]{% - \ifthenelse{\boolean{shading}}% - {\ifpcalshading - \hspace*{-\xmcomlen}% - \shadebox{\rule[-\boxwidth]{0pt}{0pt}\hspace*{\xmcomlen}% - \usebox{\alignbox}}% - \else - \shadebox{\usebox{\alignbox}} - \fi - }% - {\usebox{\alignbox}}}% - \vspace*{\alignwidth}\pagebreak[0]\vspace{-\alignwidth}\par} - % a multi-line comment, whose first argument is its width in points. - - -% \multispace{n} produces the vertical space indicated by "|"s in -% this situation -% -% xxxx (*************) -% xxxx (* ccccccccc *) -% | (* ccccccccc *) -% | (* ccccccccc *) -% | (* ccccccccc *) -% | (*************) -% -% where n is the number of "xxxx" lines. -\newcommand{\multivspace}[1]{\addtolength{\multicommentdepth}{-#1\baselineskip}% - \addtolength{\multicommentdepth}{1.2em}% - \ifthenelse{\lengthtest{\multicommentdepth > 0pt}}% - {\par\vspace{\multicommentdepth}\par}{}} - -%\newenvironment{hpar}[2]{% -% \begin{list}{}{\setlength{\leftmargin}{#1pt}% -% \addtolength{\leftmargin}{#2pt}% -% \setlength{\itemindent}{-#2pt}% -% \setlength{\topsep}{0pt}% -% \setlength{\parsep}{0pt}% -% \setlength{\partopsep}{0pt}% -% \setlength{\parskip}{0pt}% -% \addtolength{\labelsep}{0pt}}% -% \item[]\footnotesize}{\end{list}} -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % Typesets a sequence of paragraphs like this: % -% % % -% % left |<-- d1 --> XXXXXXXXXXXXXXXXXXXXXXXX % -% % margin | <- d2 -> XXXXXXXXXXXXXXX % -% % | XXXXXXXXXXXXXXX % -% % | % -% % | XXXXXXXXXXXXXXX % -% % | XXXXXXXXXXXXXXX % -% % % -% % where d1 = #1pt and d2 = #2pt, but with no vspace between % -% % paragraphs. % -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Commands for repeated characters that produce dashes. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \raisedDash{wd}{ht}{thk} makes a horizontal line wd characters wide, -% raised a distance ht ex's above the baseline, with a thickness of -% thk em's. -\newcommand{\raisedDash}[3]{\raisebox{#2ex}{\setlength{\alignwidth}{.5em}% - \rule{#1\alignwidth}{#3em}}} - -% The following commands take a single argument n and produce the -% output for n repeated characters, as follows -% \cdash: - -% \tdash: ~ -% \ceqdash: = -% \usdash: _ -\newcommand{\cdash}[1]{\raisedDash{#1}{.5}{.04}} -\newcommand{\usdash}[1]{\raisedDash{#1}{0}{.04}} -\newcommand{\ceqdash}[1]{\raisedDash{#1}{.5}{.08}} -\newcommand{\tdash}[1]{\raisedDash{#1}{1}{.08}} - -\newlength{\spacewidth} -\setlength{\spacewidth}{.2em} -\newcommand{\e}[1]{\hspace{#1\spacewidth}} -%% \e{i} produces space corresponding to i input spaces. - - -%% Alignment-file Commands - -\newlength{\alignboxwidth} -\newlength{\alignwidth} -\newsavebox{\alignbox} - -% \al{i}{j}{txt} is used in the alignment file to put "%{i}{j}{wd}" -% in the log file, where wd is the width of the line up to that point, -% and txt is the following text. -\newcommand{\al}[3]{% - \typeout{\%{#1}{#2}{\the\alignwidth}}% - \cl{#3}} - -%% \cl{txt} continues a specification line in the alignment file -%% with text txt. -\newcommand{\cl}[1]{% - \savebox{\alignbox}{\mbox{$\mbox{}#1\mbox{}$}}% - \settowidth{\alignboxwidth}{\usebox{\alignbox}}% - \addtolength{\alignwidth}{\alignboxwidth}% - \usebox{\alignbox}} - -% \fl{txt} in the alignment file begins a specification line that -% starts with the text txt. -\newcommand{\fl}[1]{% - \par - \savebox{\alignbox}{\mbox{$\mbox{}#1\mbox{}$}}% - \settowidth{\alignwidth}{\usebox{\alignbox}}% - \usebox{\alignbox}} - - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Ordinarily, TeX typesets letters in math mode in a special math italic % -% font. This makes it typeset "it" to look like the product of the % -% variables i and t, rather than like the word "it". The following % -% commands tell TeX to use an ordinary italic font instead. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\ifx\documentclass\undefined -\else - \DeclareSymbolFont{tlaitalics}{\encodingdefault}{cmr}{m}{it} - \let\itfam\symtlaitalics -\fi - -\makeatletter -\newcommand{\tlx@c}{\c@tlx@ctr\advance\c@tlx@ctr\@ne} -\newcounter{tlx@ctr} -\c@tlx@ctr=\itfam \multiply\c@tlx@ctr"100\relax \advance\c@tlx@ctr "7061\relax -\mathcode`a=\tlx@c \mathcode`b=\tlx@c \mathcode`c=\tlx@c \mathcode`d=\tlx@c -\mathcode`e=\tlx@c \mathcode`f=\tlx@c \mathcode`g=\tlx@c \mathcode`h=\tlx@c -\mathcode`i=\tlx@c \mathcode`j=\tlx@c \mathcode`k=\tlx@c \mathcode`l=\tlx@c -\mathcode`m=\tlx@c \mathcode`n=\tlx@c \mathcode`o=\tlx@c \mathcode`p=\tlx@c -\mathcode`q=\tlx@c \mathcode`r=\tlx@c \mathcode`s=\tlx@c \mathcode`t=\tlx@c -\mathcode`u=\tlx@c \mathcode`v=\tlx@c \mathcode`w=\tlx@c \mathcode`x=\tlx@c -\mathcode`y=\tlx@c \mathcode`z=\tlx@c -\c@tlx@ctr=\itfam \multiply\c@tlx@ctr"100\relax \advance\c@tlx@ctr "7041\relax -\mathcode`A=\tlx@c \mathcode`B=\tlx@c \mathcode`C=\tlx@c \mathcode`D=\tlx@c -\mathcode`E=\tlx@c \mathcode`F=\tlx@c \mathcode`G=\tlx@c \mathcode`H=\tlx@c -\mathcode`I=\tlx@c \mathcode`J=\tlx@c \mathcode`K=\tlx@c \mathcode`L=\tlx@c -\mathcode`M=\tlx@c \mathcode`N=\tlx@c \mathcode`O=\tlx@c \mathcode`P=\tlx@c -\mathcode`Q=\tlx@c \mathcode`R=\tlx@c \mathcode`S=\tlx@c \mathcode`T=\tlx@c -\mathcode`U=\tlx@c \mathcode`V=\tlx@c \mathcode`W=\tlx@c \mathcode`X=\tlx@c -\mathcode`Y=\tlx@c \mathcode`Z=\tlx@c -\makeatother - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE describe ENVIRONMENT % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% -% It is like the description environment except it takes an argument -% ARG that should be the text of the widest label. It adjusts the -% indentation so each item with label LABEL produces -%% LABEL blah blah blah -%% <- width of ARG ->blah blah blah -%% blah blah blah -\newenvironment{describe}[1]% - {\begin{list}{}{\settowidth{\labelwidth}{#1}% - \setlength{\labelsep}{.5em}% - \setlength{\leftmargin}{\labelwidth}% - \addtolength{\leftmargin}{\labelsep}% - \addtolength{\leftmargin}{\parindent}% - \def\makelabel##1{\rm ##1\hfill}}% - \setlength{\topsep}{0pt}}%% - % Sets \topsep to 0 to reduce vertical space above - % and below embedded displayed equations - {\end{list}} - -% For tlatex.TeX -\usepackage{verbatim} -\makeatletter -\def\tla{\let\%\relax% - \@bsphack - \typeout{\%{\the\linewidth}}% - \let\do\@makeother\dospecials\catcode`\^^M\active - \let\verbatim@startline\relax - \let\verbatim@addtoline\@gobble - \let\verbatim@processline\relax - \let\verbatim@finish\relax - \verbatim@} -\let\endtla=\@esphack - -\let\pcal=\tla -\let\endpcal=\endtla -\let\ppcal=\tla -\let\endppcal=\endtla - -% The tlatex environment is used by TLATeX.TeX to typeset TLA+. -% TLATeX.TLA starts its files by writing a \tlatex command. This -% command/environment sets \parindent to 0 and defines \% to its -% standard definition because the writing of the log files is messed up -% if \% is defined to be something else. It also executes -% \@computerule to determine the dimensions for the TLA horizonatl -% bars. -\newenvironment{tlatex}{\@computerule% - \setlength{\parindent}{0pt}% - \makeatletter\chardef\%=`\%}{} - - -% The notla environment produces no output. You can turn a -% tla environment to a notla environment to prevent tlatex.TeX from -% re-formatting the environment. - -\def\notla{\let\%\relax% - \@bsphack - \let\do\@makeother\dospecials\catcode`\^^M\active - \let\verbatim@startline\relax - \let\verbatim@addtoline\@gobble - \let\verbatim@processline\relax - \let\verbatim@finish\relax - \verbatim@} -\let\endnotla=\@esphack - -\let\nopcal=\notla -\let\endnopcal=\endnotla -\let\noppcal=\notla -\let\endnoppcal=\endnotla - -%%%%%%%%%%%%%%%%%%%%%%%% end of tlatex.sty file %%%%%%%%%%%%%%%%%%%%%%% -% last modified on Fri 3 August 2012 at 14:23:49 PST by lamport - -\begin{document} -\tlatex -\setboolean{shading}{true} -\@x{}\moduleLeftDash\@xx{ {\MODULE} TCommit}\moduleRightDash\@xx{}% -\@pvspace{8.0pt}% -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -This specification is explained in ``Transaction Commit'', Lecture 5 of - the TLA+ Video Course. -\end{cpar}% -\end{lcom}% -\@x{ {\CONSTANT} RM\@s{24.59}}% -\@y{\@s{0}% - The set of participating resource managers -}% -\@xx{}% -\@pvspace{8.0pt}% -\@x{ {\VARIABLE} rmState\@s{10.70}}% -\@y{\@s{0}% - \ensuremath{rmState[rm]} is the state of resource manager \ensuremath{r}. -}% -\@xx{}% -\@x{}\midbar\@xx{}% -\@x{ TCTypeOK \.{\defeq}}% -\begin{lcom}{8.2}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -The type-correctness invariant -\end{cpar}% -\end{lcom}% - \@x{\@s{8.2} rmState \.{\in} [ RM \.{\rightarrow} \{\@w{working} - ,\,\@w{prepared} ,\,\@w{committed} ,\,\@w{aborted} \} ]}% -\@pvspace{8.0pt}% - \@x{ TCInit \.{\defeq}\@s{8.2} rmState \.{=} [ r \.{\in} RM - \.{\mapsto}\@w{working} ]}% -\begin{lcom}{8.2}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -The initial predicate. -\end{cpar}% -\end{lcom}% -\@pvspace{8.0pt}% - \@x{ canCommit \.{\defeq} \A\, r \.{\in} RM \.{:} rmState [ r ] \.{\in} - \{\@w{prepared} ,\,\@w{committed} \}}% -\begin{lcom}{8.2}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - True iff all \ensuremath{RMs} are in the \ensuremath{\@w{prepared}} or - \ensuremath{\@w{committed}} state. -\end{cpar}% -\end{lcom}% -\@pvspace{8.0pt}% - \@x{ notCommitted \.{\defeq} \A\, r \.{\in} RM \.{:} rmState [ r ] - \.{\neq}\@w{committed}}% -\begin{lcom}{8.2}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -True iff no resource manager has decided to commit. -\end{cpar}% -\end{lcom}% -\@x{}\midbar\@xx{}% -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - We now define the actions that may be performed by the \ensuremath{RMs}, and - then - define the complete next-state action of the specification to be the - disjunction of the possible \ensuremath{RM} actions. -\end{cpar}% -\end{lcom}% -\@x{ Prepare ( r ) \.{\defeq} \.{\land} rmState [ r ] \.{=}\@w{working}}% - \@x{\@s{65.81} \.{\land} rmState \.{'} \.{=} [ rmState {\EXCEPT} {\bang} [ r - ] \.{=}\@w{prepared} ]}% -\@pvspace{8.0pt}% - \@x{ Decide ( r )\@s{4.08} \.{\defeq} \.{\lor} \.{\land} rmState [ r ] - \.{=}\@w{prepared}}% -\@x{\@s{76.92} \.{\land} canCommit}% - \@x{\@s{76.92} \.{\land} rmState \.{'} \.{=} [ rmState {\EXCEPT} {\bang} [ r - ] \.{=}\@w{committed} ]}% - \@x{\@s{65.81} \.{\lor} \.{\land} rmState [ r ] \.{\in} \{\@w{working} - ,\,\@w{prepared} \}}% -\@x{\@s{76.92} \.{\land} notCommitted}% - \@x{\@s{76.92} \.{\land} rmState \.{'} \.{=} [ rmState {\EXCEPT} {\bang} [ r - ] \.{=}\@w{aborted} ]}% -\@pvspace{8.0pt}% - \@x{ TCNext \.{\defeq} \E\, r \.{\in} RM \.{:} Prepare ( r ) \.{\lor} Decide - ( r )}% -\begin{lcom}{8.2}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -The next-state action. -\end{cpar}% -\end{lcom}% -\@x{}\midbar\@xx{}% -\@x{ TCConsistent \.{\defeq}}% -\begin{lcom}{8.2}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -A state predicate asserting that two \ensuremath{RMs} have not arrived at - conflicting decisions. It is an invariant of the specification. -\end{cpar}% -\end{lcom}% - \@x{\@s{8.2} \A\, r1 ,\, r2 \.{\in} RM \.{:} {\lnot} \.{\land} rmState [ r1 ] - \.{=}\@w{aborted}}% -\@x{\@s{88.35} \.{\land} rmState [ r2 ] \.{=}\@w{committed}}% -\@x{}\midbar\@xx{}% -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -The following part of the spec is not discussed in Video Lecture 5. It - will be explained in Video Lecture 8. -\end{cpar}% -\end{lcom}% -\@x{ TCSpec \.{\defeq} TCInit \.{\land} {\Box} [ TCNext ]_{ rmState}}% -\begin{lcom}{8.2}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -The complete specification of the protocol written as a temporal - formula. -\end{cpar}% -\end{lcom}% -\@pvspace{8.0pt}% - \@x{ {\THEOREM} TCSpec \.{\implies} {\Box} ( TCTypeOK \.{\land} TCConsistent - )}% -\begin{lcom}{8.2}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -This theorem asserts the truth of the temporal formula whose meaning - is that the state predicate \ensuremath{TCTypeOK \.{\land} TCInvariant} is - an invariant - of the specification \ensuremath{TCSpec}. Invariance of this conjunction is - equivalent to invariance of both of the formulas \ensuremath{TCTypeOK} and - \ensuremath{TCConsistent}. -\end{cpar}% -\end{lcom}% -\@pvspace{8.0pt}% -\@x{}\bottombar\@xx{}% -\setboolean{shading}{false} -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -\ensuremath{\.{\,\backslash\,}}* Modification History -\end{cpar}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - \ensuremath{\.{\,\backslash\,}}* Last modified \ensuremath{Fri} - \ensuremath{Dec} 21 17:16:06 \ensuremath{CET} 2018 by \ensuremath{veitheller -}% -\end{cpar}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - \ensuremath{\.{\,\backslash\,}}* Created \ensuremath{Fri} \ensuremath{Dec} 21 - 17:15:44 \ensuremath{CET} 2018 by \ensuremath{veitheller -}% -\end{cpar}% -\end{lcom}% -\end{document} diff --git a/TCommit.toolbox/TCommit___Model_1.launch b/TCommit.toolbox/TCommit___Model_1.launch deleted file mode 100644 index 1a8db62..0000000 --- a/TCommit.toolbox/TCommit___Model_1.launch +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TCommit.toolbox/TCommit___Model_1_SnapShot_1545410479536.launch b/TCommit.toolbox/TCommit___Model_1_SnapShot_1545410479536.launch deleted file mode 100644 index 700b4d7..0000000 --- a/TCommit.toolbox/TCommit___Model_1_SnapShot_1545410479536.launch +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TCommit.toolbox/TCommit___Model_1_SnapShot_1545410497334.launch b/TCommit.toolbox/TCommit___Model_1_SnapShot_1545410497334.launch deleted file mode 100644 index f7e01b5..0000000 --- a/TCommit.toolbox/TCommit___Model_1_SnapShot_1545410497334.launch +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TCommit.toolbox/TCommit___Model_1_SnapShot_1545410597019.launch b/TCommit.toolbox/TCommit___Model_1_SnapShot_1545410597019.launch deleted file mode 100644 index db2aec6..0000000 --- a/TCommit.toolbox/TCommit___Model_1_SnapShot_1545410597019.launch +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TwoPhase.toolbox/.project b/TwoPhase.toolbox/.project deleted file mode 100644 index bdb139b..0000000 --- a/TwoPhase.toolbox/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - TwoPhase - - - - - - toolbox.builder.TLAParserBuilder - - - - - - toolbox.natures.TLANature - - - - TCommit.tla - 1 - /Users/veitheller/Documents/Code/Github/simple/TCommit.tla - - - TwoPhase.tla - 1 - PARENT-1-PROJECT_LOC/TwoPhase.tla - - - diff --git a/TwoPhase.toolbox/.settings/org.lamport.tla.toolbox.prefs b/TwoPhase.toolbox/.settings/org.lamport.tla.toolbox.prefs deleted file mode 100644 index 31b2e59..0000000 --- a/TwoPhase.toolbox/.settings/org.lamport.tla.toolbox.prefs +++ /dev/null @@ -1,2 +0,0 @@ -ProjectRootFile=PARENT-1-PROJECT_LOC/TwoPhase.tla -eclipse.preferences.version=1 diff --git a/TwoPhase.toolbox/Model_1/MC.cfg b/TwoPhase.toolbox/Model_1/MC.cfg deleted file mode 100644 index b750119..0000000 --- a/TwoPhase.toolbox/Model_1/MC.cfg +++ /dev/null @@ -1,21 +0,0 @@ -\* MV CONSTANT declarations -CONSTANTS -r1 = r1 -r2 = r2 -r3 = r3 -\* MV CONSTANT definitions -CONSTANT -RM <- const_154592300704034000 -\* SYMMETRY definition -SYMMETRY symm_154592300704035000 -\* INIT definition -INIT -init_154592300704036000 -\* NEXT definition -NEXT -next_154592300704037000 -\* INVARIANT definition -INVARIANT -inv_154592300704038000 -inv_154592300704039000 -\* Generated on Thu Dec 27 16:03:27 CET 2018 \ No newline at end of file diff --git a/TwoPhase.toolbox/Model_1/MC.tla b/TwoPhase.toolbox/Model_1/MC.tla deleted file mode 100644 index 150e7b1..0000000 --- a/TwoPhase.toolbox/Model_1/MC.tla +++ /dev/null @@ -1,37 +0,0 @@ ----- MODULE MC ---- -EXTENDS TwoPhase, TLC - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -r1, r2, r3 ----- - -\* MV CONSTANT definitions RM -const_154592300704034000 == -{r1, r2, r3} ----- - -\* SYMMETRY definition -symm_154592300704035000 == -Permutations(const_154592300704034000) ----- - -\* INIT definition @modelBehaviorInit:0 -init_154592300704036000 == -TPInit ----- -\* NEXT definition @modelBehaviorNext:0 -next_154592300704037000 == -TPNext ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_154592300704038000 == -TPTypeOK ----- -\* INVARIANT definition @modelCorrectnessInvariants:1 -inv_154592300704039000 == -TCConsistent ----- -============================================================================= -\* Modification History -\* Created Thu Dec 27 16:03:27 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1/TCommit.tla b/TwoPhase.toolbox/Model_1/TCommit.tla deleted file mode 100644 index 86364e1..0000000 --- a/TwoPhase.toolbox/Model_1/TCommit.tla +++ /dev/null @@ -1,82 +0,0 @@ ------------------------------- MODULE TCommit ------------------------------ - -(***************************************************************************) -(* This specification is explained in "Transaction Commit", Lecture 5 of *) -(* the TLA+ Video Course. *) -(***************************************************************************) -CONSTANT RM \* The set of participating resource managers - -VARIABLE rmState \* rmState[rm] is the state of resource manager r. ------------------------------------------------------------------------------ -TCTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - -TCInit == rmState = [r \in RM |-> "working"] - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - -canCommit == \A r \in RM : rmState[r] \in {"prepared", "committed"} - (*************************************************************************) - (* True iff all RMs are in the "prepared" or "committed" state. *) - (*************************************************************************) - -notCommitted == \A r \in RM : rmState[r] # "committed" - (*************************************************************************) - (* True iff no resource manager has decided to commit. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the RMs, and then *) -(* define the complete next-state action of the specification to be the *) -(* disjunction of the possible RM actions. *) -(***************************************************************************) -Prepare(r) == /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - -Decide(r) == \/ /\ rmState[r] = "prepared" - /\ canCommit - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - \/ /\ rmState[r] \in {"working", "prepared"} - /\ notCommitted - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - -TCNext == \E r \in RM : Prepare(r) \/ Decide(r) - (*************************************************************************) - (* The next-state action. *) - (*************************************************************************) ------------------------------------------------------------------------------ -TCConsistent == - (*************************************************************************) - (* A state predicate asserting that two RMs have not arrived at *) - (* conflicting decisions. It is an invariant of the specification. *) - (*************************************************************************) - \A r1, r2 \in RM : ~ /\ rmState[r1] = "aborted" - /\ rmState[r2] = "committed" ------------------------------------------------------------------------------ -(***************************************************************************) -(* The following part of the spec is not discussed in Video Lecture 5. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) -TCSpec == TCInit /\ [][TCNext]_rmState - (*************************************************************************) - (* The complete specification of the protocol written as a temporal *) - (* formula. *) - (*************************************************************************) - -THEOREM TCSpec => [](TCTypeOK /\ TCConsistent) - (*************************************************************************) - (* This theorem asserts the truth of the temporal formula whose meaning *) - (* is that the state predicate TCTypeOK /\ TCInvariant is an invariant *) - (* of the specification TCSpec. Invariance of this conjunction is *) - (* equivalent to invariance of both of the formulas TCTypeOK and *) - (* TCConsistent. *) - (*************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 17:16:06 CET 2018 by veitheller -\* Created Fri Dec 21 17:15:44 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1/TwoPhase.tla b/TwoPhase.toolbox/Model_1/TwoPhase.tla deleted file mode 100644 index 87617e6..0000000 --- a/TwoPhase.toolbox/Model_1/TwoPhase.tla +++ /dev/null @@ -1,182 +0,0 @@ ------------------------------- MODULE TwoPhase ------------------------------ - -(***************************************************************************) -(* This specification is discussed in "Two-Phase Commit", Lecture 6 of the *) -(* TLA+ Video Course. It describes the Two-Phase Commit protocol, in *) -(* which a transaction manager (TM) coordinates the resource managers *) -(* (RMs) to implement the Transaction Commit specification of module *) -(* TCommit. In this specification, RMs spontaneously issue Prepared *) -(* messages. We ignore the Prepare messages that the TM can send to the *) -(* RMs. *) -(* *) -(* For simplicity, we also eliminate Abort messages sent by an RM when it *) -(* decides to abort. Such a message would cause the TM to abort the *) -(* transaction, an event represented here by the TM spontaneously deciding *) -(* to abort. *) -(***************************************************************************) -CONSTANT RM \* The set of resource managers - -VARIABLES - rmState, \* rmState[r] is the state of resource manager r. - tmState, \* The state of the transaction manager. - tmPrepared, \* The set of RMs from which the TM has received "Prepared" - \* messages. - msgs - (***********************************************************************) - (* In the protocol, processes communicate with one another by sending *) - (* messages. For simplicity, we represent message passing with the *) - (* variable msgs whose value is the set of all messages that have been *) - (* sent. A message is sent by adding it to the set msgs. An action *) - (* that, in an implementation, would be enabled by the receipt of a *) - (* certain message is here enabled by the presence of that message in *) - (* msgs. For simplicity, messages are never removed from msgs. This *) - (* allows a single message to be received by multiple receivers. *) - (* Receipt of the same message twice is therefore allowed; but in this *) - (* particular protocol, that's not a problem. *) - (***********************************************************************) - -Messages == - (*************************************************************************) - (* The set of all possible messages. Messages of type "Prepared" are *) - (* sent from the RM indicated by the message's rm field to the TM. *) - (* Messages of type "Commit" and "Abort" are broadcast by the TM, to be *) - (* received by all RMs. The set msgs contains just a single copy of *) - (* such a message. *) - (*************************************************************************) - [type : {"Prepared"}, rm : RM] \cup [type : {"Commit", "Abort"}] - -TPTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - /\ rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - /\ tmState \in {"init", "done"} - /\ tmPrepared \subseteq RM - /\ msgs \subseteq Messages - -TPInit == - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - /\ rmState = [r \in RM |-> "working"] - /\ tmState = "init" - /\ tmPrepared = {} - /\ msgs = {} ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the processes, first *) -(* the TM's actions, then the RMs' actions. *) -(***************************************************************************) -TMRcvPrepared(r) == - (*************************************************************************) - (* The TM receives a "Prepared" message from resource manager r. We *) - (* could add the additional enabling condition r \notin tmPrepared, *) - (* which disables the action if the TM has already received this *) - (* message. But there is no need, because in that case the action has *) - (* no effect; it leaves the state unchanged. *) - (*************************************************************************) - /\ tmState = "init" - /\ [type |-> "Prepared", rm |-> r] \in msgs - /\ tmPrepared' = tmPrepared \cup {r} - /\ UNCHANGED <> - -TMCommit == - (*************************************************************************) - (* The TM commits the transaction; enabled iff the TM is in its initial *) - (* state and every RM has sent a "Prepared" message. *) - (*************************************************************************) - /\ tmState = "init" - /\ tmPrepared = RM - /\ tmState' = "done" - /\ msgs' = msgs \cup {[type |-> "Commit"]} - /\ UNCHANGED <> - -TMAbort == - (*************************************************************************) - (* The TM spontaneously aborts the transaction. *) - (*************************************************************************) - /\ tmState = "init" - /\ tmState' = "done" - /\ msgs' = msgs \cup {[type |-> "Abort"]} - /\ UNCHANGED <> - -RMPrepare(r) == - (*************************************************************************) - (* Resource manager r prepares. *) - (*************************************************************************) - /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - /\ msgs' = msgs \cup {[type |-> "Prepared", rm |-> r]} - /\ UNCHANGED <> - -RMChooseToAbort(r) == - (*************************************************************************) - (* Resource manager r spontaneously decides to abort. As noted above, r *) - (* does not send any message in our simplified spec. *) - (*************************************************************************) - /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - /\ UNCHANGED <> - -RMRcvCommitMsg(r) == - (*************************************************************************) - (* Resource manager r is told by the TM to commit. *) - (*************************************************************************) - /\ [type |-> "Commit"] \in msgs - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - /\ UNCHANGED <> - -RMRcvAbortMsg(r) == - (*************************************************************************) - (* Resource manager r is told by the TM to abort. *) - (*************************************************************************) - /\ [type |-> "Abort"] \in msgs - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - /\ UNCHANGED <> - -TPNext == - \/ TMCommit \/ TMAbort - \/ \E r \in RM : - TMRcvPrepared(r) \/ RMPrepare(r) \/ RMChooseToAbort(r) - \/ RMRcvCommitMsg(r) \/ RMRcvAbortMsg(r) ------------------------------------------------------------------------------ -(***************************************************************************) -(* The material below this point is not discussed in Video Lecture 6. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) - -TPSpec == TPInit /\ [][TPNext]_<> - (*************************************************************************) - (* The complete spec of the Two-Phase Commit protocol. *) - (*************************************************************************) - -THEOREM TPSpec => []TPTypeOK - (*************************************************************************) - (* This theorem asserts that the type-correctness predicate TPTypeOK is *) - (* an invariant of the specification. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now assert that the Two-Phase Commit protocol implements the *) -(* Transaction Commit protocol of module TCommit. The following statement *) -(* imports all the definitions from module TCommit into the current *) -(* module. *) -(***************************************************************************) -INSTANCE TCommit - -THEOREM TPSpec => TCSpec - (*************************************************************************) - (* This theorem asserts that the specification TPSpec of the Two-Phase *) - (* Commit protocol implements the specification TCSpec of the *) - (* Transaction Commit protocol. *) - (*************************************************************************) -(***************************************************************************) -(* The two theorems in this module have been checked with TLC for six *) -(* RMs, a configuration with 50816 reachable states, in a little over a *) -(* minute on a 1 GHz PC. *) -(***************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Thu Dec 27 15:46:42 CET 2018 by veitheller -\* Created Thu Dec 27 15:46:21 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545922765832/MC.cfg b/TwoPhase.toolbox/Model_1_SnapShot_1545922765832/MC.cfg deleted file mode 100644 index 8c379b1..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545922765832/MC.cfg +++ /dev/null @@ -1,13 +0,0 @@ -\* CONSTANT definitions -CONSTANT -RM <- const_15459227497686000 -\* INIT definition -INIT -init_15459227497687000 -\* NEXT definition -NEXT -next_15459227497688000 -\* INVARIANT definition -INVARIANT -inv_15459227497689000 -\* Generated on Thu Dec 27 15:59:09 CET 2018 \ No newline at end of file diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545922765832/MC.tla b/TwoPhase.toolbox/Model_1_SnapShot_1545922765832/MC.tla deleted file mode 100644 index 22fce1f..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545922765832/MC.tla +++ /dev/null @@ -1,23 +0,0 @@ ----- MODULE MC ---- -EXTENDS TwoPhase, TLC - -\* CONSTANT definitions @modelParameterConstants:0RM -const_15459227497686000 == -{"r1", "r2", "r3"} ----- - -\* INIT definition @modelBehaviorInit:0 -init_15459227497687000 == -TPInit ----- -\* NEXT definition @modelBehaviorNext:0 -next_15459227497688000 == -TPNext ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_15459227497689000 == -TPTypeOK ----- -============================================================================= -\* Modification History -\* Created Thu Dec 27 15:59:09 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545922765832/TCommit.tla b/TwoPhase.toolbox/Model_1_SnapShot_1545922765832/TCommit.tla deleted file mode 100644 index 86364e1..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545922765832/TCommit.tla +++ /dev/null @@ -1,82 +0,0 @@ ------------------------------- MODULE TCommit ------------------------------ - -(***************************************************************************) -(* This specification is explained in "Transaction Commit", Lecture 5 of *) -(* the TLA+ Video Course. *) -(***************************************************************************) -CONSTANT RM \* The set of participating resource managers - -VARIABLE rmState \* rmState[rm] is the state of resource manager r. ------------------------------------------------------------------------------ -TCTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - -TCInit == rmState = [r \in RM |-> "working"] - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - -canCommit == \A r \in RM : rmState[r] \in {"prepared", "committed"} - (*************************************************************************) - (* True iff all RMs are in the "prepared" or "committed" state. *) - (*************************************************************************) - -notCommitted == \A r \in RM : rmState[r] # "committed" - (*************************************************************************) - (* True iff no resource manager has decided to commit. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the RMs, and then *) -(* define the complete next-state action of the specification to be the *) -(* disjunction of the possible RM actions. *) -(***************************************************************************) -Prepare(r) == /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - -Decide(r) == \/ /\ rmState[r] = "prepared" - /\ canCommit - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - \/ /\ rmState[r] \in {"working", "prepared"} - /\ notCommitted - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - -TCNext == \E r \in RM : Prepare(r) \/ Decide(r) - (*************************************************************************) - (* The next-state action. *) - (*************************************************************************) ------------------------------------------------------------------------------ -TCConsistent == - (*************************************************************************) - (* A state predicate asserting that two RMs have not arrived at *) - (* conflicting decisions. It is an invariant of the specification. *) - (*************************************************************************) - \A r1, r2 \in RM : ~ /\ rmState[r1] = "aborted" - /\ rmState[r2] = "committed" ------------------------------------------------------------------------------ -(***************************************************************************) -(* The following part of the spec is not discussed in Video Lecture 5. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) -TCSpec == TCInit /\ [][TCNext]_rmState - (*************************************************************************) - (* The complete specification of the protocol written as a temporal *) - (* formula. *) - (*************************************************************************) - -THEOREM TCSpec => [](TCTypeOK /\ TCConsistent) - (*************************************************************************) - (* This theorem asserts the truth of the temporal formula whose meaning *) - (* is that the state predicate TCTypeOK /\ TCInvariant is an invariant *) - (* of the specification TCSpec. Invariance of this conjunction is *) - (* equivalent to invariance of both of the formulas TCTypeOK and *) - (* TCConsistent. *) - (*************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 17:16:06 CET 2018 by veitheller -\* Created Fri Dec 21 17:15:44 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545922765832/TwoPhase.tla b/TwoPhase.toolbox/Model_1_SnapShot_1545922765832/TwoPhase.tla deleted file mode 100644 index 87617e6..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545922765832/TwoPhase.tla +++ /dev/null @@ -1,182 +0,0 @@ ------------------------------- MODULE TwoPhase ------------------------------ - -(***************************************************************************) -(* This specification is discussed in "Two-Phase Commit", Lecture 6 of the *) -(* TLA+ Video Course. It describes the Two-Phase Commit protocol, in *) -(* which a transaction manager (TM) coordinates the resource managers *) -(* (RMs) to implement the Transaction Commit specification of module *) -(* TCommit. In this specification, RMs spontaneously issue Prepared *) -(* messages. We ignore the Prepare messages that the TM can send to the *) -(* RMs. *) -(* *) -(* For simplicity, we also eliminate Abort messages sent by an RM when it *) -(* decides to abort. Such a message would cause the TM to abort the *) -(* transaction, an event represented here by the TM spontaneously deciding *) -(* to abort. *) -(***************************************************************************) -CONSTANT RM \* The set of resource managers - -VARIABLES - rmState, \* rmState[r] is the state of resource manager r. - tmState, \* The state of the transaction manager. - tmPrepared, \* The set of RMs from which the TM has received "Prepared" - \* messages. - msgs - (***********************************************************************) - (* In the protocol, processes communicate with one another by sending *) - (* messages. For simplicity, we represent message passing with the *) - (* variable msgs whose value is the set of all messages that have been *) - (* sent. A message is sent by adding it to the set msgs. An action *) - (* that, in an implementation, would be enabled by the receipt of a *) - (* certain message is here enabled by the presence of that message in *) - (* msgs. For simplicity, messages are never removed from msgs. This *) - (* allows a single message to be received by multiple receivers. *) - (* Receipt of the same message twice is therefore allowed; but in this *) - (* particular protocol, that's not a problem. *) - (***********************************************************************) - -Messages == - (*************************************************************************) - (* The set of all possible messages. Messages of type "Prepared" are *) - (* sent from the RM indicated by the message's rm field to the TM. *) - (* Messages of type "Commit" and "Abort" are broadcast by the TM, to be *) - (* received by all RMs. The set msgs contains just a single copy of *) - (* such a message. *) - (*************************************************************************) - [type : {"Prepared"}, rm : RM] \cup [type : {"Commit", "Abort"}] - -TPTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - /\ rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - /\ tmState \in {"init", "done"} - /\ tmPrepared \subseteq RM - /\ msgs \subseteq Messages - -TPInit == - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - /\ rmState = [r \in RM |-> "working"] - /\ tmState = "init" - /\ tmPrepared = {} - /\ msgs = {} ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the processes, first *) -(* the TM's actions, then the RMs' actions. *) -(***************************************************************************) -TMRcvPrepared(r) == - (*************************************************************************) - (* The TM receives a "Prepared" message from resource manager r. We *) - (* could add the additional enabling condition r \notin tmPrepared, *) - (* which disables the action if the TM has already received this *) - (* message. But there is no need, because in that case the action has *) - (* no effect; it leaves the state unchanged. *) - (*************************************************************************) - /\ tmState = "init" - /\ [type |-> "Prepared", rm |-> r] \in msgs - /\ tmPrepared' = tmPrepared \cup {r} - /\ UNCHANGED <> - -TMCommit == - (*************************************************************************) - (* The TM commits the transaction; enabled iff the TM is in its initial *) - (* state and every RM has sent a "Prepared" message. *) - (*************************************************************************) - /\ tmState = "init" - /\ tmPrepared = RM - /\ tmState' = "done" - /\ msgs' = msgs \cup {[type |-> "Commit"]} - /\ UNCHANGED <> - -TMAbort == - (*************************************************************************) - (* The TM spontaneously aborts the transaction. *) - (*************************************************************************) - /\ tmState = "init" - /\ tmState' = "done" - /\ msgs' = msgs \cup {[type |-> "Abort"]} - /\ UNCHANGED <> - -RMPrepare(r) == - (*************************************************************************) - (* Resource manager r prepares. *) - (*************************************************************************) - /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - /\ msgs' = msgs \cup {[type |-> "Prepared", rm |-> r]} - /\ UNCHANGED <> - -RMChooseToAbort(r) == - (*************************************************************************) - (* Resource manager r spontaneously decides to abort. As noted above, r *) - (* does not send any message in our simplified spec. *) - (*************************************************************************) - /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - /\ UNCHANGED <> - -RMRcvCommitMsg(r) == - (*************************************************************************) - (* Resource manager r is told by the TM to commit. *) - (*************************************************************************) - /\ [type |-> "Commit"] \in msgs - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - /\ UNCHANGED <> - -RMRcvAbortMsg(r) == - (*************************************************************************) - (* Resource manager r is told by the TM to abort. *) - (*************************************************************************) - /\ [type |-> "Abort"] \in msgs - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - /\ UNCHANGED <> - -TPNext == - \/ TMCommit \/ TMAbort - \/ \E r \in RM : - TMRcvPrepared(r) \/ RMPrepare(r) \/ RMChooseToAbort(r) - \/ RMRcvCommitMsg(r) \/ RMRcvAbortMsg(r) ------------------------------------------------------------------------------ -(***************************************************************************) -(* The material below this point is not discussed in Video Lecture 6. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) - -TPSpec == TPInit /\ [][TPNext]_<> - (*************************************************************************) - (* The complete spec of the Two-Phase Commit protocol. *) - (*************************************************************************) - -THEOREM TPSpec => []TPTypeOK - (*************************************************************************) - (* This theorem asserts that the type-correctness predicate TPTypeOK is *) - (* an invariant of the specification. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now assert that the Two-Phase Commit protocol implements the *) -(* Transaction Commit protocol of module TCommit. The following statement *) -(* imports all the definitions from module TCommit into the current *) -(* module. *) -(***************************************************************************) -INSTANCE TCommit - -THEOREM TPSpec => TCSpec - (*************************************************************************) - (* This theorem asserts that the specification TPSpec of the Two-Phase *) - (* Commit protocol implements the specification TCSpec of the *) - (* Transaction Commit protocol. *) - (*************************************************************************) -(***************************************************************************) -(* The two theorems in this module have been checked with TLC for six *) -(* RMs, a configuration with 50816 reachable states, in a little over a *) -(* minute on a 1 GHz PC. *) -(***************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Thu Dec 27 15:46:42 CET 2018 by veitheller -\* Created Thu Dec 27 15:46:21 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545922881813/MC.cfg b/TwoPhase.toolbox/Model_1_SnapShot_1545922881813/MC.cfg deleted file mode 100644 index f0cd133..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545922881813/MC.cfg +++ /dev/null @@ -1,13 +0,0 @@ -\* CONSTANT definitions -CONSTANT -RM <- const_154592286770714000 -\* INIT definition -INIT -init_154592286770715000 -\* NEXT definition -NEXT -next_154592286770716000 -\* INVARIANT definition -INVARIANT -inv_154592286770717000 -\* Generated on Thu Dec 27 16:01:07 CET 2018 \ No newline at end of file diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545922881813/MC.tla b/TwoPhase.toolbox/Model_1_SnapShot_1545922881813/MC.tla deleted file mode 100644 index 5c504ea..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545922881813/MC.tla +++ /dev/null @@ -1,23 +0,0 @@ ----- MODULE MC ---- -EXTENDS TwoPhase, TLC - -\* CONSTANT definitions @modelParameterConstants:0RM -const_154592286770714000 == -{"r1", "r2", "r3", "r4", "r5"} ----- - -\* INIT definition @modelBehaviorInit:0 -init_154592286770715000 == -TPInit ----- -\* NEXT definition @modelBehaviorNext:0 -next_154592286770716000 == -TPNext ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_154592286770717000 == -TPTypeOK ----- -============================================================================= -\* Modification History -\* Created Thu Dec 27 16:01:07 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545922881813/TCommit.tla b/TwoPhase.toolbox/Model_1_SnapShot_1545922881813/TCommit.tla deleted file mode 100644 index 86364e1..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545922881813/TCommit.tla +++ /dev/null @@ -1,82 +0,0 @@ ------------------------------- MODULE TCommit ------------------------------ - -(***************************************************************************) -(* This specification is explained in "Transaction Commit", Lecture 5 of *) -(* the TLA+ Video Course. *) -(***************************************************************************) -CONSTANT RM \* The set of participating resource managers - -VARIABLE rmState \* rmState[rm] is the state of resource manager r. ------------------------------------------------------------------------------ -TCTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - -TCInit == rmState = [r \in RM |-> "working"] - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - -canCommit == \A r \in RM : rmState[r] \in {"prepared", "committed"} - (*************************************************************************) - (* True iff all RMs are in the "prepared" or "committed" state. *) - (*************************************************************************) - -notCommitted == \A r \in RM : rmState[r] # "committed" - (*************************************************************************) - (* True iff no resource manager has decided to commit. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the RMs, and then *) -(* define the complete next-state action of the specification to be the *) -(* disjunction of the possible RM actions. *) -(***************************************************************************) -Prepare(r) == /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - -Decide(r) == \/ /\ rmState[r] = "prepared" - /\ canCommit - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - \/ /\ rmState[r] \in {"working", "prepared"} - /\ notCommitted - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - -TCNext == \E r \in RM : Prepare(r) \/ Decide(r) - (*************************************************************************) - (* The next-state action. *) - (*************************************************************************) ------------------------------------------------------------------------------ -TCConsistent == - (*************************************************************************) - (* A state predicate asserting that two RMs have not arrived at *) - (* conflicting decisions. It is an invariant of the specification. *) - (*************************************************************************) - \A r1, r2 \in RM : ~ /\ rmState[r1] = "aborted" - /\ rmState[r2] = "committed" ------------------------------------------------------------------------------ -(***************************************************************************) -(* The following part of the spec is not discussed in Video Lecture 5. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) -TCSpec == TCInit /\ [][TCNext]_rmState - (*************************************************************************) - (* The complete specification of the protocol written as a temporal *) - (* formula. *) - (*************************************************************************) - -THEOREM TCSpec => [](TCTypeOK /\ TCConsistent) - (*************************************************************************) - (* This theorem asserts the truth of the temporal formula whose meaning *) - (* is that the state predicate TCTypeOK /\ TCInvariant is an invariant *) - (* of the specification TCSpec. Invariance of this conjunction is *) - (* equivalent to invariance of both of the formulas TCTypeOK and *) - (* TCConsistent. *) - (*************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 17:16:06 CET 2018 by veitheller -\* Created Fri Dec 21 17:15:44 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545922881813/TwoPhase.tla b/TwoPhase.toolbox/Model_1_SnapShot_1545922881813/TwoPhase.tla deleted file mode 100644 index 87617e6..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545922881813/TwoPhase.tla +++ /dev/null @@ -1,182 +0,0 @@ ------------------------------- MODULE TwoPhase ------------------------------ - -(***************************************************************************) -(* This specification is discussed in "Two-Phase Commit", Lecture 6 of the *) -(* TLA+ Video Course. It describes the Two-Phase Commit protocol, in *) -(* which a transaction manager (TM) coordinates the resource managers *) -(* (RMs) to implement the Transaction Commit specification of module *) -(* TCommit. In this specification, RMs spontaneously issue Prepared *) -(* messages. We ignore the Prepare messages that the TM can send to the *) -(* RMs. *) -(* *) -(* For simplicity, we also eliminate Abort messages sent by an RM when it *) -(* decides to abort. Such a message would cause the TM to abort the *) -(* transaction, an event represented here by the TM spontaneously deciding *) -(* to abort. *) -(***************************************************************************) -CONSTANT RM \* The set of resource managers - -VARIABLES - rmState, \* rmState[r] is the state of resource manager r. - tmState, \* The state of the transaction manager. - tmPrepared, \* The set of RMs from which the TM has received "Prepared" - \* messages. - msgs - (***********************************************************************) - (* In the protocol, processes communicate with one another by sending *) - (* messages. For simplicity, we represent message passing with the *) - (* variable msgs whose value is the set of all messages that have been *) - (* sent. A message is sent by adding it to the set msgs. An action *) - (* that, in an implementation, would be enabled by the receipt of a *) - (* certain message is here enabled by the presence of that message in *) - (* msgs. For simplicity, messages are never removed from msgs. This *) - (* allows a single message to be received by multiple receivers. *) - (* Receipt of the same message twice is therefore allowed; but in this *) - (* particular protocol, that's not a problem. *) - (***********************************************************************) - -Messages == - (*************************************************************************) - (* The set of all possible messages. Messages of type "Prepared" are *) - (* sent from the RM indicated by the message's rm field to the TM. *) - (* Messages of type "Commit" and "Abort" are broadcast by the TM, to be *) - (* received by all RMs. The set msgs contains just a single copy of *) - (* such a message. *) - (*************************************************************************) - [type : {"Prepared"}, rm : RM] \cup [type : {"Commit", "Abort"}] - -TPTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - /\ rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - /\ tmState \in {"init", "done"} - /\ tmPrepared \subseteq RM - /\ msgs \subseteq Messages - -TPInit == - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - /\ rmState = [r \in RM |-> "working"] - /\ tmState = "init" - /\ tmPrepared = {} - /\ msgs = {} ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the processes, first *) -(* the TM's actions, then the RMs' actions. *) -(***************************************************************************) -TMRcvPrepared(r) == - (*************************************************************************) - (* The TM receives a "Prepared" message from resource manager r. We *) - (* could add the additional enabling condition r \notin tmPrepared, *) - (* which disables the action if the TM has already received this *) - (* message. But there is no need, because in that case the action has *) - (* no effect; it leaves the state unchanged. *) - (*************************************************************************) - /\ tmState = "init" - /\ [type |-> "Prepared", rm |-> r] \in msgs - /\ tmPrepared' = tmPrepared \cup {r} - /\ UNCHANGED <> - -TMCommit == - (*************************************************************************) - (* The TM commits the transaction; enabled iff the TM is in its initial *) - (* state and every RM has sent a "Prepared" message. *) - (*************************************************************************) - /\ tmState = "init" - /\ tmPrepared = RM - /\ tmState' = "done" - /\ msgs' = msgs \cup {[type |-> "Commit"]} - /\ UNCHANGED <> - -TMAbort == - (*************************************************************************) - (* The TM spontaneously aborts the transaction. *) - (*************************************************************************) - /\ tmState = "init" - /\ tmState' = "done" - /\ msgs' = msgs \cup {[type |-> "Abort"]} - /\ UNCHANGED <> - -RMPrepare(r) == - (*************************************************************************) - (* Resource manager r prepares. *) - (*************************************************************************) - /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - /\ msgs' = msgs \cup {[type |-> "Prepared", rm |-> r]} - /\ UNCHANGED <> - -RMChooseToAbort(r) == - (*************************************************************************) - (* Resource manager r spontaneously decides to abort. As noted above, r *) - (* does not send any message in our simplified spec. *) - (*************************************************************************) - /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - /\ UNCHANGED <> - -RMRcvCommitMsg(r) == - (*************************************************************************) - (* Resource manager r is told by the TM to commit. *) - (*************************************************************************) - /\ [type |-> "Commit"] \in msgs - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - /\ UNCHANGED <> - -RMRcvAbortMsg(r) == - (*************************************************************************) - (* Resource manager r is told by the TM to abort. *) - (*************************************************************************) - /\ [type |-> "Abort"] \in msgs - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - /\ UNCHANGED <> - -TPNext == - \/ TMCommit \/ TMAbort - \/ \E r \in RM : - TMRcvPrepared(r) \/ RMPrepare(r) \/ RMChooseToAbort(r) - \/ RMRcvCommitMsg(r) \/ RMRcvAbortMsg(r) ------------------------------------------------------------------------------ -(***************************************************************************) -(* The material below this point is not discussed in Video Lecture 6. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) - -TPSpec == TPInit /\ [][TPNext]_<> - (*************************************************************************) - (* The complete spec of the Two-Phase Commit protocol. *) - (*************************************************************************) - -THEOREM TPSpec => []TPTypeOK - (*************************************************************************) - (* This theorem asserts that the type-correctness predicate TPTypeOK is *) - (* an invariant of the specification. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now assert that the Two-Phase Commit protocol implements the *) -(* Transaction Commit protocol of module TCommit. The following statement *) -(* imports all the definitions from module TCommit into the current *) -(* module. *) -(***************************************************************************) -INSTANCE TCommit - -THEOREM TPSpec => TCSpec - (*************************************************************************) - (* This theorem asserts that the specification TPSpec of the Two-Phase *) - (* Commit protocol implements the specification TCSpec of the *) - (* Transaction Commit protocol. *) - (*************************************************************************) -(***************************************************************************) -(* The two theorems in this module have been checked with TLC for six *) -(* RMs, a configuration with 50816 reachable states, in a little over a *) -(* minute on a 1 GHz PC. *) -(***************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Thu Dec 27 15:46:42 CET 2018 by veitheller -\* Created Thu Dec 27 15:46:21 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545922927774/MC.cfg b/TwoPhase.toolbox/Model_1_SnapShot_1545922927774/MC.cfg deleted file mode 100644 index 5f1cfb2..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545922927774/MC.cfg +++ /dev/null @@ -1,20 +0,0 @@ -\* MV CONSTANT declarations -CONSTANTS -r1 = r1 -r2 = r2 -r3 = r3 -\* MV CONSTANT definitions -CONSTANT -RM <- const_154592291369123000 -\* SYMMETRY definition -SYMMETRY symm_154592291369124000 -\* INIT definition -INIT -init_154592291369125000 -\* NEXT definition -NEXT -next_154592291369126000 -\* INVARIANT definition -INVARIANT -inv_154592291369127000 -\* Generated on Thu Dec 27 16:01:53 CET 2018 \ No newline at end of file diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545922927774/MC.tla b/TwoPhase.toolbox/Model_1_SnapShot_1545922927774/MC.tla deleted file mode 100644 index 64572bf..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545922927774/MC.tla +++ /dev/null @@ -1,33 +0,0 @@ ----- MODULE MC ---- -EXTENDS TwoPhase, TLC - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -r1, r2, r3 ----- - -\* MV CONSTANT definitions RM -const_154592291369123000 == -{r1, r2, r3} ----- - -\* SYMMETRY definition -symm_154592291369124000 == -Permutations(const_154592291369123000) ----- - -\* INIT definition @modelBehaviorInit:0 -init_154592291369125000 == -TPInit ----- -\* NEXT definition @modelBehaviorNext:0 -next_154592291369126000 == -TPNext ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_154592291369127000 == -TPTypeOK ----- -============================================================================= -\* Modification History -\* Created Thu Dec 27 16:01:53 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545922927774/TCommit.tla b/TwoPhase.toolbox/Model_1_SnapShot_1545922927774/TCommit.tla deleted file mode 100644 index 86364e1..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545922927774/TCommit.tla +++ /dev/null @@ -1,82 +0,0 @@ ------------------------------- MODULE TCommit ------------------------------ - -(***************************************************************************) -(* This specification is explained in "Transaction Commit", Lecture 5 of *) -(* the TLA+ Video Course. *) -(***************************************************************************) -CONSTANT RM \* The set of participating resource managers - -VARIABLE rmState \* rmState[rm] is the state of resource manager r. ------------------------------------------------------------------------------ -TCTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - -TCInit == rmState = [r \in RM |-> "working"] - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - -canCommit == \A r \in RM : rmState[r] \in {"prepared", "committed"} - (*************************************************************************) - (* True iff all RMs are in the "prepared" or "committed" state. *) - (*************************************************************************) - -notCommitted == \A r \in RM : rmState[r] # "committed" - (*************************************************************************) - (* True iff no resource manager has decided to commit. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the RMs, and then *) -(* define the complete next-state action of the specification to be the *) -(* disjunction of the possible RM actions. *) -(***************************************************************************) -Prepare(r) == /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - -Decide(r) == \/ /\ rmState[r] = "prepared" - /\ canCommit - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - \/ /\ rmState[r] \in {"working", "prepared"} - /\ notCommitted - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - -TCNext == \E r \in RM : Prepare(r) \/ Decide(r) - (*************************************************************************) - (* The next-state action. *) - (*************************************************************************) ------------------------------------------------------------------------------ -TCConsistent == - (*************************************************************************) - (* A state predicate asserting that two RMs have not arrived at *) - (* conflicting decisions. It is an invariant of the specification. *) - (*************************************************************************) - \A r1, r2 \in RM : ~ /\ rmState[r1] = "aborted" - /\ rmState[r2] = "committed" ------------------------------------------------------------------------------ -(***************************************************************************) -(* The following part of the spec is not discussed in Video Lecture 5. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) -TCSpec == TCInit /\ [][TCNext]_rmState - (*************************************************************************) - (* The complete specification of the protocol written as a temporal *) - (* formula. *) - (*************************************************************************) - -THEOREM TCSpec => [](TCTypeOK /\ TCConsistent) - (*************************************************************************) - (* This theorem asserts the truth of the temporal formula whose meaning *) - (* is that the state predicate TCTypeOK /\ TCInvariant is an invariant *) - (* of the specification TCSpec. Invariance of this conjunction is *) - (* equivalent to invariance of both of the formulas TCTypeOK and *) - (* TCConsistent. *) - (*************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 17:16:06 CET 2018 by veitheller -\* Created Fri Dec 21 17:15:44 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545922927774/TwoPhase.tla b/TwoPhase.toolbox/Model_1_SnapShot_1545922927774/TwoPhase.tla deleted file mode 100644 index 87617e6..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545922927774/TwoPhase.tla +++ /dev/null @@ -1,182 +0,0 @@ ------------------------------- MODULE TwoPhase ------------------------------ - -(***************************************************************************) -(* This specification is discussed in "Two-Phase Commit", Lecture 6 of the *) -(* TLA+ Video Course. It describes the Two-Phase Commit protocol, in *) -(* which a transaction manager (TM) coordinates the resource managers *) -(* (RMs) to implement the Transaction Commit specification of module *) -(* TCommit. In this specification, RMs spontaneously issue Prepared *) -(* messages. We ignore the Prepare messages that the TM can send to the *) -(* RMs. *) -(* *) -(* For simplicity, we also eliminate Abort messages sent by an RM when it *) -(* decides to abort. Such a message would cause the TM to abort the *) -(* transaction, an event represented here by the TM spontaneously deciding *) -(* to abort. *) -(***************************************************************************) -CONSTANT RM \* The set of resource managers - -VARIABLES - rmState, \* rmState[r] is the state of resource manager r. - tmState, \* The state of the transaction manager. - tmPrepared, \* The set of RMs from which the TM has received "Prepared" - \* messages. - msgs - (***********************************************************************) - (* In the protocol, processes communicate with one another by sending *) - (* messages. For simplicity, we represent message passing with the *) - (* variable msgs whose value is the set of all messages that have been *) - (* sent. A message is sent by adding it to the set msgs. An action *) - (* that, in an implementation, would be enabled by the receipt of a *) - (* certain message is here enabled by the presence of that message in *) - (* msgs. For simplicity, messages are never removed from msgs. This *) - (* allows a single message to be received by multiple receivers. *) - (* Receipt of the same message twice is therefore allowed; but in this *) - (* particular protocol, that's not a problem. *) - (***********************************************************************) - -Messages == - (*************************************************************************) - (* The set of all possible messages. Messages of type "Prepared" are *) - (* sent from the RM indicated by the message's rm field to the TM. *) - (* Messages of type "Commit" and "Abort" are broadcast by the TM, to be *) - (* received by all RMs. The set msgs contains just a single copy of *) - (* such a message. *) - (*************************************************************************) - [type : {"Prepared"}, rm : RM] \cup [type : {"Commit", "Abort"}] - -TPTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - /\ rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - /\ tmState \in {"init", "done"} - /\ tmPrepared \subseteq RM - /\ msgs \subseteq Messages - -TPInit == - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - /\ rmState = [r \in RM |-> "working"] - /\ tmState = "init" - /\ tmPrepared = {} - /\ msgs = {} ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the processes, first *) -(* the TM's actions, then the RMs' actions. *) -(***************************************************************************) -TMRcvPrepared(r) == - (*************************************************************************) - (* The TM receives a "Prepared" message from resource manager r. We *) - (* could add the additional enabling condition r \notin tmPrepared, *) - (* which disables the action if the TM has already received this *) - (* message. But there is no need, because in that case the action has *) - (* no effect; it leaves the state unchanged. *) - (*************************************************************************) - /\ tmState = "init" - /\ [type |-> "Prepared", rm |-> r] \in msgs - /\ tmPrepared' = tmPrepared \cup {r} - /\ UNCHANGED <> - -TMCommit == - (*************************************************************************) - (* The TM commits the transaction; enabled iff the TM is in its initial *) - (* state and every RM has sent a "Prepared" message. *) - (*************************************************************************) - /\ tmState = "init" - /\ tmPrepared = RM - /\ tmState' = "done" - /\ msgs' = msgs \cup {[type |-> "Commit"]} - /\ UNCHANGED <> - -TMAbort == - (*************************************************************************) - (* The TM spontaneously aborts the transaction. *) - (*************************************************************************) - /\ tmState = "init" - /\ tmState' = "done" - /\ msgs' = msgs \cup {[type |-> "Abort"]} - /\ UNCHANGED <> - -RMPrepare(r) == - (*************************************************************************) - (* Resource manager r prepares. *) - (*************************************************************************) - /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - /\ msgs' = msgs \cup {[type |-> "Prepared", rm |-> r]} - /\ UNCHANGED <> - -RMChooseToAbort(r) == - (*************************************************************************) - (* Resource manager r spontaneously decides to abort. As noted above, r *) - (* does not send any message in our simplified spec. *) - (*************************************************************************) - /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - /\ UNCHANGED <> - -RMRcvCommitMsg(r) == - (*************************************************************************) - (* Resource manager r is told by the TM to commit. *) - (*************************************************************************) - /\ [type |-> "Commit"] \in msgs - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - /\ UNCHANGED <> - -RMRcvAbortMsg(r) == - (*************************************************************************) - (* Resource manager r is told by the TM to abort. *) - (*************************************************************************) - /\ [type |-> "Abort"] \in msgs - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - /\ UNCHANGED <> - -TPNext == - \/ TMCommit \/ TMAbort - \/ \E r \in RM : - TMRcvPrepared(r) \/ RMPrepare(r) \/ RMChooseToAbort(r) - \/ RMRcvCommitMsg(r) \/ RMRcvAbortMsg(r) ------------------------------------------------------------------------------ -(***************************************************************************) -(* The material below this point is not discussed in Video Lecture 6. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) - -TPSpec == TPInit /\ [][TPNext]_<> - (*************************************************************************) - (* The complete spec of the Two-Phase Commit protocol. *) - (*************************************************************************) - -THEOREM TPSpec => []TPTypeOK - (*************************************************************************) - (* This theorem asserts that the type-correctness predicate TPTypeOK is *) - (* an invariant of the specification. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now assert that the Two-Phase Commit protocol implements the *) -(* Transaction Commit protocol of module TCommit. The following statement *) -(* imports all the definitions from module TCommit into the current *) -(* module. *) -(***************************************************************************) -INSTANCE TCommit - -THEOREM TPSpec => TCSpec - (*************************************************************************) - (* This theorem asserts that the specification TPSpec of the Two-Phase *) - (* Commit protocol implements the specification TCSpec of the *) - (* Transaction Commit protocol. *) - (*************************************************************************) -(***************************************************************************) -(* The two theorems in this module have been checked with TLC for six *) -(* RMs, a configuration with 50816 reachable states, in a little over a *) -(* minute on a 1 GHz PC. *) -(***************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Thu Dec 27 15:46:42 CET 2018 by veitheller -\* Created Thu Dec 27 15:46:21 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545923020132/MC.cfg b/TwoPhase.toolbox/Model_1_SnapShot_1545923020132/MC.cfg deleted file mode 100644 index b750119..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545923020132/MC.cfg +++ /dev/null @@ -1,21 +0,0 @@ -\* MV CONSTANT declarations -CONSTANTS -r1 = r1 -r2 = r2 -r3 = r3 -\* MV CONSTANT definitions -CONSTANT -RM <- const_154592300704034000 -\* SYMMETRY definition -SYMMETRY symm_154592300704035000 -\* INIT definition -INIT -init_154592300704036000 -\* NEXT definition -NEXT -next_154592300704037000 -\* INVARIANT definition -INVARIANT -inv_154592300704038000 -inv_154592300704039000 -\* Generated on Thu Dec 27 16:03:27 CET 2018 \ No newline at end of file diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545923020132/MC.tla b/TwoPhase.toolbox/Model_1_SnapShot_1545923020132/MC.tla deleted file mode 100644 index 150e7b1..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545923020132/MC.tla +++ /dev/null @@ -1,37 +0,0 @@ ----- MODULE MC ---- -EXTENDS TwoPhase, TLC - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -r1, r2, r3 ----- - -\* MV CONSTANT definitions RM -const_154592300704034000 == -{r1, r2, r3} ----- - -\* SYMMETRY definition -symm_154592300704035000 == -Permutations(const_154592300704034000) ----- - -\* INIT definition @modelBehaviorInit:0 -init_154592300704036000 == -TPInit ----- -\* NEXT definition @modelBehaviorNext:0 -next_154592300704037000 == -TPNext ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_154592300704038000 == -TPTypeOK ----- -\* INVARIANT definition @modelCorrectnessInvariants:1 -inv_154592300704039000 == -TCConsistent ----- -============================================================================= -\* Modification History -\* Created Thu Dec 27 16:03:27 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545923020132/TCommit.tla b/TwoPhase.toolbox/Model_1_SnapShot_1545923020132/TCommit.tla deleted file mode 100644 index 86364e1..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545923020132/TCommit.tla +++ /dev/null @@ -1,82 +0,0 @@ ------------------------------- MODULE TCommit ------------------------------ - -(***************************************************************************) -(* This specification is explained in "Transaction Commit", Lecture 5 of *) -(* the TLA+ Video Course. *) -(***************************************************************************) -CONSTANT RM \* The set of participating resource managers - -VARIABLE rmState \* rmState[rm] is the state of resource manager r. ------------------------------------------------------------------------------ -TCTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - -TCInit == rmState = [r \in RM |-> "working"] - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - -canCommit == \A r \in RM : rmState[r] \in {"prepared", "committed"} - (*************************************************************************) - (* True iff all RMs are in the "prepared" or "committed" state. *) - (*************************************************************************) - -notCommitted == \A r \in RM : rmState[r] # "committed" - (*************************************************************************) - (* True iff no resource manager has decided to commit. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the RMs, and then *) -(* define the complete next-state action of the specification to be the *) -(* disjunction of the possible RM actions. *) -(***************************************************************************) -Prepare(r) == /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - -Decide(r) == \/ /\ rmState[r] = "prepared" - /\ canCommit - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - \/ /\ rmState[r] \in {"working", "prepared"} - /\ notCommitted - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - -TCNext == \E r \in RM : Prepare(r) \/ Decide(r) - (*************************************************************************) - (* The next-state action. *) - (*************************************************************************) ------------------------------------------------------------------------------ -TCConsistent == - (*************************************************************************) - (* A state predicate asserting that two RMs have not arrived at *) - (* conflicting decisions. It is an invariant of the specification. *) - (*************************************************************************) - \A r1, r2 \in RM : ~ /\ rmState[r1] = "aborted" - /\ rmState[r2] = "committed" ------------------------------------------------------------------------------ -(***************************************************************************) -(* The following part of the spec is not discussed in Video Lecture 5. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) -TCSpec == TCInit /\ [][TCNext]_rmState - (*************************************************************************) - (* The complete specification of the protocol written as a temporal *) - (* formula. *) - (*************************************************************************) - -THEOREM TCSpec => [](TCTypeOK /\ TCConsistent) - (*************************************************************************) - (* This theorem asserts the truth of the temporal formula whose meaning *) - (* is that the state predicate TCTypeOK /\ TCInvariant is an invariant *) - (* of the specification TCSpec. Invariance of this conjunction is *) - (* equivalent to invariance of both of the formulas TCTypeOK and *) - (* TCConsistent. *) - (*************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 17:16:06 CET 2018 by veitheller -\* Created Fri Dec 21 17:15:44 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/Model_1_SnapShot_1545923020132/TwoPhase.tla b/TwoPhase.toolbox/Model_1_SnapShot_1545923020132/TwoPhase.tla deleted file mode 100644 index 87617e6..0000000 --- a/TwoPhase.toolbox/Model_1_SnapShot_1545923020132/TwoPhase.tla +++ /dev/null @@ -1,182 +0,0 @@ ------------------------------- MODULE TwoPhase ------------------------------ - -(***************************************************************************) -(* This specification is discussed in "Two-Phase Commit", Lecture 6 of the *) -(* TLA+ Video Course. It describes the Two-Phase Commit protocol, in *) -(* which a transaction manager (TM) coordinates the resource managers *) -(* (RMs) to implement the Transaction Commit specification of module *) -(* TCommit. In this specification, RMs spontaneously issue Prepared *) -(* messages. We ignore the Prepare messages that the TM can send to the *) -(* RMs. *) -(* *) -(* For simplicity, we also eliminate Abort messages sent by an RM when it *) -(* decides to abort. Such a message would cause the TM to abort the *) -(* transaction, an event represented here by the TM spontaneously deciding *) -(* to abort. *) -(***************************************************************************) -CONSTANT RM \* The set of resource managers - -VARIABLES - rmState, \* rmState[r] is the state of resource manager r. - tmState, \* The state of the transaction manager. - tmPrepared, \* The set of RMs from which the TM has received "Prepared" - \* messages. - msgs - (***********************************************************************) - (* In the protocol, processes communicate with one another by sending *) - (* messages. For simplicity, we represent message passing with the *) - (* variable msgs whose value is the set of all messages that have been *) - (* sent. A message is sent by adding it to the set msgs. An action *) - (* that, in an implementation, would be enabled by the receipt of a *) - (* certain message is here enabled by the presence of that message in *) - (* msgs. For simplicity, messages are never removed from msgs. This *) - (* allows a single message to be received by multiple receivers. *) - (* Receipt of the same message twice is therefore allowed; but in this *) - (* particular protocol, that's not a problem. *) - (***********************************************************************) - -Messages == - (*************************************************************************) - (* The set of all possible messages. Messages of type "Prepared" are *) - (* sent from the RM indicated by the message's rm field to the TM. *) - (* Messages of type "Commit" and "Abort" are broadcast by the TM, to be *) - (* received by all RMs. The set msgs contains just a single copy of *) - (* such a message. *) - (*************************************************************************) - [type : {"Prepared"}, rm : RM] \cup [type : {"Commit", "Abort"}] - -TPTypeOK == - (*************************************************************************) - (* The type-correctness invariant *) - (*************************************************************************) - /\ rmState \in [RM -> {"working", "prepared", "committed", "aborted"}] - /\ tmState \in {"init", "done"} - /\ tmPrepared \subseteq RM - /\ msgs \subseteq Messages - -TPInit == - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - /\ rmState = [r \in RM |-> "working"] - /\ tmState = "init" - /\ tmPrepared = {} - /\ msgs = {} ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now define the actions that may be performed by the processes, first *) -(* the TM's actions, then the RMs' actions. *) -(***************************************************************************) -TMRcvPrepared(r) == - (*************************************************************************) - (* The TM receives a "Prepared" message from resource manager r. We *) - (* could add the additional enabling condition r \notin tmPrepared, *) - (* which disables the action if the TM has already received this *) - (* message. But there is no need, because in that case the action has *) - (* no effect; it leaves the state unchanged. *) - (*************************************************************************) - /\ tmState = "init" - /\ [type |-> "Prepared", rm |-> r] \in msgs - /\ tmPrepared' = tmPrepared \cup {r} - /\ UNCHANGED <> - -TMCommit == - (*************************************************************************) - (* The TM commits the transaction; enabled iff the TM is in its initial *) - (* state and every RM has sent a "Prepared" message. *) - (*************************************************************************) - /\ tmState = "init" - /\ tmPrepared = RM - /\ tmState' = "done" - /\ msgs' = msgs \cup {[type |-> "Commit"]} - /\ UNCHANGED <> - -TMAbort == - (*************************************************************************) - (* The TM spontaneously aborts the transaction. *) - (*************************************************************************) - /\ tmState = "init" - /\ tmState' = "done" - /\ msgs' = msgs \cup {[type |-> "Abort"]} - /\ UNCHANGED <> - -RMPrepare(r) == - (*************************************************************************) - (* Resource manager r prepares. *) - (*************************************************************************) - /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "prepared"] - /\ msgs' = msgs \cup {[type |-> "Prepared", rm |-> r]} - /\ UNCHANGED <> - -RMChooseToAbort(r) == - (*************************************************************************) - (* Resource manager r spontaneously decides to abort. As noted above, r *) - (* does not send any message in our simplified spec. *) - (*************************************************************************) - /\ rmState[r] = "working" - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - /\ UNCHANGED <> - -RMRcvCommitMsg(r) == - (*************************************************************************) - (* Resource manager r is told by the TM to commit. *) - (*************************************************************************) - /\ [type |-> "Commit"] \in msgs - /\ rmState' = [rmState EXCEPT ![r] = "committed"] - /\ UNCHANGED <> - -RMRcvAbortMsg(r) == - (*************************************************************************) - (* Resource manager r is told by the TM to abort. *) - (*************************************************************************) - /\ [type |-> "Abort"] \in msgs - /\ rmState' = [rmState EXCEPT ![r] = "aborted"] - /\ UNCHANGED <> - -TPNext == - \/ TMCommit \/ TMAbort - \/ \E r \in RM : - TMRcvPrepared(r) \/ RMPrepare(r) \/ RMChooseToAbort(r) - \/ RMRcvCommitMsg(r) \/ RMRcvAbortMsg(r) ------------------------------------------------------------------------------ -(***************************************************************************) -(* The material below this point is not discussed in Video Lecture 6. It *) -(* will be explained in Video Lecture 8. *) -(***************************************************************************) - -TPSpec == TPInit /\ [][TPNext]_<> - (*************************************************************************) - (* The complete spec of the Two-Phase Commit protocol. *) - (*************************************************************************) - -THEOREM TPSpec => []TPTypeOK - (*************************************************************************) - (* This theorem asserts that the type-correctness predicate TPTypeOK is *) - (* an invariant of the specification. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now assert that the Two-Phase Commit protocol implements the *) -(* Transaction Commit protocol of module TCommit. The following statement *) -(* imports all the definitions from module TCommit into the current *) -(* module. *) -(***************************************************************************) -INSTANCE TCommit - -THEOREM TPSpec => TCSpec - (*************************************************************************) - (* This theorem asserts that the specification TPSpec of the Two-Phase *) - (* Commit protocol implements the specification TCSpec of the *) - (* Transaction Commit protocol. *) - (*************************************************************************) -(***************************************************************************) -(* The two theorems in this module have been checked with TLC for six *) -(* RMs, a configuration with 50816 reachable states, in a little over a *) -(* minute on a 1 GHz PC. *) -(***************************************************************************) - -============================================================================= -\* Modification History -\* Last modified Thu Dec 27 15:46:42 CET 2018 by veitheller -\* Created Thu Dec 27 15:46:21 CET 2018 by veitheller diff --git a/TwoPhase.toolbox/TwoPhase___Model_1.launch b/TwoPhase.toolbox/TwoPhase___Model_1.launch deleted file mode 100644 index 2e3e8c3..0000000 --- a/TwoPhase.toolbox/TwoPhase___Model_1.launch +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545922765832.launch b/TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545922765832.launch deleted file mode 100644 index 18d7099..0000000 --- a/TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545922765832.launch +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545922881813.launch b/TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545922881813.launch deleted file mode 100644 index 574af93..0000000 --- a/TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545922881813.launch +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545922927774.launch b/TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545922927774.launch deleted file mode 100644 index e70277a..0000000 --- a/TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545922927774.launch +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545923020132.launch b/TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545923020132.launch deleted file mode 100644 index f6cfe52..0000000 --- a/TwoPhase.toolbox/TwoPhase___Model_1_SnapShot_1545923020132.launch +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Untitled.toolbox/.project b/Untitled.toolbox/.project deleted file mode 100644 index b919234..0000000 --- a/Untitled.toolbox/.project +++ /dev/null @@ -1,24 +0,0 @@ - - - Untitled - - - - - - toolbox.builder.TLAParserBuilder - - - - - - toolbox.natures.TLANature - - - - SimpleProgram.tla - 1 - PARENT-1-PROJECT_LOC/SimpleProgram.tla - - - diff --git a/Untitled.toolbox/.settings/org.lamport.tla.toolbox.prefs b/Untitled.toolbox/.settings/org.lamport.tla.toolbox.prefs deleted file mode 100644 index 62403c1..0000000 --- a/Untitled.toolbox/.settings/org.lamport.tla.toolbox.prefs +++ /dev/null @@ -1,2 +0,0 @@ -ProjectRootFile=PARENT-1-PROJECT_LOC/SimpleProgram.tla -eclipse.preferences.version=1 diff --git a/Untitled.toolbox/Model_1/MC.cfg b/Untitled.toolbox/Model_1/MC.cfg deleted file mode 100644 index 903ef9b..0000000 --- a/Untitled.toolbox/Model_1/MC.cfg +++ /dev/null @@ -1,7 +0,0 @@ -\* INIT definition -INIT -init_15454038741536000 -\* NEXT definition -NEXT -next_15454038741537000 -\* Generated on Fri Dec 21 15:51:14 CET 2018 \ No newline at end of file diff --git a/Untitled.toolbox/Model_1/MC.tla b/Untitled.toolbox/Model_1/MC.tla deleted file mode 100644 index 32b1e70..0000000 --- a/Untitled.toolbox/Model_1/MC.tla +++ /dev/null @@ -1,14 +0,0 @@ ----- MODULE MC ---- -EXTENDS SimpleProgram, TLC - -\* INIT definition @modelBehaviorInit:0 -init_15454038741536000 == -Init ----- -\* NEXT definition @modelBehaviorNext:0 -next_15454038741537000 == -Next ----- -============================================================================= -\* Modification History -\* Created Fri Dec 21 15:51:14 CET 2018 by veitheller diff --git a/Untitled.toolbox/Model_1/SimpleProgram.tla b/Untitled.toolbox/Model_1/SimpleProgram.tla deleted file mode 100644 index b7db42b..0000000 --- a/Untitled.toolbox/Model_1/SimpleProgram.tla +++ /dev/null @@ -1,21 +0,0 @@ ---------------------------- MODULE SimpleProgram --------------------------- - -EXTENDS Integers -VARIABLES i, pc - -Init == (pc = "start") /\ (i = 0) - -Pick == /\ pc = "start" - /\ i' \in 0..1000 - /\ pc' = "middle" - -Add1 == /\ pc = "middle" - /\ i' = i + 1 - /\ pc' = "done" - -Next == Pick \/ Add1 - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 15:46:32 CET 2018 by veitheller -\* Created Fri Dec 21 15:45:07 CET 2018 by veitheller diff --git a/Untitled.toolbox/Model_1_SnapShot_1545403778936/MC.cfg b/Untitled.toolbox/Model_1_SnapShot_1545403778936/MC.cfg deleted file mode 100644 index 671d938..0000000 --- a/Untitled.toolbox/Model_1_SnapShot_1545403778936/MC.cfg +++ /dev/null @@ -1,7 +0,0 @@ -\* INIT definition -INIT -init_15454037685082000 -\* NEXT definition -NEXT -next_15454037685093000 -\* Generated on Fri Dec 21 15:49:28 CET 2018 \ No newline at end of file diff --git a/Untitled.toolbox/Model_1_SnapShot_1545403778936/MC.tla b/Untitled.toolbox/Model_1_SnapShot_1545403778936/MC.tla deleted file mode 100644 index 5305397..0000000 --- a/Untitled.toolbox/Model_1_SnapShot_1545403778936/MC.tla +++ /dev/null @@ -1,14 +0,0 @@ ----- MODULE MC ---- -EXTENDS SimpleProgram, TLC - -\* INIT definition @modelBehaviorInit:0 -init_15454037685082000 == -Init ----- -\* NEXT definition @modelBehaviorNext:0 -next_15454037685093000 == -Next ----- -============================================================================= -\* Modification History -\* Created Fri Dec 21 15:49:28 CET 2018 by veitheller diff --git a/Untitled.toolbox/Model_1_SnapShot_1545403778936/SimpleProgram.tla b/Untitled.toolbox/Model_1_SnapShot_1545403778936/SimpleProgram.tla deleted file mode 100644 index b7db42b..0000000 --- a/Untitled.toolbox/Model_1_SnapShot_1545403778936/SimpleProgram.tla +++ /dev/null @@ -1,21 +0,0 @@ ---------------------------- MODULE SimpleProgram --------------------------- - -EXTENDS Integers -VARIABLES i, pc - -Init == (pc = "start") /\ (i = 0) - -Pick == /\ pc = "start" - /\ i' \in 0..1000 - /\ pc' = "middle" - -Add1 == /\ pc = "middle" - /\ i' = i + 1 - /\ pc' = "done" - -Next == Pick \/ Add1 - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 15:46:32 CET 2018 by veitheller -\* Created Fri Dec 21 15:45:07 CET 2018 by veitheller diff --git a/Untitled.toolbox/Model_1_SnapShot_1545403888272/MC.cfg b/Untitled.toolbox/Model_1_SnapShot_1545403888272/MC.cfg deleted file mode 100644 index 903ef9b..0000000 --- a/Untitled.toolbox/Model_1_SnapShot_1545403888272/MC.cfg +++ /dev/null @@ -1,7 +0,0 @@ -\* INIT definition -INIT -init_15454038741536000 -\* NEXT definition -NEXT -next_15454038741537000 -\* Generated on Fri Dec 21 15:51:14 CET 2018 \ No newline at end of file diff --git a/Untitled.toolbox/Model_1_SnapShot_1545403888272/MC.tla b/Untitled.toolbox/Model_1_SnapShot_1545403888272/MC.tla deleted file mode 100644 index 32b1e70..0000000 --- a/Untitled.toolbox/Model_1_SnapShot_1545403888272/MC.tla +++ /dev/null @@ -1,14 +0,0 @@ ----- MODULE MC ---- -EXTENDS SimpleProgram, TLC - -\* INIT definition @modelBehaviorInit:0 -init_15454038741536000 == -Init ----- -\* NEXT definition @modelBehaviorNext:0 -next_15454038741537000 == -Next ----- -============================================================================= -\* Modification History -\* Created Fri Dec 21 15:51:14 CET 2018 by veitheller diff --git a/Untitled.toolbox/Model_1_SnapShot_1545403888272/SimpleProgram.tla b/Untitled.toolbox/Model_1_SnapShot_1545403888272/SimpleProgram.tla deleted file mode 100644 index b7db42b..0000000 --- a/Untitled.toolbox/Model_1_SnapShot_1545403888272/SimpleProgram.tla +++ /dev/null @@ -1,21 +0,0 @@ ---------------------------- MODULE SimpleProgram --------------------------- - -EXTENDS Integers -VARIABLES i, pc - -Init == (pc = "start") /\ (i = 0) - -Pick == /\ pc = "start" - /\ i' \in 0..1000 - /\ pc' = "middle" - -Add1 == /\ pc = "middle" - /\ i' = i + 1 - /\ pc' = "done" - -Next == Pick \/ Add1 - -============================================================================= -\* Modification History -\* Last modified Fri Dec 21 15:46:32 CET 2018 by veitheller -\* Created Fri Dec 21 15:45:07 CET 2018 by veitheller diff --git a/Untitled.toolbox/SimpleProgram.pdf b/Untitled.toolbox/SimpleProgram.pdf deleted file mode 100644 index 993e481c46f4c7250a391dbadaa2269a860584b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99659 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%0DhwpinIj+uAep{_b9Nx$Xw>{i=69x< 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 w3UPcrHD8pZW#&=uD1xtNREYncdS@3yCl?Q=f63 \implies % -% <: \ltcolon % -% :> \colongt % -% == \defeq % -% .. \dotdot % -% :: \coloncolon % -% =| \eqdash % -% ++ \pp % -% -- \mm % -% ** \stst % -% // \slsl % -% ^ \ct % -% \A \A % -% \E \E % -% \AA \AA % -% \EE \EE % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newlength{\symlength} -\newcommand{\implies}{\Rightarrow} -\newcommand{\ltcolon}{\mathrel{<\!\!\mbox{:}}} -\newcommand{\colongt}{\mathrel{\!\mbox{:}\!\!>}} -\newcommand{\defeq}{\;\mathrel{\smash %% keep this symbol from being too tall - {{\stackrel{\scriptscriptstyle\Delta}{=}}}}\;} -\newcommand{\dotdot}{\mathrel{\ldotp\ldotp}} -\newcommand{\coloncolon}{\mathrel{::\;}} -\newcommand{\eqdash}{\mathrel = \joinrel \hspace{-.28em}|} -\newcommand{\pp}{\mathbin{++}} -\newcommand{\mm}{\mathbin{--}} -\newcommand{\stst}{*\!*} -\newcommand{\slsl}{/\!/} -\newcommand{\ct}{\hat{\hspace{.4em}}} -\newcommand{\A}{\forall} -\newcommand{\E}{\exists} -\renewcommand{\AA}{\makebox{$\raisebox{.05em}{\makebox[0pt][l]{% - $\forall\hspace{-.517em}\forall\hspace{-.517em}\forall$}}% - \forall\hspace{-.517em}\forall \hspace{-.517em}\forall\,$}} -\newcommand{\EE}{\makebox{$\raisebox{.05em}{\makebox[0pt][l]{% - $\exists\hspace{-.517em}\exists\hspace{-.517em}\exists$}}% - \exists\hspace{-.517em}\exists\hspace{-.517em}\exists\,$}} -\newcommand{\whileop}{\.{\stackrel - {\mbox{\raisebox{-.3em}[0pt][0pt]{$\scriptscriptstyle+\;\,$}}}% - {-\hspace{-.16em}\triangleright}}} - -% Commands are defined to produce the upper-case keywords. -% Note that some have space after them. -\newcommand{\ASSUME}{\textsc{assume }} -\newcommand{\ASSUMPTION}{\textsc{assumption }} -\newcommand{\AXIOM}{\textsc{axiom }} -\newcommand{\BOOLEAN}{\textsc{boolean }} -\newcommand{\CASE}{\textsc{case }} -\newcommand{\CONSTANT}{\textsc{constant }} -\newcommand{\CONSTANTS}{\textsc{constants }} -\newcommand{\ELSE}{\settowidth{\symlength}{\THEN}% - \makebox[\symlength][l]{\textsc{ else}}} -\newcommand{\EXCEPT}{\textsc{ except }} -\newcommand{\EXTENDS}{\textsc{extends }} -\newcommand{\FALSE}{\textsc{false}} -\newcommand{\IF}{\textsc{if }} -\newcommand{\IN}{\settowidth{\symlength}{\LET}% - \makebox[\symlength][l]{\textsc{in}}} -\newcommand{\INSTANCE}{\textsc{instance }} -\newcommand{\LET}{\textsc{let }} -\newcommand{\LOCAL}{\textsc{local }} -\newcommand{\MODULE}{\textsc{module }} -\newcommand{\OTHER}{\textsc{other }} -\newcommand{\STRING}{\textsc{string}} -\newcommand{\THEN}{\textsc{ then }} -\newcommand{\THEOREM}{\textsc{theorem }} -\newcommand{\LEMMA}{\textsc{lemma }} -\newcommand{\PROPOSITION}{\textsc{proposition }} -\newcommand{\COROLLARY}{\textsc{corollary }} -\newcommand{\TRUE}{\textsc{true}} -\newcommand{\VARIABLE}{\textsc{variable }} -\newcommand{\VARIABLES}{\textsc{variables }} -\newcommand{\WITH}{\textsc{ with }} -\newcommand{\WF}{\textrm{WF}} -\newcommand{\SF}{\textrm{SF}} -\newcommand{\CHOOSE}{\textsc{choose }} -\newcommand{\ENABLED}{\textsc{enabled }} -\newcommand{\UNCHANGED}{\textsc{unchanged }} -\newcommand{\SUBSET}{\textsc{subset }} -\newcommand{\UNION}{\textsc{union }} -\newcommand{\DOMAIN}{\textsc{domain }} -% Added for tla2tex -\newcommand{\BY}{\textsc{by }} -\newcommand{\OBVIOUS}{\textsc{obvious }} -\newcommand{\HAVE}{\textsc{have }} -\newcommand{\QED}{\textsc{qed }} -\newcommand{\TAKE}{\textsc{take }} -\newcommand{\DEF}{\textsc{ def }} -\newcommand{\HIDE}{\textsc{hide }} -\newcommand{\RECURSIVE}{\textsc{recursive }} -\newcommand{\USE}{\textsc{use }} -\newcommand{\DEFINE}{\textsc{define }} -\newcommand{\PROOF}{\textsc{proof }} -\newcommand{\WITNESS}{\textsc{witness }} -\newcommand{\PICK}{\textsc{pick }} -\newcommand{\DEFS}{\textsc{defs }} -\newcommand{\PROVE}{\settowidth{\symlength}{\ASSUME}% - \makebox[\symlength][l]{\textsc{prove}}\@s{-4.1}}% - %% The \@s{-4.1) is a kludge added on 24 Oct 2009 [happy birthday, Ellen] - %% so the correct alignment occurs if the user types - %% ASSUME X - %% PROVE Y - %% because it cancels the extra 4.1 pts added because of the - %% extra space after the PROVE. This seems to works OK. - %% However, the 4.1 equals Parameters.LaTeXLeftSpace(1) and - %% should be changed if that method ever changes. -\newcommand{\SUFFICES}{\textsc{suffices }} -\newcommand{\NEW}{\textsc{new }} -\newcommand{\LAMBDA}{\textsc{lambda }} -\newcommand{\STATE}{\textsc{state }} -\newcommand{\ACTION}{\textsc{action }} -\newcommand{\TEMPORAL}{\textsc{temporal }} -\newcommand{\ONLY}{\textsc{only }} %% added by LL on 2 Oct 2009 -\newcommand{\OMITTED}{\textsc{omitted }} %% added by LL on 31 Oct 2009 -\newcommand{\@pfstepnum}[2]{\ensuremath{\langle#1\rangle}\textrm{#2}} -\newcommand{\bang}{\@s{1}\mbox{\small !}\@s{1}} -%% We should format || differently in PlusCal code than in TLA+ formulas. -\newcommand{\p@barbar}{\ifpcalsymbols - \,\,\rule[-.25em]{.075em}{1em}\hspace*{.2em}\rule[-.25em]{.075em}{1em}\,\,% - \else \,||\,\fi} -%% PlusCal keywords -\newcommand{\p@fair}{\textbf{fair }} -\newcommand{\p@semicolon}{\textbf{\,; }} -\newcommand{\p@algorithm}{\textbf{algorithm }} -\newcommand{\p@mmfair}{\textbf{-{}-fair }} -\newcommand{\p@mmalgorithm}{\textbf{-{}-algorithm }} -\newcommand{\p@assert}{\textbf{assert }} -\newcommand{\p@await}{\textbf{await }} -\newcommand{\p@begin}{\textbf{begin }} -\newcommand{\p@end}{\textbf{end }} -\newcommand{\p@call}{\textbf{call }} -\newcommand{\p@define}{\textbf{define }} -\newcommand{\p@do}{\textbf{ do }} -\newcommand{\p@either}{\textbf{either }} -\newcommand{\p@or}{\textbf{or }} -\newcommand{\p@goto}{\textbf{goto }} -\newcommand{\p@if}{\textbf{if }} -\newcommand{\p@then}{\,\,\textbf{then }} -\newcommand{\p@else}{\ifcsyntax \textbf{else } \else \,\,\textbf{else }\fi} -\newcommand{\p@elsif}{\,\,\textbf{elsif }} -\newcommand{\p@macro}{\textbf{macro }} -\newcommand{\p@print}{\textbf{print }} -\newcommand{\p@procedure}{\textbf{procedure }} -\newcommand{\p@process}{\textbf{process }} -\newcommand{\p@return}{\textbf{return}} -\newcommand{\p@skip}{\textbf{skip}} -\newcommand{\p@variable}{\textbf{variable }} -\newcommand{\p@variables}{\textbf{variables }} -\newcommand{\p@while}{\textbf{while }} -\newcommand{\p@when}{\textbf{when }} -\newcommand{\p@with}{\textbf{with }} -\newcommand{\p@lparen}{\textbf{(\,\,}} -\newcommand{\p@rparen}{\textbf{\,\,) }} -\newcommand{\p@lbrace}{\textbf{\{\,\,}} -\newcommand{\p@rbrace}{\textbf{\,\,\} }} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% REDEFINE STANDARD COMMANDS TO MAKE THEM FORMAT BETTER % -% % -% We redefine \in and \notin % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\renewcommand{\_}{\rule{.4em}{.06em}\hspace{.05em}} -\newlength{\equalswidth} -\let\oldin=\in -\let\oldnotin=\notin -\renewcommand{\in}{% - {\settowidth{\equalswidth}{$\.{=}$}\makebox[\equalswidth][c]{$\oldin$}}} -\renewcommand{\notin}{% - {\settowidth{\equalswidth}{$\.{=}$}\makebox[\equalswidth]{$\oldnotin$}}} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % -% HORIZONTAL BARS: % -% % -% \moduleLeftDash |~~~~~~~~~~ % -% \moduleRightDash ~~~~~~~~~~| % -% \midbar |----------| % -% \bottombar |__________| % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newlength{\charwidth}\settowidth{\charwidth}{{\small\tt M}} -\newlength{\boxrulewd}\setlength{\boxrulewd}{.4pt} -\newlength{\boxlineht}\setlength{\boxlineht}{.5\baselineskip} -\newcommand{\boxsep}{\charwidth} -\newlength{\boxruleht}\setlength{\boxruleht}{.5ex} -\newlength{\boxruledp}\setlength{\boxruledp}{-\boxruleht} -\addtolength{\boxruledp}{\boxrulewd} -\newcommand{\boxrule}{\leaders\hrule height \boxruleht depth \boxruledp - \hfill\mbox{}} -\newcommand{\@computerule}{% - \setlength{\boxruleht}{.5ex}% - \setlength{\boxruledp}{-\boxruleht}% - \addtolength{\boxruledp}{\boxrulewd}} - -\newcommand{\bottombar}{\hspace{-\boxsep}% - \raisebox{-\boxrulewd}[0pt][0pt]{\rule[.5ex]{\boxrulewd}{\boxlineht}}% - \boxrule - \raisebox{-\boxrulewd}[0pt][0pt]{% - \rule[.5ex]{\boxrulewd}{\boxlineht}}\hspace{-\boxsep}\vspace{0pt}} - -\newcommand{\moduleLeftDash}% - {\hspace*{-\boxsep}% - \raisebox{-\boxlineht}[0pt][0pt]{\rule[.5ex]{\boxrulewd - }{\boxlineht}}% - \boxrule\hspace*{.4em }} - -\newcommand{\moduleRightDash}% - {\hspace*{.4em}\boxrule - \raisebox{-\boxlineht}[0pt][0pt]{\rule[.5ex]{\boxrulewd - }{\boxlineht}}\hspace{-\boxsep}}%\vspace{.2em} - -\newcommand{\midbar}{\hspace{-\boxsep}\raisebox{-.5\boxlineht}[0pt][0pt]{% - \rule[.5ex]{\boxrulewd}{\boxlineht}}\boxrule\raisebox{-.5\boxlineht% - }[0pt][0pt]{\rule[.5ex]{\boxrulewd}{\boxlineht}}\hspace{-\boxsep}} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% FORMATING COMMANDS % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% PLUSCAL SHADING % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% The TeX pcalshading switch is set on to cause PlusCal shading to be -% performed. This changes the behavior of the following commands and -% environments to cause full-width shading to be performed on all lines. -% -% \tstrut \@x cpar mcom \@pvspace -% -% The TeX pcalsymbols switch is turned on when typesetting a PlusCal algorithm, -% whether or not shading is being performed. It causes symbols (other than -% parentheses and braces and PlusCal-only keywords) that should be typeset -% differently depending on whether they are in an algorithm to be typeset -% appropriately. Currently, the only such symbol is "||". -% -% The TeX csyntax switch is turned on when typesetting a PlusCal algorithm in -% c-syntax. This allows symbols to be format differently in the two syntaxes. -% The "else" keyword is the only one that is. - -\newif\ifpcalshading \pcalshadingfalse -\newif\ifpcalsymbols \pcalsymbolsfalse -\newif\ifcsyntax \csyntaxtrue - -% The \@pvspace command makes a vertical space. It uses \vspace -% except with \ifpcalshading, in which case it sets \pvcalvspace -% and the space is added by a following \@x command. -% -\newlength{\pcalvspace}\setlength{\pcalvspace}{0pt}% -\newcommand{\@pvspace}[1]{% - \ifpcalshading - \par\global\setlength{\pcalvspace}{#1}% - \else - \par\vspace{#1}% - \fi -} - -% The lcom environment was changed to set \lcomindent equal to -% the indentation it produces. This length is used by the -% cpar environment to make shading extend for the full width -% of the line. This assumes that lcom environments are not -% nested. I hope TLATeX does not nest them. -% -\newlength{\lcomindent}% -\setlength{\lcomindent}{0pt}% - -%\tstrut: A strut to produce inter-paragraph space in a comment. -%\rstrut: A strut to extend the bottom of a one-line comment so -% there's no break in the shading between comments on -% successive lines. -\newcommand\tstrut% - {\raisebox{\vshadelen}{\raisebox{-.25em}{\rule{0pt}{1.15em}}}% - \global\setlength{\vshadelen}{0pt}} -\newcommand\rstrut{\raisebox{-.25em}{\rule{0pt}{1.15em}}% - \global\setlength{\vshadelen}{0pt}} - - -% \.{op} formats operator op in math mode with empty boxes on either side. -% Used because TeX otherwise vary the amount of space it leaves around op. -\renewcommand{\.}[1]{\ensuremath{\mbox{}#1\mbox{}}} - -% \@s{n} produces an n-point space -\newcommand{\@s}[1]{\hspace{#1pt}} - -% \@x{txt} starts a specification line in the beginning with txt -% in the final LaTeX source. -\newlength{\@xlen} -\newcommand\xtstrut% - {\setlength{\@xlen}{1.05em}% - \addtolength{\@xlen}{\pcalvspace}% - \raisebox{\vshadelen}{\raisebox{-.25em}{\rule{0pt}{\@xlen}}}% - \global\setlength{\vshadelen}{0pt}% - \global\setlength{\pcalvspace}{0pt}} - -\newcommand{\@x}[1]{\par - \ifpcalshading - \makebox[0pt][l]{\shadebox{\xtstrut\hspace*{\textwidth}}}% - \fi - \mbox{$\mbox{}#1\mbox{}$}} - -% \@xx{txt} continues a specification line with the text txt. -\newcommand{\@xx}[1]{\mbox{$\mbox{}#1\mbox{}$}} - -% \@y{cmt} produces a one-line comment. -\newcommand{\@y}[1]{\mbox{\footnotesize\hspace{.65em}% - \ifthenelse{\boolean{shading}}{% - \shadebox{#1\hspace{-\the\lastskip}\rstrut}}% - {#1\hspace{-\the\lastskip}\rstrut}}} - -% \@z{cmt} produces a zero-width one-line comment. -\newcommand{\@z}[1]{\makebox[0pt][l]{\footnotesize - \ifthenelse{\boolean{shading}}{% - \shadebox{#1\hspace{-\the\lastskip}\rstrut}}% - {#1\hspace{-\the\lastskip}\rstrut}}} - - -% \@w{str} produces the TLA+ string "str". -\newcommand{\@w}[1]{\textsf{``{#1}''}} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SHADING % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\def\graymargin{1} - % The number of points of margin in the shaded box. - -% \definecolor{boxshade}{gray}{.85} -% Defines the darkness of the shading: 1 = white, 0 = black -% Added by TLATeX only if needed. - -% \shadebox{txt} puts txt in a shaded box. -\newlength{\templena} -\newlength{\templenb} -\newsavebox{\tempboxa} -\newcommand{\shadebox}[1]{{\setlength{\fboxsep}{\graymargin pt}% - \savebox{\tempboxa}{#1}% - \settoheight{\templena}{\usebox{\tempboxa}}% - \settodepth{\templenb}{\usebox{\tempboxa}}% - \hspace*{-\fboxsep}\raisebox{0pt}[\templena][\templenb]% - {\colorbox{boxshade}{\usebox{\tempboxa}}}\hspace*{-\fboxsep}}} - -% \vshade{n} makes an n-point inter-paragraph space, with -% shading if the `shading' flag is true. -\newlength{\vshadelen} -\setlength{\vshadelen}{0pt} -\newcommand{\vshade}[1]{\ifthenelse{\boolean{shading}}% - {\global\setlength{\vshadelen}{#1pt}}% - {\vspace{#1pt}}} - -\newlength{\boxwidth} -\newlength{\multicommentdepth} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE cpar ENVIRONMENT % -% ^^^^^^^^^^^^^^^^^^^^ % -% The LaTeX input % -% % -% \begin{cpar}{pop}{nest}{isLabel}{d}{e}{arg6} % -% XXXXXXXXXXXXXXX % -% XXXXXXXXXXXXXXX % -% XXXXXXXXXXXXXXX % -% \end{cpar} % -% % -% produces one of two possible results. If isLabel is the letter "T", % -% it produces the following, where [label] is the result of typesetting % -% arg6 in an LR box, and d is is a number representing a distance in % -% points. % -% % -% prevailing |<-- d -->[label]<- e ->XXXXXXXXXXXXXXX % -% left | XXXXXXXXXXXXXXX % -% margin | XXXXXXXXXXXXXXX % -% % -% If isLabel is the letter "F", then it produces % -% % -% prevailing |<-- d -->XXXXXXXXXXXXXXXXXXXXXXX % -% left | <- e ->XXXXXXXXXXXXXXXX % -% margin | XXXXXXXXXXXXXXXX % -% % -% where d and e are numbers representing distances in points. % -% % -% The prevailing left margin is the one in effect before the most recent % -% pop (argument 1) cpar environments with "T" as the nest argument, where % -% pop is a number \geq 0. % -% % -% If the nest argument is the letter "T", then the prevailing left % -% margin is moved to the left of the second (and following) lines of % -% X's. Otherwise, the prevailing left margin is left unchanged. % -% % -% An \unnest{n} command moves the prevailing left margin to where it was % -% before the most recent n cpar environments with "T" as the nesting % -% argument. % -% % -% The environment leaves no vertical space above or below it, or between % -% its paragraphs. (TLATeX inserts the proper amount of vertical space.) % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\newcounter{pardepth} -\setcounter{pardepth}{0} - -% \setgmargin{txt} defines \gmarginN to be txt, where N is \roman{pardepth}. -% \thegmargin equals \gmarginN, where N is \roman{pardepth}. -\newcommand{\setgmargin}[1]{% - \expandafter\xdef\csname gmargin\roman{pardepth}\endcsname{#1}} -\newcommand{\thegmargin}{\csname gmargin\roman{pardepth}\endcsname} -\newcommand{\gmargin}{0pt} - -\newsavebox{\tempsbox} - -\newlength{\@cparht} -\newlength{\@cpardp} -\newenvironment{cpar}[6]{% - \addtocounter{pardepth}{-#1}% - \ifthenelse{\boolean{shading}}{\par\begin{lrbox}{\tempsbox}% - \begin{minipage}[t]{\linewidth}}{}% - \begin{list}{}{% - \edef\temp{\thegmargin} - \ifthenelse{\equal{#3}{T}}% - {\settowidth{\leftmargin}{\hspace{\temp}\footnotesize #6\hspace{#5pt}}% - \addtolength{\leftmargin}{#4pt}}% - {\setlength{\leftmargin}{#4pt}% - \addtolength{\leftmargin}{#5pt}% - \addtolength{\leftmargin}{\temp}% - \setlength{\itemindent}{-#5pt}}% - \ifthenelse{\equal{#2}{T}}{\addtocounter{pardepth}{1}% - \setgmargin{\the\leftmargin}}{}% - \setlength{\labelwidth}{0pt}% - \setlength{\labelsep}{0pt}% - \setlength{\itemindent}{-\leftmargin}% - \setlength{\topsep}{0pt}% - \setlength{\parsep}{0pt}% - \setlength{\partopsep}{0pt}% - \setlength{\parskip}{0pt}% - \setlength{\itemsep}{0pt} - \setlength{\itemindent}{#4pt}% - \addtolength{\itemindent}{-\leftmargin}}% - \ifthenelse{\equal{#3}{T}}% - {\item[\tstrut\footnotesize \hspace{\temp}{#6}\hspace{#5pt}] - }% - {\item[\tstrut\hspace{\temp}]% - }% - \footnotesize} - {\hspace{-\the\lastskip}\tstrut - \end{list}% - \ifthenelse{\boolean{shading}}% - {\end{minipage}% - \end{lrbox}% - \ifpcalshading - \setlength{\@cparht}{\ht\tempsbox}% - \setlength{\@cpardp}{\dp\tempsbox}% - \addtolength{\@cparht}{.15em}% - \addtolength{\@cpardp}{.2em}% - \addtolength{\@cparht}{\@cpardp}% - % I don't know what's going on here. I want to add a - % \pcalvspace high shaded line, but I don't know how to - % do it. A little trial and error shows that the following - % does a reasonable job approximating that, eliminating - % the line if \pcalvspace is small. - \addtolength{\@cparht}{\pcalvspace}% - \ifdim \pcalvspace > .8em - \addtolength{\pcalvspace}{-.2em}% - \hspace*{-\lcomindent}% - \shadebox{\rule{0pt}{\pcalvspace}\hspace*{\textwidth}}\par - \global\setlength{\pcalvspace}{0pt}% - \fi - \hspace*{-\lcomindent}% - \makebox[0pt][l]{\raisebox{-\@cpardp}[0pt][0pt]{% - \shadebox{\rule{0pt}{\@cparht}\hspace*{\textwidth}}}}% - \hspace*{\lcomindent}\usebox{\tempsbox}% - \par - \else - \shadebox{\usebox{\tempsbox}}\par - \fi}% - {}% - } - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE ppar ENVIRONMENT % -% ^^^^^^^^^^^^^^^^^^^^ % -% The environment % -% % -% \begin{ppar} ... \end{ppar} % -% % -% is equivalent to % -% % -% \begin{cpar}{0}{F}{F}{0}{0}{} ... \end{cpar} % -% % -% The environment is put around each line of the output for a PlusCal % -% algorithm. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%\newenvironment{ppar}{% -% \ifthenelse{\boolean{shading}}{\par\begin{lrbox}{\tempsbox}% -% \begin{minipage}[t]{\linewidth}}{}% -% \begin{list}{}{% -% \edef\temp{\thegmargin} -% \setlength{\leftmargin}{0pt}% -% \addtolength{\leftmargin}{\temp}% -% \setlength{\itemindent}{0pt}% -% \setlength{\labelwidth}{0pt}% -% \setlength{\labelsep}{0pt}% -% \setlength{\itemindent}{-\leftmargin}% -% \setlength{\topsep}{0pt}% -% \setlength{\parsep}{0pt}% -% \setlength{\partopsep}{0pt}% -% \setlength{\parskip}{0pt}% -% \setlength{\itemsep}{0pt} -% \setlength{\itemindent}{0pt}% -% \addtolength{\itemindent}{-\leftmargin}}% -% \item[\tstrut\hspace{\temp}]}% -% {\hspace{-\the\lastskip}\tstrut -% \end{list}% -% \ifthenelse{\boolean{shading}}{\end{minipage} -% \end{lrbox}% -% \shadebox{\usebox{\tempsbox}}\par}{}% -% } - - %%% TESTING - \newcommand{\xtest}[1]{\par - \makebox[0pt][l]{\shadebox{\xtstrut\hspace*{\textwidth}}}% - \mbox{$\mbox{}#1\mbox{}$}} - -% \newcommand{\xxtest}[1]{\par -% \makebox[0pt][l]{\shadebox{\xtstrut{#1}\hspace*{\textwidth}}}% -% \mbox{$\mbox{}#1\mbox{}$}} - -%\newlength{\pcalvspace} -%\setlength{\pcalvspace}{0pt} -% \newlength{\xxtestlen} -% \setlength{\xxtestlen}{0pt} -% \newcommand\xtstrut% -% {\setlength{\xxtestlen}{1.15em}% -% \addtolength{\xxtestlen}{\pcalvspace}% -% \raisebox{\vshadelen}{\raisebox{-.25em}{\rule{0pt}{\xxtestlen}}}% -% \global\setlength{\vshadelen}{0pt}% -% \global\setlength{\pcalvspace}{0pt}} - - %%%% TESTING - - %% The xcpar environment - %% Note: overloaded use of \pcalvspace for testing. - %% -% \newlength{\xcparht}% -% \newlength{\xcpardp}% - -% \newenvironment{xcpar}[6]{% -% \addtocounter{pardepth}{-#1}% -% \ifthenelse{\boolean{shading}}{\par\begin{lrbox}{\tempsbox}% -% \begin{minipage}[t]{\linewidth}}{}% -% \begin{list}{}{% -% \edef\temp{\thegmargin}% -% \ifthenelse{\equal{#3}{T}}% -% {\settowidth{\leftmargin}{\hspace{\temp}\footnotesize #6\hspace{#5pt}}% -% \addtolength{\leftmargin}{#4pt}}% -% {\setlength{\leftmargin}{#4pt}% -% \addtolength{\leftmargin}{#5pt}% -% \addtolength{\leftmargin}{\temp}% -% \setlength{\itemindent}{-#5pt}}% -% \ifthenelse{\equal{#2}{T}}{\addtocounter{pardepth}{1}% -% \setgmargin{\the\leftmargin}}{}% -% \setlength{\labelwidth}{0pt}% -% \setlength{\labelsep}{0pt}% -% \setlength{\itemindent}{-\leftmargin}% -% \setlength{\topsep}{0pt}% -% \setlength{\parsep}{0pt}% -% \setlength{\partopsep}{0pt}% -% \setlength{\parskip}{0pt}% -% \setlength{\itemsep}{0pt}% -% \setlength{\itemindent}{#4pt}% -% \addtolength{\itemindent}{-\leftmargin}}% -% \ifthenelse{\equal{#3}{T}}% -% {\item[\xtstrut\footnotesize \hspace{\temp}{#6}\hspace{#5pt}]% -% }% -% {\item[\xtstrut\hspace{\temp}]% -% }% -% \footnotesize} -% {\hspace{-\the\lastskip}\tstrut -% \end{list}% -% \ifthenelse{\boolean{shading}}{\end{minipage} -% \end{lrbox}% -% \setlength{\xcparht}{\ht\tempsbox}% -% \setlength{\xcpardp}{\dp\tempsbox}% -% \addtolength{\xcparht}{.15em}% -% \addtolength{\xcpardp}{.2em}% -% \addtolength{\xcparht}{\xcpardp}% -% \hspace*{-\lcomindent}% -% \makebox[0pt][l]{\raisebox{-\xcpardp}[0pt][0pt]{% -% \shadebox{\rule{0pt}{\xcparht}\hspace*{\textwidth}}}}% -% \hspace*{\lcomindent}\usebox{\tempsbox}% -% \par}{}% -% } -% -% \newlength{\xmcomlen} -%\newenvironment{xmcom}[1]{% -% \setcounter{pardepth}{0}% -% \hspace{.65em}% -% \begin{lrbox}{\alignbox}\sloppypar% -% \setboolean{shading}{false}% -% \setlength{\boxwidth}{#1pt}% -% \addtolength{\boxwidth}{-.65em}% -% \begin{minipage}[t]{\boxwidth}\footnotesize -% \parskip=0pt\relax}% -% {\end{minipage}\end{lrbox}% -% \setlength{\xmcomlen}{\textwidth}% -% \addtolength{\xmcomlen}{-\wd\alignbox}% -% \settodepth{\alignwidth}{\usebox{\alignbox}}% -% \global\setlength{\multicommentdepth}{\alignwidth}% -% \setlength{\boxwidth}{\alignwidth}% -% \global\addtolength{\alignwidth}{-\maxdepth}% -% \addtolength{\boxwidth}{.1em}% -% \raisebox{0pt}[0pt][0pt]{% -% \ifthenelse{\boolean{shading}}% -% {\hspace*{-\xmcomlen}\shadebox{\rule[-\boxwidth]{0pt}{0pt}% -% \hspace*{\xmcomlen}\usebox{\alignbox}}}% -% {\usebox{\alignbox}}}% -% \vspace*{\alignwidth}\pagebreak[0]\vspace{-\alignwidth}\par} -% % a multi-line comment, whose first argument is its width in points. -% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE lcom ENVIRONMENT % -% ^^^^^^^^^^^^^^^^^^^^ % -% A multi-line comment with no text to its left is typeset in an lcom % -% environment, whose argument is a number representing the indentation % -% of the left margin, in points. All the text of the comment should be % -% inside cpar environments. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newenvironment{lcom}[1]{% - \setlength{\lcomindent}{#1pt} % Added for PlusCal handling. - \par\vspace{.2em}% - \sloppypar - \setcounter{pardepth}{0}% - \footnotesize - \begin{list}{}{% - \setlength{\leftmargin}{#1pt} - \setlength{\labelwidth}{0pt}% - \setlength{\labelsep}{0pt}% - \setlength{\itemindent}{0pt}% - \setlength{\topsep}{0pt}% - \setlength{\parsep}{0pt}% - \setlength{\partopsep}{0pt}% - \setlength{\parskip}{0pt}} - \item[]}% - {\end{list}\vspace{.3em}\setlength{\lcomindent}{0pt}% - } - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE mcom ENVIRONMENT AND \mutivspace COMMAND % -% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ % -% % -% A part of the spec containing a right-comment of the form % -% % -% xxxx (*************) % -% yyyy (* ccccccccc *) % -% ... (* ccccccccc *) % -% (* ccccccccc *) % -% (* ccccccccc *) % -% (*************) % -% % -% is typeset by % -% % -% XXXX \begin{mcom}{d} % -% CCCC ... CCC % -% \end{mcom} % -% YYYY ... % -% \multivspace{n} % -% % -% where the number d is the width in points of the comment, n is the % -% number of xxxx, yyyy, ... lines to the left of the comment. % -% All the text of the comment should be typeset in cpar environments. % -% % -% This puts the comment into a single box (so no page breaks can occur % -% within it). The entire box is shaded iff the shading flag is true. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newlength{\xmcomlen}% -\newenvironment{mcom}[1]{% - \setcounter{pardepth}{0}% - \hspace{.65em}% - \begin{lrbox}{\alignbox}\sloppypar% - \setboolean{shading}{false}% - \setlength{\boxwidth}{#1pt}% - \addtolength{\boxwidth}{-.65em}% - \begin{minipage}[t]{\boxwidth}\footnotesize - \parskip=0pt\relax}% - {\end{minipage}\end{lrbox}% - \setlength{\xmcomlen}{\textwidth}% % For PlusCal shading - \addtolength{\xmcomlen}{-\wd\alignbox}% % For PlusCal shading - \settodepth{\alignwidth}{\usebox{\alignbox}}% - \global\setlength{\multicommentdepth}{\alignwidth}% - \setlength{\boxwidth}{\alignwidth}% % For PlusCal shading - \global\addtolength{\alignwidth}{-\maxdepth}% - \addtolength{\boxwidth}{.1em}% % For PlusCal shading - \raisebox{0pt}[0pt][0pt]{% - \ifthenelse{\boolean{shading}}% - {\ifpcalshading - \hspace*{-\xmcomlen}% - \shadebox{\rule[-\boxwidth]{0pt}{0pt}\hspace*{\xmcomlen}% - \usebox{\alignbox}}% - \else - \shadebox{\usebox{\alignbox}} - \fi - }% - {\usebox{\alignbox}}}% - \vspace*{\alignwidth}\pagebreak[0]\vspace{-\alignwidth}\par} - % a multi-line comment, whose first argument is its width in points. - - -% \multispace{n} produces the vertical space indicated by "|"s in -% this situation -% -% xxxx (*************) -% xxxx (* ccccccccc *) -% | (* ccccccccc *) -% | (* ccccccccc *) -% | (* ccccccccc *) -% | (*************) -% -% where n is the number of "xxxx" lines. -\newcommand{\multivspace}[1]{\addtolength{\multicommentdepth}{-#1\baselineskip}% - \addtolength{\multicommentdepth}{1.2em}% - \ifthenelse{\lengthtest{\multicommentdepth > 0pt}}% - {\par\vspace{\multicommentdepth}\par}{}} - -%\newenvironment{hpar}[2]{% -% \begin{list}{}{\setlength{\leftmargin}{#1pt}% -% \addtolength{\leftmargin}{#2pt}% -% \setlength{\itemindent}{-#2pt}% -% \setlength{\topsep}{0pt}% -% \setlength{\parsep}{0pt}% -% \setlength{\partopsep}{0pt}% -% \setlength{\parskip}{0pt}% -% \addtolength{\labelsep}{0pt}}% -% \item[]\footnotesize}{\end{list}} -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % Typesets a sequence of paragraphs like this: % -% % % -% % left |<-- d1 --> XXXXXXXXXXXXXXXXXXXXXXXX % -% % margin | <- d2 -> XXXXXXXXXXXXXXX % -% % | XXXXXXXXXXXXXXX % -% % | % -% % | XXXXXXXXXXXXXXX % -% % | XXXXXXXXXXXXXXX % -% % % -% % where d1 = #1pt and d2 = #2pt, but with no vspace between % -% % paragraphs. % -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Commands for repeated characters that produce dashes. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \raisedDash{wd}{ht}{thk} makes a horizontal line wd characters wide, -% raised a distance ht ex's above the baseline, with a thickness of -% thk em's. -\newcommand{\raisedDash}[3]{\raisebox{#2ex}{\setlength{\alignwidth}{.5em}% - \rule{#1\alignwidth}{#3em}}} - -% The following commands take a single argument n and produce the -% output for n repeated characters, as follows -% \cdash: - -% \tdash: ~ -% \ceqdash: = -% \usdash: _ -\newcommand{\cdash}[1]{\raisedDash{#1}{.5}{.04}} -\newcommand{\usdash}[1]{\raisedDash{#1}{0}{.04}} -\newcommand{\ceqdash}[1]{\raisedDash{#1}{.5}{.08}} -\newcommand{\tdash}[1]{\raisedDash{#1}{1}{.08}} - -\newlength{\spacewidth} -\setlength{\spacewidth}{.2em} -\newcommand{\e}[1]{\hspace{#1\spacewidth}} -%% \e{i} produces space corresponding to i input spaces. - - -%% Alignment-file Commands - -\newlength{\alignboxwidth} -\newlength{\alignwidth} -\newsavebox{\alignbox} - -% \al{i}{j}{txt} is used in the alignment file to put "%{i}{j}{wd}" -% in the log file, where wd is the width of the line up to that point, -% and txt is the following text. -\newcommand{\al}[3]{% - \typeout{\%{#1}{#2}{\the\alignwidth}}% - \cl{#3}} - -%% \cl{txt} continues a specification line in the alignment file -%% with text txt. -\newcommand{\cl}[1]{% - \savebox{\alignbox}{\mbox{$\mbox{}#1\mbox{}$}}% - \settowidth{\alignboxwidth}{\usebox{\alignbox}}% - \addtolength{\alignwidth}{\alignboxwidth}% - \usebox{\alignbox}} - -% \fl{txt} in the alignment file begins a specification line that -% starts with the text txt. -\newcommand{\fl}[1]{% - \par - \savebox{\alignbox}{\mbox{$\mbox{}#1\mbox{}$}}% - \settowidth{\alignwidth}{\usebox{\alignbox}}% - \usebox{\alignbox}} - - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Ordinarily, TeX typesets letters in math mode in a special math italic % -% font. This makes it typeset "it" to look like the product of the % -% variables i and t, rather than like the word "it". The following % -% commands tell TeX to use an ordinary italic font instead. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\ifx\documentclass\undefined -\else - \DeclareSymbolFont{tlaitalics}{\encodingdefault}{cmr}{m}{it} - \let\itfam\symtlaitalics -\fi - -\makeatletter -\newcommand{\tlx@c}{\c@tlx@ctr\advance\c@tlx@ctr\@ne} -\newcounter{tlx@ctr} -\c@tlx@ctr=\itfam \multiply\c@tlx@ctr"100\relax \advance\c@tlx@ctr "7061\relax -\mathcode`a=\tlx@c \mathcode`b=\tlx@c \mathcode`c=\tlx@c \mathcode`d=\tlx@c -\mathcode`e=\tlx@c \mathcode`f=\tlx@c \mathcode`g=\tlx@c \mathcode`h=\tlx@c -\mathcode`i=\tlx@c \mathcode`j=\tlx@c \mathcode`k=\tlx@c \mathcode`l=\tlx@c -\mathcode`m=\tlx@c \mathcode`n=\tlx@c \mathcode`o=\tlx@c \mathcode`p=\tlx@c -\mathcode`q=\tlx@c \mathcode`r=\tlx@c \mathcode`s=\tlx@c \mathcode`t=\tlx@c -\mathcode`u=\tlx@c \mathcode`v=\tlx@c \mathcode`w=\tlx@c \mathcode`x=\tlx@c -\mathcode`y=\tlx@c \mathcode`z=\tlx@c -\c@tlx@ctr=\itfam \multiply\c@tlx@ctr"100\relax \advance\c@tlx@ctr "7041\relax -\mathcode`A=\tlx@c \mathcode`B=\tlx@c \mathcode`C=\tlx@c \mathcode`D=\tlx@c -\mathcode`E=\tlx@c \mathcode`F=\tlx@c \mathcode`G=\tlx@c \mathcode`H=\tlx@c -\mathcode`I=\tlx@c \mathcode`J=\tlx@c \mathcode`K=\tlx@c \mathcode`L=\tlx@c -\mathcode`M=\tlx@c \mathcode`N=\tlx@c \mathcode`O=\tlx@c \mathcode`P=\tlx@c -\mathcode`Q=\tlx@c \mathcode`R=\tlx@c \mathcode`S=\tlx@c \mathcode`T=\tlx@c -\mathcode`U=\tlx@c \mathcode`V=\tlx@c \mathcode`W=\tlx@c \mathcode`X=\tlx@c -\mathcode`Y=\tlx@c \mathcode`Z=\tlx@c -\makeatother - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE describe ENVIRONMENT % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% -% It is like the description environment except it takes an argument -% ARG that should be the text of the widest label. It adjusts the -% indentation so each item with label LABEL produces -%% LABEL blah blah blah -%% <- width of ARG ->blah blah blah -%% blah blah blah -\newenvironment{describe}[1]% - {\begin{list}{}{\settowidth{\labelwidth}{#1}% - \setlength{\labelsep}{.5em}% - \setlength{\leftmargin}{\labelwidth}% - \addtolength{\leftmargin}{\labelsep}% - \addtolength{\leftmargin}{\parindent}% - \def\makelabel##1{\rm ##1\hfill}}% - \setlength{\topsep}{0pt}}%% - % Sets \topsep to 0 to reduce vertical space above - % and below embedded displayed equations - {\end{list}} - -% For tlatex.TeX -\usepackage{verbatim} -\makeatletter -\def\tla{\let\%\relax% - \@bsphack - \typeout{\%{\the\linewidth}}% - \let\do\@makeother\dospecials\catcode`\^^M\active - \let\verbatim@startline\relax - \let\verbatim@addtoline\@gobble - \let\verbatim@processline\relax - \let\verbatim@finish\relax - \verbatim@} -\let\endtla=\@esphack - -\let\pcal=\tla -\let\endpcal=\endtla -\let\ppcal=\tla -\let\endppcal=\endtla - -% The tlatex environment is used by TLATeX.TeX to typeset TLA+. -% TLATeX.TLA starts its files by writing a \tlatex command. This -% command/environment sets \parindent to 0 and defines \% to its -% standard definition because the writing of the log files is messed up -% if \% is defined to be something else. It also executes -% \@computerule to determine the dimensions for the TLA horizonatl -% bars. -\newenvironment{tlatex}{\@computerule% - \setlength{\parindent}{0pt}% - \makeatletter\chardef\%=`\%}{} - - -% The notla environment produces no output. You can turn a -% tla environment to a notla environment to prevent tlatex.TeX from -% re-formatting the environment. - -\def\notla{\let\%\relax% - \@bsphack - \let\do\@makeother\dospecials\catcode`\^^M\active - \let\verbatim@startline\relax - \let\verbatim@addtoline\@gobble - \let\verbatim@processline\relax - \let\verbatim@finish\relax - \verbatim@} -\let\endnotla=\@esphack - -\let\nopcal=\notla -\let\endnopcal=\endnotla -\let\noppcal=\notla -\let\endnoppcal=\endnotla - -%%%%%%%%%%%%%%%%%%%%%%%% end of tlatex.sty file %%%%%%%%%%%%%%%%%%%%%%% -% last modified on Fri 3 August 2012 at 14:23:49 PST by lamport - -\begin{document} -\tlatex -\setboolean{shading}{true} -\@x{}\moduleLeftDash\@xx{ {\MODULE} SimpleProgram}\moduleRightDash\@xx{}% -\@pvspace{8.0pt}% -\@x{ {\EXTENDS} Integers}% -\@x{ {\VARIABLES} i ,\, pc}% -\@pvspace{8.0pt}% -\@x{ Init\@s{6.36} \.{\defeq} ( pc \.{=}\@w{start} ) \.{\land} ( i \.{=} 0 )}% -\@pvspace{8.0pt}% -\@x{ Pick\@s{3.05} \.{\defeq} \.{\land} pc \.{=}\@w{start}}% -\@x{\@s{42.06} \.{\land} i \.{'}\@s{2.87} \.{\in} 0 \.{\dotdot} 1000}% -\@x{\@s{42.06} \.{\land} pc \.{'} \.{=}\@w{middle}}% -\@pvspace{8.0pt}% -\@x{ Add1 \.{\defeq} \.{\land} pc \.{=}\@w{middle}}% -\@x{\@s{42.06} \.{\land} i \.{'}\@s{2.87} \.{=} i \.{+} 1}% -\@x{\@s{42.06} \.{\land} pc \.{'} \.{=}\@w{done}}% -\@pvspace{8.0pt}% -\@x{ Next\@s{2.23} \.{\defeq} Pick \.{\lor} Add1}% -\@pvspace{8.0pt}% -\@x{}\bottombar\@xx{}% -\setboolean{shading}{false} -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -\ensuremath{\.{\,\backslash\,}}* Modification History -\end{cpar}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - \ensuremath{\.{\,\backslash\,}}* Last modified \ensuremath{Fri} - \ensuremath{Dec} 21 15:46:32 \ensuremath{CET} 2018 by \ensuremath{veitheller -}% -\end{cpar}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - \ensuremath{\.{\,\backslash\,}}* Created \ensuremath{Fri} \ensuremath{Dec} 21 - 15:45:07 \ensuremath{CET} 2018 by \ensuremath{veitheller -}% -\end{cpar}% -\end{lcom}% -\end{document} diff --git a/Untitled.toolbox/Untitled___Model_1.launch b/Untitled.toolbox/Untitled___Model_1.launch deleted file mode 100644 index 4d582e0..0000000 --- a/Untitled.toolbox/Untitled___Model_1.launch +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Untitled.toolbox/Untitled___Model_1_SnapShot_1545403778936.launch b/Untitled.toolbox/Untitled___Model_1_SnapShot_1545403778936.launch deleted file mode 100644 index 90ea0d2..0000000 --- a/Untitled.toolbox/Untitled___Model_1_SnapShot_1545403778936.launch +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/Untitled.toolbox/Untitled___Model_1_SnapShot_1545403888272.launch b/Untitled.toolbox/Untitled___Model_1_SnapShot_1545403888272.launch deleted file mode 100644 index c742cc6..0000000 --- a/Untitled.toolbox/Untitled___Model_1_SnapShot_1545403888272.launch +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -