Vortex DSE public verification bundle
This repository is the reviewer-facing entry point for the public Vortex DSE formal artifacts. It packages the default late-tolerant admission model and its TLAPS proofs.
If you want the strongest safety story, start here. This repo proves the core admission properties of the default model, while the other public repos cover the strict variant and the per-slot agreement layer.
| Repository | Role | What it proves / checks |
|---|---|---|
| vortex-dse-cslot-proofs ← you are here | Late-tolerant C-slot admission; deductive safety proofs | TLAPS: []TypeInvariant, []NoFutureAdmission, []StrictExactlyOnce |
| vortex-dse-cslot-spec | Strict C-slot admission, clock skew, Byzantine timestamp/origin spoofing, executable reference | TLC bounded checks; JavaScript reference scenarios |
| vortex-merkle-agreement | Per-slot input-set agreement: Freeze → Reconcile → Commit | TLC + Apalache bounded checks under declared assumptions |
- This repo is the default admission model.
- It is late-tolerant:
m.cslot ≤ current_slot. - It is verified with TLAPS, not just bounded model checking.
- It now includes an exactly-once proof for per-node admission.
- The strict same-slot variant lives in the spec repo.
- The agreement layer lives in the Merkle repo.
Machine-checked TLAPS proofs for the Vortex DSE deterministic late-tolerant C-slot admission model. The proven theorems are:
Spec => []TypeInvariantSpec => []NoFutureAdmissionSpec => []StrictExactlyOnce
This repository now also includes a machine-checked TLAPS proof of strict exactly-once admission per node.
Formal statement:
Spec => []StrictExactlyOnceIn plain language: if a node has already admitted a message id, it cannot admit that same id again later.
This remains true even under:
- crash/rejoin,
- adversarial replay,
- duplicate injection,
- arbitrary network reordering,
- unbounded delivery delay.
For reviewers who want a plain-English walkthrough, see:
specs/EXACTLY_ONCE_EXPLAINED.md
Current verification status is tracked by the live workflow badges above (main branch).
- Not the strict same-slot admission variant.
- Not the per-slot agreement layer.
- Not a full public end-to-end consensus proof.
- Not the production C engine.
NoFutureAdmission is not inductive by itself because Rejoin restores:
processed[n] := persisted[n]The strengthened invariant is:
SafeInv == TypeInvariant /\ NoFutureAdmission /\ PersistedSafeThe exactly-once proof similarly strengthens its invariant so that crash/rejoin and persisted state cannot reintroduce a duplicate admission.
specs/Vortex_DSE_CSlot.tla— late-tolerant C-slot model.specs/Vortex_DSE_CSlot_Proofs.tla— TLAPS proof module forTypeInvariantandNoFutureAdmission.specs/Vortex_DSE_CSlot_ExactlyOnce_Proof.tla— TLAPS proof module forStrictExactlyOnce.specs/EXACTLY_ONCE_EXPLAINED.md— plain-English explanation of the exactly-once proof.
tlapm --toolbox 0 0 specs/Vortex_DSE_CSlot_Proofs.tla
tlapm --toolbox 0 0 specs/Vortex_DSE_CSlot_ExactlyOnce_Proof.tlaExpected result:
All obligations proved.
- Read the TL;DR.
- Inspect
specs/Vortex_DSE_CSlot.tla. - Inspect
specs/Vortex_DSE_CSlot_Proofs.tla. - Inspect
specs/Vortex_DSE_CSlot_ExactlyOnce_Proof.tla. - Read
specs/EXACTLY_ONCE_EXPLAINED.mdfor the plain-language summary. - Continue to the strict-admission repo.
- Continue to the Merkle-agreement repo.