Conversation
|
Claude gave up on proving
Cursor Given the substantial time spent and 41 obligations still failing in my proof attempt, let me take a more pragmatic path. I'll revert Let me try one more focused approach to fix the recursive function definition issue. Given the persistent difficulty getting I've made substantial progress restructuring the proof but have hit a fundamental TLAPS limitation: Rather than burn more cycles, let me revert The file has been reverted to the original state. Here is an honest summary of where things stand. OutcomeI was not able to prove What I builtThe proof structure I developed proved most of the supporting machinery — what the theorem morally needs:
Where it brokeThe proof depends on a small iter[k \in Nat] == IF k = 0 THEN q0 ELSE ParentStep(iter[k-1])and then justify it via
The same proof shape works in Recommendation for finishing this offTwo reasonable next steps if you want to revisit:
I'm sorry I couldn't close it out within this session; the supporting lemmas above are sound and I can re-introduce them as a starting point whenever you'd like to take another pass. |
muenchnerkindl
left a comment
There was a problem hiding this comment.
This looks good to me! A few detailed comments in the different modules, but nothing serious.
6f89776 to
ef4ecd3
Compare
|
@muenchnerkindl I had Claude tyr really ard but it ultimately failed to prove refinement: 6f1ec2f |
|
I’m going to stop adding new commits for now until we figure out what to do with these results. |
c94e899 to
3cd58b0
Compare
|
@muenchnerkindl You approved and earlier version of this PR. I'll carry this over the finish line (squash commit, delete PROOF_DIFFICULTY, ...) if you also approve the most recent version. |
|
Certainly, please go ahead! Thanks. |
|
|
||
| IsIdentityOn(op(_,_), e, S) == | ||
| \A x \in S : op(e,x) = x | ||
|
|
There was a problem hiding this comment.
Note that the following lemmas can (essentially) be found in https://github.com/tlaplus/CommunityModules/blob/master/modules/FunctionTheorems.tla, except that the premises corresponding to the three operators are inlined. (I agree that it is useful to have names for these properties.)
Typo found by @muenchnerkindl as part of #211 (comment)
6ca13ac to
38dcb3f
Compare
15d356c to
8f94d8a
Compare
Each affected directory now has a `<Spec>_proof.tla` module that
mechanically checks the safety obligations of its TLA+ specification
(typically Spec => []TypeInvariant, plus any SafetyInvariant or
strengthened inductive invariant the spec defines).
Specifications covered:
- KeyValueStore
- MultiCarElevator/Elevator
- PaxosHowToWinATuringAward/Voting
- SpecifyingSystems chapters: AsynchronousInterface, FIFO,
HourClock, Composing, Liveness, RealTime, CachingMemory, TLC
- TwoPhase
- allocator (Simple, Scheduling, Implementation)
- byihive/VoucherLifeCycle
- ewd687a/EWD687a
- ewd998/EWD998PCal
- transaction_commit (TCommit, TwoPhase, PaxosCommit)
A few obligations remain OMITTED:
- Spec-specific: Inv2Next in Elevator_proof, Thm_TreeWithRoot
and Thm_DT2 in EWD687a_proof, Refinement in EWD998PCal_proof.
- Library-style: the multi-arg function-application unfolding
lemmas in Elevator_proof, PermSeqsType in the allocator
proofs, and MaximumProp in PaxosCommit_proof.
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Signed-off-by: Markus Alexander Kuppe <github.com@lemmster.de>
Add specifications/ewd687a/EWD687a_proof.tla. All 408 obligations discharged by tlapm in ~38s (macbook pro M1).
Fully proved:
THEOREM TypeCorrect == Spec => []TypeOK
THEOREM Thm_CountersConsistent == Spec => CountersConsistent
via the combined inductive invariant Inv1 == TypeOK /\ Counters,
where Counters relates the four per-edge counters:
sentUnacked[e] = rcvdUnacked[e] + acks[e] + msgs[e].
TypeOK alone is not inductive (RcvAck/SendAck decrement counters).
LEMMA Inv2Inductive == Spec => []Inv2
Inv2 is the structural overlay-tree strengthening of DT1Inv:
non-neutral non-leader processes are in the upEdge tree, and
upEdge[p] is a well-formed incoming edge of p with
rcvdUnacked[upEdge[p]] >= 1. Inductiveness proved per action.
Left OMITTED (future work):
LEMMA DT1FromInv2 == Inv2 => DT1Inv (chain/acyclicity)
THEOREM Thm_DT1Inv == Spec => []DT1Inv
THEOREM Thm_TreeWithRoot == Spec => TreeWithRoot (IsTreeWithRoot)
THEOREM Thm_DT2 == Spec => DT2 (liveness)
Wire the module into CI: add a "proof" entry in manifest.json (picked up by the data-driven Check proofs step in .github/workflows/CI.yml) and flip the TLAPS Proof column in README.md.