Skip to content

feat: close 49/51 Rocq admits — VFP floating-point proofs#67

Open
avrabe wants to merge 5 commits intomainfrom
feat/rocq-vfp-proofs
Open

feat: close 49/51 Rocq admits — VFP floating-point proofs#67
avrabe wants to merge 5 commits intomainfrom
feat/rocq-vfp-proofs

Conversation

@avrabe
Copy link
Copy Markdown
Contributor

@avrabe avrabe commented Mar 27, 2026

Summary

Closes 49 of 51 previously-admitted Rocq theorems by adding VFP floating-point semantics.

Changes

  • ArmSemantics.v: 20 abstract VFP axioms + full semantics for all 27 VFP instructions
  • ArmState.v: 5 VFP register properties
  • CorrectnessF32.v: 13 Qed (was 13 Admitted)
  • CorrectnessF64.v: 13 Qed (was 13 Admitted)
  • CorrectnessConversions.v: 18 Qed (was 18 Admitted)
  • CorrectnessMemory.v: 4 Qed (was 4 Admitted)
  • Integers.v: 1 Qed (was 1 Admitted)

Scorecard

Metric Before After
Qed 188 242
Admitted 52 2
Axioms ~14 ~35

Remaining 2 admits: Sail integration placeholders in ArmRefinement.v.

Test plan

  • No Rust code changes — cargo test unaffected
  • bazel test //coq:verify_proofs — CI will verify Rocq compilation

🤖 Generated with Claude Code

Added VFP state and instruction semantics to the Rocq proof suite,
closing 49 previously-admitted theorems. Only 2 Sail integration
placeholders in ArmRefinement.v remain admitted.

ArmSemantics.v:
- 20 abstract VFP axioms (f32/f64 arithmetic, comparison, conversion)
- Full semantics for all 27 VFP instructions (was returning None)
- Exhaustive exec_instr with no catch-all

ArmState.v:
- 5 VFP register properties (get/set, preservation lemmas)

Closed proofs:
- CorrectnessF32.v: 13 admits → 13 Qed (f32 arithmetic + comparison)
- CorrectnessF64.v: 13 admits → 13 Qed (f64 arithmetic + comparison)
- CorrectnessConversions.v: 18 admits → 18 Qed (all type conversions)
- CorrectnessMemory.v: 4 admits → 4 Qed (VLDR/VSTR f32/f64)
- Integers.v: 1 admit → 1 Qed (i64_to_i32_to_i64_wrap)

Scorecard: 242 Qed / 2 Admitted (was 188 Qed / 52 Admitted)

The VFP axioms are honest abstractions over IEEE 754 bit patterns.
Proofs are T2 (existence-only). Upgrading to T1 result-correspondence
requires Flocq IEEE 754 definitions — tracked as future work.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@codecov
Copy link
Copy Markdown

codecov bot commented Mar 27, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

avrabe and others added 4 commits March 27, 2026 20:06
Z.mod_mod signature changed in Rocq 9 (Stdlib) — requires explicit
b > 0 proof. Wrap in local lemma to provide the positivity argument.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Z.mod_mod has incompatible signature across Rocq versions. Prove
(a mod b) mod b = a mod b directly using Z.mod_pos_bound + Z.mod_small
which are stable across Rocq 8.x and 9.x.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use 'set (y := ...)' to name the subterm, then prove y's range
separately with Z.mod_pos_bound, then apply Z.mod_small twice.
Avoids all Z.mod_mod and rewrite matching issues.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant