Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Assumptions

planarian @ a924e09 · Spec v4.6 · snapshot main · all versions

IdKindAssumptionInvariants
G1Platform (progress)Some lease holder eventually runs.I12
G2Platform (progress)A fenced worker eventually stops issuing calls, or its calls are refused.I12
G3Platform (progress)Journal writes eventually succeed.I12
G4Platform (progress)Backend calls terminate.I12
P1PlatformBackend Outcome is honest: Succeeded means applied; Unknown means the backend cannot sayI3, I12, I25
P10PlatformA pidfd names one process for as long as it is held, and SO_PEERPIDFD (Linux ≥ 6.5) names the process that connected; so a recycled pid can never be mistaken for the peer (§10, B-6). The gym cannot exercise pid reuse itself: Linux hands out pids in increasing order and wraps only after pid_max (4 194 304 on 64-bit systems, 32 768 on some), so the same pid coming back to another process of the same uid, in another session, inside one request’s lifetime, cannot be arranged reproducibly. identity-peer-exited checks the case the pidfd rule decides (a peer gone before it is resolved). The rarity is not the protection; the pidfd is.
P2Platformactivate_live(revert_to) restores the activation state of revert_to
P3Platformpublish_boot and the override promotion rename are idempotentI1, I16, I23
P4PlatformJournal fsync is durable and the preallocation is writableI6, I7, I12, I15, I18, I24, I25
P5PlatformSHA-256 is collision-resistant (the journal’s hash chain, I18)I2, I8, I18
P6Platformsystemd reports unit state truthfully over D-Bus and honors X-RestartIfChanged / X-StopIfChangedI4, I13, I20, I24
P7PlatformFencing is effective: a stale-epoch call is refused before it mutatesI12, I15
P8PlatformThe kernel and systemd are correctI1, I2, I3, I9, I17, I20, I22
U1Internal unprovenexec::derive: DerivedFacts from the evaluated generation, never from a proposal (I14’s other half; property-tested)I10, I14, I21, I22
U2Internal unprovenuser_authorization and the administrator lookup (planarian-admin membership, root)I17, I19, I22
U3Internal unprovenThe residue classifier (§11: which unit endings are a person’s stop)I13
U4Internal unprovenJournal I/O around the verified chain: framing, torn-tail truncation, checkpoint replaceI18
U5Internal unprovenIdentity resolution (§10): peer credentials and pidfd to logind session, seat, terminalI19, I21, I24
V1Proof-validityvstd’s specifications of Vec, String::as_str, str::unicode_len, str::get_charI5, I10, I11, I16, I19, I21, I22
V10Proof-validityrustc compiles the verified code to a program with the semantics Verus checked.every proof
V11Proof-validityKani and its back end CBMC are sound within the stated bounds.every proof
V2Proof-validityValue is an opaque external type (external_type_specification); nothing about it is assumedI5, I11, I16, I21
V3Proof-validitySerde impls are unverified (external_derive)I5, I6, I14
V4Proof-validityExpectation, CheckContext, ApprovalToken, Incident are opaque external typesI6
V5Proof-validityLedger bookkeeping helpers (push_tag, tag_string, note_why, archive, set_override, lift_override, record_incident, use_token) are external_body with no postcondition: each receives only the field it updates, so the verified fields are untouched by construction; trusted only to terminateI6, I12
V6Proof-validityvstd’s specifications of Vec::push, insert, remove, is_empty and BoxI6
V7Proof-validityThe specifications the proofs prove against (decide_spec, step_spec, inv, chained, the lemma statements) say what the SPEC’s English means. A proof certifies a wrong specification as readily as a right one; each proved invariant has a gym entry written from the English to catch the difference (§17a).every proof
V8Proof-validityVerus is sound: what it reports verified holds of the code.every proof
V9Proof-validityZ3, the solver Verus calls, is sound.every proof