proofs.rs

Claim #26 — Verification of <rand_xoshiro::Seed512 as Default>::default (with Aeneas be86ab0f1989d04944292b345b24c435be3ad10a)

<rand_xoshiro::Seed512 as Default>::default

Recorded callable · signature and safety not independently recorded.

Tool: Aeneas be86ab0f1989d04944292b345b24c435be3ad10a

This claim has no explanation of its own. Read the report Overview, and treat the preconditions and evidence below as authoritative. See Concepts and terminology.

Preconditions

Every Seed512 value; default or serde features on x86_64. Mutable-view write-back is specified for the inherent fixed length of 64 bytes.

Evidence

https://github.com/nyuichi/rust-crate-proofs/blob/e7e01c0c19c984cc7e5fb182fd1007c9432766fe/rand_xoshiro/0.8.1/aeneas/2026-11-05/proofs/SeedProofs.lean#L1-L31

What is trusted

From the report

The Rust compiler, official Charon/Aeneas translation, official Aeneas array/scalar models and Lean kernel are trusted. No source adaptations or local helper axioms are used. Eleven newly covered two/four-word state serializers use a custom executable size_of model with explicit layout evidence only for U32=4 and U64=8 bytes. The original generated Types/Funs remain byte-for-byte official outputs. The Lean evidence class is open; this packet supplies exactly these two primitive instances and guards all eleven generated calls and their frozen elaborated instance bindings. Bool and array types have no supplied evidence and are rejected. This is not a universal type-layout theorem. The three eight-word serializers do not call size_of. Archived independent Kani layout checks confirm the Rust u32/u64 sizes under nightly-2026-08-21; Aeneas extraction uses nightly-2026-09-17. ABI agreement across those compilers and correspondence of Rust layout to the Lean evidence remains an explicit, non-mechanical model bridge. All API and supplementary direct/selector theorems have dependency audits permitting only propext, Classical.choice and Quot.sound. Standard shifts, rotations, wrapping arithmetic and array operations use official Aeneas models, rather than body proofs of Rust std implementations. The nine selector proofs additionally rely on Rust compiler inlining of the exact original API call; retained MIR scopes identify each original TryRng method and Rng wrapper. The selector does not replace or assume an opaque original API: generated native callees are body-proved and no unknown external definitions remain. Seed512 byte-view and iterator initialization proofs use the official array-to-slice and slice-iterator models. The mutable reference model specifies write-back of the fixed-length referent; resizing that referent is not a legal returned-slice operation in safe Rust. The Seed512 constructor supplement separately trusts pinned Kani0.68/CBMC/Z3, its August Rust/compiler memory semantics, exact rand_core0.10.1 and default x86_64 configuration. Enabled unwind70 covers all64-byte comparison/copy loops, without disabled checks, observer, private injection, model or original-source adaptation.

Technical limitations

From the report

The 69 mapped contracts comprise 35 direct bodies and 34 compiler-inlined original calls, including exactly 25 external blanket specializations. The five 32-bit-engine try_next_u64 compositions and corresponding external Rng::next_u64 specializations remain outside these Aeneas claims. Seed construction, buffer filling, jump/long_jump, Debug/formatting, serde implementations and other inherited/default/blanket methods are not completed. Seed512 iterator initialization does not prove iterator operation bodies. Serializer layout dictionaries cover only the frozen U32/U64 use closure; arbitrary type layout is not established. Separate Kani seed/state/composition evidence has its own documented compiler and domain boundaries. No seed reachability, period, distribution, independence or cryptographic property follows from these transition formulas. Other targets and feature/dependency combinations are not covered. The constructor check covers the complete64-byte input and replacement domains under that concrete default configuration. It does not establish arbitrary external aliasing, heap/provenance, physical address identity, serde, manual Debug, other targets/configurations or general Rust memory safety. Constructing this public tuple is a data operation; no additional function/source card is invented, and all69 primary mappings remain unchanged.

Tool limitations

Lean backend only, requiring cargo-proofs 0.4.0 or later. The version identifies the official Aeneas Git revision pinned in lake-manifest.json (backends/lean); this revision uses Lean 4.35.0. The recorder checks committed Lean theorem declarations and permits only propext, Classical.choice, and Quot.sound as transitive axioms. It rejects sorryAx and custom axioms, including axiomatized external models. Charon/Aeneas extraction is not rerun. The author must review that the committed functional model matches the recorded Rust source, that the named theorem corresponds to the public API, and that the reported precondition matches the theorem. A checked theorem alone does not establish those links or the adequacy of the specification. The current adapter records the default Cargo configuration, with ordinary Lean module paths and a pinned official Git dependency. Other backends, custom Lake source directories, and local-path Aeneas dependencies are unsupported. See https://proofs.rs/book/aeneas.html and https://github.com/AeneasVerif/aeneas/tree/be86ab0f1989d04944292b345b24c435be3ad10a.

Updated 2026-10-16 00:00 UTC

Aeneas be86ab0f1989d04944292b345b24c435be3ad10a — version details

Read and join the discussion on the report →