Skip to content

approach: discharge the stub axioms so the Rocq proofs stop being vacuous (the differential + EMI legs are already right) #271

Description

@avrabe

loom's empirical independence is already strong and Conrad-aligned: the wasm-opt differential (an independent optimizer as oracle) and EMI mutation (input-mutation meta-oracle) are exactly the reference-oracle and meta-oracle moves — keep them.

The approach gap is on the deductive side, and it's a vacuity risk: the Rocq 'proofs' lean on stub axioms. Correctness.v's master theorem rests on Axiom term_instr_bijection … := True; FusedOptimization.v on ~10 assumed wasm-semantics axioms (exec_call, trivial_call_nop, …). An Axiom := True standing in for the load-bearing lemma is the spec-side twin of a green verifier on a vacuous spec — the proof passes because it constrains nothing.

First step: treat every semantic Axiom in proofs/ as a tracked debt with a discharge plan (define + prove, or demote the claim to what the Z3 translation-validation actually establishes). The Z3 validator's own documented soundness gaps (return-value-only equivalence, discarded branch conditions, void auto-pass — docs/analysis/z3-status.md) belong on the same ledger. Generation move, longer-term: derive the Rocq simplify model from the ISLE rules that are the implementation, so the model can't diverge from the rewrite it proves.


Part of a verification-approach sweep (direction, not a defect): prefer generation over checking (a single source emits the artifacts, so drift becomes unrepresentable), use independence adversarially (run a second mechanisation to hunt spec bugs rather than shelving it), and invest reference oracles (one artifact everything else differential-tests against).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions