Skip to content

Add StaleViewShrink: safe contraction (mutual inclusion) on stale views - #243

Open
topeuph-ai wants to merge 1 commit into
tlaplus:masterfrom
topeuph-ai:add-stale-view-shrink
Open

topeuph-ai wants to merge 1 commit into
tlaplus:masterfrom
topeuph-ai:add-stale-view-shrink

Conversation

@topeuph-ai

Copy link
Copy Markdown

Adds specifications/StaleViewShrink: a coordinator-free "leave only if R remain" protocol (l-mutual inclusion, the mirror of k-exclusion) in which each node acts on a view of the world up to L ticks old. It compares a lowest-ID tie-break with a "patient lowest" rule.

model result
StaleShrink.cfg no error (Safety and Progress)
StaleShrinkV6Wait2x.cfg no error
StaleShrinkV3Cascade.cfg Safety violated: TLC finds a staggered cascade that breaks the tie-break
StaleShrinkV6TooShort.cfg Safety violated: control, with the wait shorter than the staleness

Why it may be instructive: an atomic-read model of the same protocol passes the broken rule, and even a bare re-check with no tie-break. Modelling staleness explicitly is what exposes the cascade.

All models run in under 30 s (1–23 s single-worker). Checked locally with check_manifest_schema.py, check_manifest_files.py, check_markdown_table.py and check_small_models.py (TLC 2.19). manifest.json was written by hand: generate_manifest.py would not run on Windows (tree_sitter Language() overflow). Licence: Apache-2.0, as in the source repository (https://github.com/ValiChord/polite-shrink), which also has a Python checker that agrees with every verdict here and a Rust implementation.

Written by Ceri John with AI assistance (Claude, Anthropic).

🤖 Generated with Claude Code

N nodes share a resource and any may leave, but at least R must remain,
with no coordinator and each node acting on a view up to L ticks old.
Compares a lowest-ID tie-break with a "patient lowest" rule. Four models:
two pass (Safety and Progress), one fails instructively (TLC finds a
staggered cascade that breaks the tie-break), and one control fails
because the wait is shorter than the staleness. An atomic-read model of
the same protocol passes the broken rule; modelling staleness exposes it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants