Repository navigation
Conversation
The refinement examples in this repository are too large to show what a refinement mapping is in a few minutes. Hillel Wayne's two-thread counter from his blog post fits on a page. TLC finds the lost update when bad.tla splits the increment into a read and a write, and verifies that good.tla, which adds a lock, refines both abstract.tla and bad.tla. good_proof.tla proves both refinements with TLAPS. https://www.hillelwayne.com/post/refinement/ Co-authored-by: Hillel Wayne <2660212+hwayne@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Markus Alexander Kuppe <github.com@lemmster.de>
Member
Author
|
dupe of #248 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The refinement examples in this repository are too large to show what a refinement mapping is in a few minutes. @hwayne's two-thread counter from his blog post Specification Refinement fits on a page, and he agreed to add it here.
abstract.tla: two threads each increment a shared counter in one atomic step.bad.tla: splits the increment into a read and a write. TLC finds the lost update, where both threads read 0 and both write 1, as a violation ofRefinement.good.tla: adds a lock. TLC verifies that it refines bothabstract.tlaandbad.tla.good_proof.tla: proves both refinements with TLAPS (19 obligations).Co-authored-by: Hillel Wayne 2660212+hwayne@users.noreply.github.com