You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
proofs(coq): close build-oracle cascade + re-enable verify-proofs (closes#49) (#55)
* proofs(coq): partial closure of build-oracle cascade (refs #49)
Fixes the first wave of errors uncovered while attempting to re-enable
the verify-proofs CI oracle. Issue #49 catalogued 5 errors; this PR
closes those + several deeper cascading failures in the same modules.
Closed:
- file_content_operations.v:133 redundant rewrite of Hntype after eqn:
destruct already substituted
- file_content_operations.v:137,140 exact (Hcontra eq_refl) replaced
with destruct (False has no constructors)
- file_content_operations.v:178 destruct (node_type node) missing eqn:
(no substitution into RHS match)
- file_content_operations.v:272 injection on un-reduced match — restructured
with assert + destruct
- filesystem_model.v added has_read_permission (referenced by
copy_move_operations:38, never defined)
- copy_move_operations.v reordered is_prefix definition before its use
at line 62
Verified locally: filesystem_model.v, file_operations.v,
file_content_operations.v compile against coqc 8.18.0. Remaining
errors past line ~110 of copy_move_operations.v and downstream
in filesystem_composition.v are tracked as continuation of #49.
The verify-proofs CI job will be re-enabled in a follow-up PR once the
full module set compiles end-to-end.
Refs #49, #47.
* proofs(coq): close build-oracle cascade + re-enable verify-proofs (closes#49)
Completes the verify-proofs CI guard from issue #49. After PR #50's first
wave (file_content_operations + filesystem_model + copy_move is_prefix
reorder), the cascade ran deeper than the 5 enumerated errors:
Fixed (extends #49):
* copy_move_operations.v: 6 contradiction-direction + reflexivity-via-Hfile
fixes (copy_file_preserves_source, move_creates_destination,
move_preserves_content, move_reversible, copy_preserves_other_paths,
copy_then_move).
* filesystem_composition.v: 4 issues from #49 closed (Lia import,
operation_sequence_reversible rewrite direction + apply_sequence_app
helper, reversible_creates_CNO stale app_nil_r, path_prefix_app_invert
arg shape via Hpre_path save). Plus 4 not-in-#49: well_formed_ancestor_exists
(absurd typo + IHn vs Hind scope + symmetry), mkdir_preserves_well_formed
rewrite direction, rmdir_precondition_after_mkdir repeat-split overshoot.
* posix_errors.v: classic returns Prop but goal is sumbool — switch to
excluded_middle_informative; safe_rmdir <-> rmdir_precondition needs
explicit split (not repeat-split, since is_empty_dir nests).
* rmo_operations.v: omega → lia (Coq 8.14+); multi_pass helpers reordered
before obliterate_removes_path so the proof can use them; rewrite
multi_pass_preserves_tree/mapping in obliterate_preserves_other_*.
* extraction.v: missing Require Import String (Coq doesn't auto-import
on Extract Inductive); proofs/coq/.gitignore adds extracted/.
Three admits added (each model-gap, not laziness):
* filesystem_composition.v:611 Example mkdir_two_dirs_reversible —
non-LIFO sequence-reversal order; not derivable from
two_op_sequence_reversible as stated.
* rmo_operations.v:420 overwrite_pass_equalizes_storage — geometry
hypothesis missing block_overwritten constraint; conclusion provably
false for inputs with mismatched overwrite counters.
* rmo_operations.v:531 obliterate_not_injective — depends on the
admitted overwrite_pass_equalizes_storage.
(Pre-existing: filesystem_composition.v:238 single_op_reversible from
PR #48, OpRmdir/OpDeleteFile model gap.)
CI re-enablement:
* .github/workflows/validation.yml verify-proofs job: drop `if: false`,
install coq via apt-get (37s vs ~5min for coqorg image per
ephapax CI build oracle memory), build with coq_makefile + make -j1,
then Print Assumptions for single_op_reversible,
operation_sequence_reversible, reversible_creates_CNO,
copy_file_reversible to surface the registered model gaps in
the build log.
* proofs/coq/_CoqProject: remove "currently disabled" note,
bump last-verified to Coq 8.18.0 2026-06-01.
Build verified locally: 11/11 .vo files green from clean state.
* ci(verify-proofs): mkdir extracted/ before make (gitignored output dir)
extraction.v's [Extraction "extracted/filesystem.ml" ...] writes into the
gitignored directory, which doesn't exist on a fresh CI clone. Add a one-
line mkdir before the make step.
Local fresh clone reproduces the issue without this fix.
0 commit comments