Skip to content

Commit dca6876

Browse files
adapting proofs to modified FS_Induction theorem (#190)
Signed-off-by: Stephan Merz <[email protected]>
1 parent 0e018bc commit dca6876

File tree

7 files changed

+29
-85
lines changed

7 files changed

+29
-85
lines changed

specifications/LoopInvariance/Quicksort.tla

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,12 @@ LEMMA NonemptyMin ==
104104
ASSUME NEW S \in SUBSET Int, IsFiniteSet(S), NEW x \in S
105105
PROVE /\ Min(S) \in S
106106
/\ Min(S) <= x
107-
<1>. DEFINE P(T) == T \in SUBSET Int =>
108-
/\ T # {} => Min(T) \in T
109-
/\ \A y \in T : Min(T) <= y
107+
<1>. DEFINE P(T) == /\ T # {} => Min(T) \in T
108+
/\ \A y \in T : Min(T) <= y
110109
<1>1. P({})
111110
OBVIOUS
112-
<1>2. ASSUME NEW T, NEW y, y \notin T, P(T)
111+
<1>2. ASSUME NEW T \in SUBSET S, IsFiniteSet(T), P(T), NEW y \in S \ T
113112
PROVE P(T \cup {y})
114-
<2>. HAVE T \cup {y} \in SUBSET Int
115113
<2>1. CASE T = {}
116114
<3>1. y = Min(T \cup {y})
117115
BY <2>1 DEF Min
@@ -135,7 +133,7 @@ LEMMA NonemptyMin ==
135133
<4>. QED BY <4>1, <4>2
136134
<3>. QED BY <3>1, <3>2
137135
<2>. QED BY <2>1, <2>2
138-
<1>3. \A T : IsFiniteSet(T) => P(T)
136+
<1>3. P(S)
139137
<2>. HIDE DEF P
140138
<2>. QED BY <1>1, <1>2, FS_Induction, IsaM("blast")
141139
<1>. QED BY <1>3
@@ -144,14 +142,12 @@ LEMMA NonemptyMax ==
144142
ASSUME NEW S \in SUBSET Int, IsFiniteSet(S), NEW x \in S
145143
PROVE /\ Max(S) \in S
146144
/\ x <= Max(S)
147-
<1>. DEFINE P(T) == T \in SUBSET Int =>
148-
/\ T # {} => Max(T) \in T
149-
/\ \A y \in T : y <= Max(T)
145+
<1>. DEFINE P(T) == /\ T # {} => Max(T) \in T
146+
/\ \A y \in T : y <= Max(T)
150147
<1>1. P({})
151148
OBVIOUS
152-
<1>2. ASSUME NEW T, NEW y, y \notin T, P(T)
149+
<1>2. ASSUME NEW T \in SUBSET S, IsFiniteSet(T), P(T), NEW y \in S \ T
153150
PROVE P(T \cup {y})
154-
<2>. HAVE T \cup {y} \in SUBSET Int
155151
<2>1. CASE T = {}
156152
<3>1. y = Max(T \cup {y})
157153
BY <2>1 DEF Max
@@ -175,7 +171,7 @@ LEMMA NonemptyMax ==
175171
<4>. QED BY <4>1, <4>2
176172
<3>. QED BY <3>1, <3>2
177173
<2>. QED BY <2>1, <2>2
178-
<1>3. \A T : IsFiniteSet(T) => P(T)
174+
<1>3. P(S)
179175
<2>. HIDE DEF P
180176
<2>. QED BY <1>1, <1>2, FS_Induction, IsaM("blast")
181177
<1>. QED BY <1>3
@@ -260,9 +256,9 @@ BY PermsOfLemma DEF Partitions
260256
(* Below is the TLA+ translation of the PlusCal code. *)
261257
(***************************************************************************)
262258
\* BEGIN TRANSLATION
263-
VARIABLES seq, seq0, U, pc
259+
VARIABLES pc, seq, seq0, U
264260

265-
vars == << seq, seq0, U, pc >>
261+
vars == << pc, seq, seq0, U >>
266262

267263
Init == (* Global variables *)
268264
/\ seq \in Seq(Values) \ {<< >>}

specifications/LoopInvariance/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
],
5757
"models": [],
5858
"proof": {
59-
"runtime": "00:00:45"
59+
"runtime": "00:05:00"
6060
}
6161
},
6262
{

specifications/byzpaxos/BPConProof.tla

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -673,16 +673,15 @@ MaxBallot(S) ==
673673
(* maximum of S when S is nonempty, we need the following fact. *)
674674
(***************************************************************************)
675675
LEMMA FiniteSetHasMax ==
676-
\A S \in SUBSET Int :
677-
IsFiniteSet(S) /\ (S # {}) => \E max \in S : \A x \in S : max >= x
678-
<1>. DEFINE P(S) == S \subseteq Int /\ S # {} =>
679-
\E max \in S : \A x \in S : max >= x
676+
ASSUME NEW S \in SUBSET Int, IsFiniteSet(S), S # {}
677+
PROVE \E max \in S : \A x \in S : max >= x
678+
<1>. DEFINE P(T) == T # {} => \E max \in T : \A x \in T : max >= x
680679
<1>1. P({})
681680
OBVIOUS
682-
<1>2. ASSUME NEW T, NEW x, P(T)
681+
<1>2. ASSUME NEW T \in SUBSET S, IsFiniteSet(T), P(T), NEW x \in S \ T
683682
PROVE P(T \cup {x})
684683
BY <1>2
685-
<1>3. \A S : IsFiniteSet(S) => P(S)
684+
<1>3. P(S)
686685
<2>. HIDE DEF P
687686
<2>. QED BY <1>1, <1>2, FS_Induction, IsaM("blast")
688687
<1>. QED BY <1>3, Zenon

specifications/byzpaxos/VoteProof.tla

Lines changed: 9 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,13 +1022,13 @@ ASSUME ValueNonempty == Value # {}
10221022
LEMMA FiniteSetHasMax ==
10231023
ASSUME NEW S \in SUBSET Int, IsFiniteSet(S), S # {}
10241024
PROVE \E max \in S : \A x \in S : max >= x
1025-
<1>. DEFINE P(T) == T \in SUBSET Int /\ T # {} => \E max \in T : \A x \in T : max >= x
1025+
<1>. DEFINE P(T) == T # {} => \E max \in T : \A x \in T : max >= x
10261026
<1>1. P({})
10271027
OBVIOUS
1028-
<1>2. ASSUME NEW T, NEW x, P(T), x \notin T
1028+
<1>2. ASSUME NEW T \in SUBSET S, P(T), NEW x \in S \ T
10291029
PROVE P(T \cup {x})
10301030
BY <1>2
1031-
<1>3. \A T : IsFiniteSet(T) => P(T)
1031+
<1>3. P(S)
10321032
<2>. HIDE DEF P
10331033
<2>. QED BY <1>1, <1>2, FS_Induction, IsaM("blast")
10341034
<1>. QED BY <1>3, Zenon
@@ -1150,50 +1150,6 @@ LiveSpec == Spec /\ LiveAssumption
11501150
(***************************************************************************)
11511151
-----------------------------------------------------------------------------
11521152
(***************************************************************************)
1153-
(* Here are two temporal-logic proof rules. Their validity is obvious *)
1154-
(* when you understand what they mean. *)
1155-
(***************************************************************************)
1156-
THEOREM AlwaysForall ==
1157-
ASSUME NEW CONSTANT S, NEW TEMPORAL P(_)
1158-
PROVE (\A s \in S : []P(s)) <=> [](\A s \in S : P(s))
1159-
OBVIOUS
1160-
1161-
LEMMA EventuallyAlwaysForall ==
1162-
ASSUME NEW CONSTANT S, IsFiniteSet(S),
1163-
NEW TEMPORAL P(_)
1164-
PROVE (\A s \in S : <>[]P(s)) => <>[](\A s \in S : P(s))
1165-
<1>. DEFINE A(x) == <>[]P(x)
1166-
L(T) == \A s \in T : A(s)
1167-
R(T) == \A s \in T : P(s)
1168-
Q(T) == L(T) => <>[]R(T)
1169-
<1>1. Q({})
1170-
<2>1. R({}) OBVIOUS
1171-
<2>2. <>[]R({}) BY <2>1, PTL
1172-
<2>. QED BY <2>2
1173-
<1>2. ASSUME NEW T, NEW x
1174-
PROVE Q(T) => Q(T \cup {x})
1175-
<2>1. L(T \cup {x}) => A(x)
1176-
<3>. HIDE DEF A
1177-
<3>. QED OBVIOUS
1178-
<2>2. L(T \cup {x}) /\ Q(T) => <>[]R(T)
1179-
OBVIOUS
1180-
<2>3. <>[]R(T) /\ A(x) => <>[](R(T) /\ P(x))
1181-
BY PTL
1182-
<2>4. R(T) /\ P(x) => R(T \cup {x})
1183-
OBVIOUS
1184-
<2>5. <>[](R(T) /\ P(x)) => <>[]R(T \cup {x})
1185-
BY <2>4, PTL
1186-
<2>. QED
1187-
BY <2>1, <2>2, <2>3, <2>5
1188-
<1>. HIDE DEF Q
1189-
<1>3. \A T : IsFiniteSet(T) => Q(T)
1190-
BY <1>1, <1>2, FS_Induction, IsaM("blast")
1191-
<1>4. Q(S)
1192-
BY <1>3
1193-
<1>. QED
1194-
BY <1>4 DEF Q
1195-
-----------------------------------------------------------------------------
1196-
(***************************************************************************)
11971153
(* Here is our proof that LiveSpec implements the specification LiveSpec *)
11981154
(* of module Consensus under our refinement mapping. *)
11991155
(***************************************************************************)
@@ -1257,7 +1213,6 @@ THEOREM Liveness == LiveSpec => C!LiveSpec
12571213
<>[](\A self \in Q : maxBal[self] = b)
12581214
<2>. DEFINE MB(s) == maxBal[s] = b
12591215
<2>0. (\A self \in Q : <>[]MB(self)) => <>[](\A self \in Q : MB(self))
1260-
\* BY <1>a, EventuallyAlwaysForall \* fails, even when hiding the definition of MB
12611216
<3>. HIDE DEF MB
12621217
<3>. DEFINE A(x) == <>[]MB(x)
12631218
L(T) == \A self \in T : A(self) \* NB: changing the names of the bound vars makes the QED step fail!
@@ -1281,11 +1236,9 @@ THEOREM Liveness == LiveSpec => C!LiveSpec
12811236
BY <4>4, PTL
12821237
<4>. QED BY <4>1, <4>2, <4>3, <4>5
12831238
<3>. HIDE DEF I
1284-
<3>3. \A T : IsFiniteSet(T) => I(T)
1285-
BY <3>1, <3>2, FS_Induction, IsaM("blast")
1286-
<3>4. I(Q)
1287-
BY <1>a, <3>3
1288-
<3>. QED BY <3>4 DEF I
1239+
<3>3. I(Q)
1240+
BY <1>a, <3>1, <3>2, FS_Induction, IsaM("blast")
1241+
<3>. QED BY <3>3 DEF I
12891242
<2>1. SUFFICES ASSUME NEW self \in Q
12901243
PROVE Spec /\ LiveAssumption!(Q, b) => <>[]MB(self)
12911244
BY <2>0, Isa
@@ -1481,7 +1434,6 @@ THEOREM Liveness == LiveSpec => C!LiveSpec
14811434
<3>4. QED
14821435
BY <3>2, <3>3, PTL
14831436
<2>4. (\A self \in Q : <>[]Voted(self)) => <>[](\A self \in Q : Voted(self))
1484-
\* again, we need to redo the proof instead of using lemma EventuallyAlwaysForall
14851437
<3>. DEFINE A(x) == <>[]Voted(x)
14861438
L(T) == \A self \in T : A(self)
14871439
R(T) == \A self \in T : Voted(self)
@@ -1504,11 +1456,9 @@ THEOREM Liveness == LiveSpec => C!LiveSpec
15041456
BY <4>4, PTL
15051457
<4>. QED BY <4>1, <4>2, <4>3, <4>5
15061458
<3>. HIDE DEF I
1507-
<3>3. \A T : IsFiniteSet(T) => I(T)
1508-
BY <3>1, <3>2, FS_Induction, IsaM("blast")
1509-
<3>4. I(Q)
1510-
BY <1>a, <3>3
1511-
<3>. QED BY <3>4 DEF I
1459+
<3>3. I(Q)
1460+
BY <1>a, <3>1, <3>2, FS_Induction, IsaM("blast")
1461+
<3>. QED BY <3>3 DEF I
15121462
<2>. QED
15131463
BY <2>1, VT2, <2>2, <2>3, <2>4, PTL
15141464

specifications/ewd998/EWD998_proof.tla

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,12 +159,11 @@ LEMMA SumZero ==
159159
PROVE Sum(fun, inds) = 0
160160
<1>1. IsFiniteSet(inds)
161161
BY NodeIsFinite, FS_Subset
162-
<1>. DEFINE P(T) == T \subseteq inds => Sum(fun, T) = 0
162+
<1>. DEFINE P(T) == Sum(fun, T) = 0
163163
<1>2. P({})
164164
BY SumEmpty
165-
<1>3. ASSUME NEW T, NEW x, IsFiniteSet(T), P(T), x \notin T
165+
<1>3. ASSUME NEW T \in SUBSET inds, IsFiniteSet(T), P(T), NEW x \in inds \ T
166166
PROVE P(T \cup {x})
167-
<2>. HAVE T \cup {x} \in SUBSET inds
168167
<2>1. Sum(fun, T \cup {x}) = fun[x] + Sum(fun, (T \cup {x}) \ {x})
169168
BY SumIterate
170169
<2>2. /\ fun[x] = 0

specifications/ewd998/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@
154154
"features": [],
155155
"models": [],
156156
"proof": {
157-
"runtime": "00:00:30"
157+
"runtime": "00:05:00"
158158
}
159159
},
160160
{

specifications/lamport_mutex/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"features": [],
1616
"models": [],
1717
"proof": {
18-
"runtime": "00:00:45"
18+
"runtime": "00:05:00"
1919
}
2020
},
2121
{

0 commit comments

Comments
 (0)