proofs.rs

Claim #2 — Verification of <nohash_hasher::NoHashHasher as Clone>::clone (with Aeneas be86ab0f1989d04944292b345b24c435be3ad10a)

<nohash_hasher::NoHashHasher as Clone>::clone

impl<T> Clone for NoHashHasher<T>
pub fn clone(self: &Self) -> Self

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

All well-typed inputs and states on x86_64 with std enabled or disabled; both debug_assertions settings and their specified success or failure are covered.

Evidence

https://github.com/nyuichi/rust-crate-proofs/blob/9db263d0e4a64a25b8d39b54837ad0e64b827ce3/nohash-hasher/0.2.0/aeneas/2026-11-05/proofs/Proofs.lean#L1-L269

What is trusted

From the report

The Rust compiler, Charon/Aeneas translation, their standard-library models, and the Lean kernel are trusted. The checked theorems use no extra local axioms; their transitive dependencies are limited to Lean's propext, Classical.choice, and Quot.sound. Generic inherited-call proofs additionally trust the pinned Rust optimized MIR compiler Inline pass and, for wide calls, SimplifyLocals-final dead-code elimination before official Charon/Aeneas extraction. The caller/stdlib/original-method source guards and configuration layouts are retained. This is not a compiler-correctness or direct default-declaration source-card proof; no source/LLBC/generated edits, new model or panic stub is introduced. write_str additionally uses the pinned official rustc Inline, RemoveStorageMarkers, ReferencePropagation, DeadStoreElimination-final and SimplifyLocals-final passes through optimized MIR/official Charon and unchanged Aeneas. Source/IR guards connect the actual UFCS caller, standard default and original panic source spans. The final generated body does not read the string or call another function. This trusts compiler inlining/cleanup, not a compiler-correctness proof, panic stub or direct default-method API-card binding.

Technical limitations

From the report

Coverage consists of Default, Clone, ten integer writers, write, and finish in the stated debug/release configurations. General Debug behavior beyond the separate u8/default-format/fixed-writer Kani domain, other inherited Hasher default methods beyond the four supplemental actual-caller API families described here, full trait-instance integration, custom Hash implementations, BuildHasherDefault, and HashMap/HashSet behavior are not verified. In particular, this does not establish that a custom IsEnabled type obeys the required single-integer-write Hash protocol. Other targets were not checked. The upstream no-std IsEnabled doctest refers to the std-only IntMap alias and does not compile; the no-std unit tests and proved method bodies pass. A supplementary clone_from theorem composes the actual clone body with the official standard-library default model and proves exact replacement by source; it is not an independent std-body proof or a separate published API claim. write_length_prefix is the pinned nightly hasher_prefixfree_extras API, not a stable-interface guarantee. The new inherited-family results are supplemental actual-caller contracts, not new registered machine API claims; primary coverage stays14. The generic contracts distinguish debug and release receiver layouts and retain IsEnabled/trait correspondence assumptions. Panic messages, unwinding, global effects, other targets/profiles and const evaluation are not established. Kani900 has narrower concrete-T/reachable-state domains and is not a premise of the generic Lean proofs. The producer consolidated regeneration script was not rerun; earlier successful individual extractions/source guards and complete kernel audits are retained, and the formal recorded build recompiles all13 supplemental declarations. The producer READY compiled_sidecars0 flag was inaccurate; twenty listed compiler sidecars are excluded from this public source subset, with an exact erratum list. write_str is also a pinned nightly hasher_prefixfree_extras API, not a stable-interface guarantee. Its producer READY zero-sidecar flag was inaccurate: sixteen listed compiler sidecars are excluded from this public87-file source subset, with exact hashes and an erratum retained. The write_str results remain supplemental actual-caller contracts with no new registered API claims. Modeled fail panic does not specify panic hooks, messages/locations, unwind/global effects or independent physical memory/alias/lifetime guarantees. Other targets/compiler settings and const evaluation are outside scope. Initial dead TwoPhaseMut-copy translation failures remain historical; the intermediate failing LLBC was not separately frozen before official re-extraction. No source, LLBC or generated body was hand edited. Consolidated portable regeneration/replay has not been run; individual generation, proof and coimport successes are retained.

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 →