Skip to content

Add Vortex DSE specifications - #220

Open
vasilisnasopoulos wants to merge 1 commit into
tlaplus:masterfrom
vasilisnasopoulos:vortex-dse
Open

Add Vortex DSE specifications#220
vasilisnasopoulos wants to merge 1 commit into
tlaplus:masterfrom
vasilisnasopoulos:vortex-dse

Conversation

@vasilisnasopoulos

Copy link
Copy Markdown
Contributor

Adds specifications/VortexDSE/ — a deterministic slot-based admission
protocol with a separate per-slot agreement layer. A message carries its own
slot stamp and each node decides admission locally against its own clock;
there is no leader, quorum or vote.

Two admission modes, both specified because both are implemented.
Vortex_DSE_CSlot admits a late message into its own slot, so nothing is
dropped. Vortex_DSE_CSlot_TTL rejects it permanently, which bounds memory
behind the frontier. The difference is <= versus = in one conjunct.

Vortex_DSE_CSlot_AE (Freeze / Reconcile / Commit) is specified over the TTL
mode, not the default. Its NoReorderAcrossCslot invariant encodes the strict
gate, so it is not a refinement of the late-tolerant rule; extending it would
mean restating what "no reordering across slots" means, and I have not done
that here. The spec README says this rather than leaving it to be discovered.

Checked:

TLC models 6, all success, 0.6–3.3s
Vortex_DSE_CSlot_Proofs 194 obligations
Vortex_DSE_CSlot_ExactlyOnce_Proof 131 obligations
Vortex_DSE_CSlot_AE_Proofs 34 obligations

All three proof modules exit 0 under tlapm --strict and contain no OMITTED
steps. Model runtimes and state counts in manifest.json were measured with
check_small_models.py locally; check_manifest_schema, check_manifest_files,
check_manifest_features and check_markdown_table all pass.

Scope is deliberately limited: Vortex_DSE_CSlot_Skew states the bounded-skew
assumption structurally but does not model the mechanism that maintains it, and
Reconcile is a single atomic step rather than the multi-round protocol
underneath.

Two notes from preparing this, neither blocking:

  • generate_manifest.py rewrites every spec's manifest.json, not only the new
    one; it produced diffs in 14 unrelated manifests, which I reverted. Only
    specifications/VortexDSE/ and the README table are touched here.
  • check_proofs.py reads module['proof']['runtime'], but the schema requires
    maxRuntimeMinutes and sets additionalProperties: false. It raises
    KeyError: 'runtime' on any spec with a proof, including on a clean master.
    CI is unaffected because it invokes tlapm directly. Happy to open a separate
    issue or PR for it if useful.

Deterministic slot-based admission with a separate per-slot agreement
layer: a message carries its own slot stamp and each node decides
admission locally, with no leader, quorum or vote.

Two admission modes are specified because both are implemented: the
default admits a late message into its own slot, while the opt-in TTL
mode rejects it permanently to bound memory. Vortex_DSE_CSlot_AE is
specified over the TTL mode; the README says so rather than implying it
composes with the default.

Six TLC models, all completing in under four seconds. Three TLAPS
modules discharging 194, 131 and 34 obligations, all exit 0 under
tlapm --strict with no OMITTED steps.

Signed-off-by: vasilis nasopouloss <vasilisnasopouloss@MacBook-Air-vasilis.local>
/\ MaxSlot = 1

\* Conjunction of every safety invariant in the module.
AllInv ==

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn’t it better if Apalache reports the name of the invariant that’s been violated?

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