Skip to content

Commit 0a17093

Browse files
lemmyclaude
andcommitted
DP: name the backend that proves each slow step.
CI killed tlapm on DiningPhilosophers_proof.tla at its three-minute limit on macOS. The proof needed 2m55s to 2m58s there in earlier runs. tlapm tries SMT, then Zenon, then Isabelle, and CI runs it with --stretch 5. On 23 steps SMT failed, and on 12 of them Zenon failed too, each only after its stretched time limit of 25 or 50 seconds. Naming Zenon or Isa on these steps skips the attempts that fail. Locally, with --stretch 5, the proof now takes 29 seconds and no backend fails. The new limit of five minutes, the most that CI allows, leaves room for slow runners. https://github.com/tlaplus/Examples/actions/runs/40815991190 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Markus Alexander Kuppe <github.com@lemmster.de>
1 parent 338afd5 commit 0a17093

2 files changed

Lines changed: 24 additions & 24 deletions

File tree

‎specifications/DiningPhilosophers/DiningPhilosophers_proof.tla‎

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -116,18 +116,18 @@ LEMMA TakeAgree ==
116116
<2>2. philosophers[p] = {}
117117
BY <2>1, <1>1 DEF Phases, Idle, Hungry, Eating
118118
<2>. QED
119-
BY <1>1, <2>2 DEF TakeLeft, TakeLow
119+
BY <1>1, <2>2, Zenon DEF TakeLeft, TakeLow
120120
<1>2. CASE TakeLeft(p) /\ p % 2 = 0
121-
BY <1>2 DEF TakeLeft, TakeHigh
121+
BY <1>2, Zenon DEF TakeLeft, TakeHigh
122122
<1>3. CASE TakeRight(p) /\ p % 2 = 1
123-
BY <1>3 DEF TakeRight, TakeHigh
123+
BY <1>3, Isa DEF TakeRight, TakeHigh
124124
<1>4. CASE TakeRight(p) /\ p % 2 = 0
125125
<2>1. RightFork(p) \in P /\ RightFork(p) \notin philosophers[p]
126126
BY <1>4, ForksDistinct DEF TakeRight, OnTable
127127
<2>2. philosophers[p] = {}
128128
BY <2>1, <1>4 DEF Phases, Idle, Hungry, Eating
129129
<2>. QED
130-
BY <1>4, <2>2 DEF TakeRight, TakeLow
130+
BY <1>4, <2>2, Zenon DEF TakeRight, TakeLow
131131
<1>. QED
132132
BY <1>1, <1>2, <1>3, <1>4, Parity
133133

@@ -222,7 +222,7 @@ THEOREM OnTableNext == Inv /\ [Next]_vars => OnTable'
222222
<1>3. ASSUME NEW p \in P, Release(p)
223223
PROVE g \in forks' <=> \A r \in P : g \notin philosophers'[r]
224224
<2>1. CASE g \in {LowFork(p), HighFork(p)}
225-
BY <1>3, <2>1, ReleaseFrame DEF Exclusive
225+
BY <1>3, <2>1, ReleaseFrame, Zenon DEF Exclusive
226226
<2>2. CASE g \notin {LowFork(p), HighFork(p)}
227227
<3>1. \A r \in P : g \in philosophers'[r] <=> g \in philosophers[r]
228228
BY <1>3, <2>2, ReleaseFrame
@@ -285,10 +285,10 @@ BY InvInit, InvNext, PTL DEF Spec
285285
Act(p) == TakeLeft(p) \/ TakeRight(p) \/ Release(p)
286286

287287
LEMMA SpecNext == Spec => [][Next]_vars
288-
BY DEF Spec
288+
BY Isa DEF Spec
289289

290290
LEMMA SpecFair == \A q \in P : Spec => SF_vars(Act(q))
291-
BY DEF Spec, Act
291+
BY Isa DEF Spec, Act
292292

293293
\* A step either is a step of q or leaves q's forks alone.
294294
LEMMA NextSplit ==
@@ -340,19 +340,19 @@ LEMMA IdleEnabled ==
340340
forks \ {LeftFork(q)}>> # <<philosophers, forks>>
341341
BY <1>1
342342
<2>3. ENABLED <<TakeLeft(q)>>_vars
343-
BY <1>1, <1>2, <2>1, <2>2, ExpandENABLED DEF TakeLeft, vars
343+
BY <1>1, <1>2, <2>1, <2>2, ExpandENABLED, Isa DEF TakeLeft, vars
344344
<2>. QED
345-
BY <2>3, ExpandENABLED DEF Act, TakeLeft, TakeRight, Release, vars
345+
BY <2>3, ExpandENABLED, Zenon DEF Act, TakeLeft, TakeRight, Release, vars
346346
<1>3. CASE q % 2 = 0
347347
<2>1. RightFork(q) \in forks
348348
BY <1>3 DEF LowFork
349349
<2>2. <<[philosophers EXCEPT ![q] = philosophers[q] \cup {RightFork(q)}],
350350
forks \ {RightFork(q)}>> # <<philosophers, forks>>
351351
BY <1>1
352352
<2>3. ENABLED <<TakeRight(q)>>_vars
353-
BY <1>1, <1>3, <2>1, <2>2, ExpandENABLED DEF TakeRight, vars
353+
BY <1>1, <1>3, <2>1, <2>2, ExpandENABLED, Isa DEF TakeRight, vars
354354
<2>. QED
355-
BY <2>3, ExpandENABLED DEF Act, TakeLeft, TakeRight, Release, vars
355+
BY <2>3, ExpandENABLED, Zenon DEF Act, TakeLeft, TakeRight, Release, vars
356356
<1>. QED
357357
BY <1>2, <1>3, Parity
358358

@@ -375,9 +375,9 @@ LEMMA HungryEnabled ==
375375
<2>3. (q % 2 = 1 => philosophers[q] = {LeftFork(q)}) /\ RightFork(q) \in forks
376376
BY <2>1
377377
<2>4. ENABLED <<TakeRight(q)>>_vars
378-
BY <2>2, <2>3, ExpandENABLED DEF TakeRight, vars
378+
BY <2>2, <2>3, ExpandENABLED, Isa DEF TakeRight, vars
379379
<2>. QED
380-
BY <2>4, ExpandENABLED DEF Act, TakeLeft, TakeRight, Release, vars
380+
BY <2>4, ExpandENABLED, Zenon DEF Act, TakeLeft, TakeRight, Release, vars
381381
<1>4. CASE q % 2 = 0
382382
<2>1. philosophers[q] = {RightFork(q)} /\ LeftFork(q) \in forks
383383
BY <1>1, <1>4 DEF LowFork, HighFork
@@ -387,9 +387,9 @@ LEMMA HungryEnabled ==
387387
<2>3. (q % 2 = 0 => philosophers[q] = {RightFork(q)}) /\ LeftFork(q) \in forks
388388
BY <2>1
389389
<2>4. ENABLED <<TakeLeft(q)>>_vars
390-
BY <2>2, <2>3, ExpandENABLED DEF TakeLeft, vars
390+
BY <2>2, <2>3, ExpandENABLED, Isa DEF TakeLeft, vars
391391
<2>. QED
392-
BY <2>4, ExpandENABLED DEF Act, TakeLeft, TakeRight, Release, vars
392+
BY <2>4, ExpandENABLED, Zenon DEF Act, TakeLeft, TakeRight, Release, vars
393393
<1>. QED
394394
BY <1>3, <1>4, Parity
395395

@@ -408,9 +408,9 @@ LEMMA EatingEnabled ==
408408
# <<philosophers, forks>>
409409
BY <1>1, <1>2
410410
<1>4. ENABLED <<Release(q)>>_vars
411-
BY <1>1, <1>3, ExpandENABLED DEF Release, vars
411+
BY <1>1, <1>3, ExpandENABLED, Isa DEF Release, vars
412412
<1>. QED
413-
BY <1>4, ExpandENABLED DEF Act, TakeLeft, TakeRight, Release, vars
413+
BY <1>4, ExpandENABLED, Zenon DEF Act, TakeLeft, TakeRight, Release, vars
414414

415415
-----------------------------------------------------------------------------
416416
(***************************************************************************)
@@ -445,7 +445,7 @@ LEMMA IdleHungry ==
445445
<1>3. Inv /\ Idle(q) /\ LowFork(q) \in forks => ENABLED <<Act(q)>>_vars
446446
BY IdleEnabled
447447
<1>4. Spec => SF_vars(Act(q))
448-
BY SpecFair
448+
BY SpecFair, Isa
449449
<1>. QED
450450
BY <1>1, <1>2, <1>3, <1>4, InvSpec, SpecNext, PTL DEF FreeIO, IdleToHungry
451451

@@ -466,7 +466,7 @@ LEMMA HungryEat ==
466466
<1>3. Inv /\ Hungry(q) /\ HighFork(q) \in forks => ENABLED <<Act(q)>>_vars
467467
BY HungryEnabled
468468
<1>4. Spec => SF_vars(Act(q))
469-
BY SpecFair
469+
BY SpecFair, Isa
470470
<1>. QED
471471
BY <1>1, <1>2, <1>3, <1>4, InvSpec, SpecNext, PTL DEF FreeIO, HungryToEating
472472

@@ -488,7 +488,7 @@ LEMMA EatRelease ==
488488
<1>3. Inv /\ HeldEat(f, q) => ENABLED <<Act(q)>>_vars
489489
BY EatingEnabled DEF HeldEat
490490
<1>4. Spec => SF_vars(Act(q))
491-
BY SpecFair
491+
BY SpecFair, Isa
492492
<1>. QED
493493
BY <1>1, <1>2, <1>3, <1>4, InvSpec, SpecNext, PTL DEF EatingFrees
494494

@@ -595,7 +595,7 @@ THEOREM AllFree == \A f \in P : Spec => FreeIO(f)
595595
BY <2>1
596596
<1>. HIDE DEF Q
597597
<1>3. \A m \in Nat : Q(m)
598-
BY <1>1, <1>2, NatInduction
598+
BY <1>1, <1>2, NatInduction, Isa
599599
<1>4. Q(3)
600600
BY <1>3
601601
<1>. QED
@@ -616,7 +616,7 @@ LEMMA EatingIsEating == \A p \in P : Eating(p) => IsEating(p)
616616
<1>3. Cardinality({LowFork(p)} \cup {HighFork(p)}) = 2
617617
BY <1>1, <1>2, FS_AddElement
618618
<1>. QED
619-
BY <1>3 DEF Eating, IsEating
619+
BY <1>3, Zenon DEF Eating, IsEating
620620

621621
THEOREM StarvationFreedom
622622
<1>. SUFFICES ASSUME NEW p \in P PROVE Spec => []<>IsEating(p)
@@ -666,7 +666,7 @@ BY StarvationFreedom, StarvationImpliesNoLivelock
666666
LEMMA ActEnabledNext ==
667667
ASSUME NEW q \in P
668668
PROVE (ENABLED <<Act(q)>>_vars) => ENABLED Next
669-
BY ExpandENABLED DEF Act, Next, TakeLeft, TakeRight, Release, vars
669+
BY ExpandENABLED, Zenon DEF Act, Next, TakeLeft, TakeRight, Release, vars
670670

671671
LEMMA EvenFree ==
672672
ASSUME Inv, \A q \in P : ~Eating(q), NEW f \in P, Rank(f) = 2

‎specifications/DiningPhilosophers/manifest.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
"features": [],
8686
"models": [],
8787
"proof": {
88-
"maxRuntimeMinutes": 3
88+
"maxRuntimeMinutes": 5
8989
}
9090
}
9191
]

0 commit comments

Comments
 (0)