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(idris2): close all proof holes at the root (0 holes, 0 new axioms) — #151
Discharge every `?hole` in the Idris2 ABI proof layer with real, total,
machine-checked terms. `idris2 --build valence-shell.ipkg` builds green under
`--total`; `grep` for `?holes` over `proofs/idris2/src` now returns 0 (was 17).
Verified locally with a from-source Idris2 0.8.0 (Chez) toolchain.
The closure adds NO new axioms. The two believe_me-backed primitive-eq axioms in
Filesystem.Axioms remain the only assumptions (still gated by
check-idris2-believe-me.sh) — they are the irreducible primitive-String/Bits8
equality boundary. Where a stated theorem was a genuine non-theorem in the
ordered-list model, its signature was redesigned to the true statement rather
than closed with believe_me, following the #60/#61/#119 precedent.
Model.idr — new structural lemma kit (all proved): removeAbsentId,
removeAddAbsent, keepSelfFalse, lookupConsSame, getEntry/pathExists/isFile/
isDir-after-add, notExistsLookupNothing, updateEntryDeterminedByFilter,
filterIdem, updateOverwrite, updateCanonicalId, removeAddRemove, allElemSelf,
equivSwapHead, equivAddSwap. addEntry/removeEntry/updateEntry promoted to
public export so downstream modules can compute with them.
Operations.idr — touchRmReversible, mkdirRmdirReversible (rmdir applicability
made an explicit precondition; mkdir does not preclude orphan children),
rmdirMkdirReversible/rmTouchReversible/writeFileReversible (canonical-form
precondition; the restore direction is not injective in general),
operationIndependence (restated =→Equiv via equivAddSwap; the = form was a
non-theorem), cnoWriteSameContent (canonical form + equivRefl).
Composition.idr — Applicable + opInvOpId; undoRedoIdentity; compositionReversible
(vacuous isReversible=True gates replaced by genuine per-step reversibility);
sequenceReversible (induction over a new TraceReversible witness);
undoRedoComposition (induction over a new Undoable witness + Maybe-monad laws
applyNSnoc/bindAssoc/bindCong/bindRightId).
RMO.idr — overwriteIrreversible and hardwareEraseIrreversible redesigned to
non-injectivity (information loss); the prior `recovery … = Nothing` and
`… -> Void` shapes were refutable (by recovery=Just / any total recovery).
Docs/tooling: PROOF-NEEDS.md, proofs/idris2/README.md, docs/PROOF-NARRATIVE.adoc,
docs/PROOF_HOLES_AUDIT.md, CLAUDE.md and IDRIS2_AXIOMS.a2ml updated to reflect 0
holes. Fixed a pre-existing verify-idris2 recipe bug (shell `$$` = PID, not `$`)
so `just verify-idris2` reports the hole count correctly.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KfgJznd6jzSeDYsSXGAXkU
Copy file name to clipboardExpand all lines: PROOF-NEEDS.md
+36-10Lines changed: 36 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -31,20 +31,46 @@
31
31
| Coq | (closed) `obliterate_not_injective`|`rmo_operations.v`| Closed via threaded strengthened `Hgeom` through `multi_pass_same_start_same_result` (#58 closed — only standard funext) |
32
32
| Idris2 |`axStringEqRefl` (primitive-eq axiom) |`proofs/idris2/src/Filesystem/Axioms.idr:42`|`believe_me`-backed; registered in `.machine_readable/IDRIS2_AXIOMS.a2ml`; CI-gated via `.github/scripts/check-idris2-believe-me.sh` (Q1-C pilot 2026-06-02 PM) |
|`Model.idr`| 0 (`equivSym` closed via constructor-swap on the propositional form; `equivRefl` + `equivTrans` closed structurally via `Data.List.Quantifiers` Q5-option-3 migration) | 0 |
43
-
|`RMO.idr`| 3 (`overwriteIrreversibleProof`, `hardwareEraseIrreversibleProof`, `auditTrailCompletenessProof`; `appendOnlyAuditLogProof` is closed via `Refl`) | 0 |
44
-
45
-
Drift from previous PROOF-NEEDS.md tally (22 holes) to current (16 holes) is mechanical: `equivSymProof` and `appendOnlyAuditLogProof` closed silently during the 2026-06-02 morning sweep (visible by grep but the inventory text was not updated). No body changes — this paragraph reconciles the count.
46
-
47
-
All `partial` markers in `proofs/idris2/src/Filesystem/*.idr` were cleared 2026-06-02 (PRs #108 + #109, closing #89). The total `partial` count is zero.
| `RMO.idr` | 82 | `secureDeleteNotInjective` (was `?secureDeleteIrreversibleProof`) | CLOSED 2026-06-01 (#60) — signature redesigned to mirror Coq's `obliterate_not_injective`. The prior `recovery fs = fs -> Void` shape was a non-theorem (refuted by `recovery = id`). Closes via `removeEntryDeterminedByFilter` in `Filesystem.Model`.
507
-
| `RMO.idr` | 112 | `?overwriteIrreversibleProof` | PARTIAL — depends on the *information-theoretic random data* assumption (random data of sufficient length destroys information about the original).
508
-
| `RMO.idr` | 178 | `gdprDeletionCompliant` (was `?gdprDeletionCompliantProof`) | CLOSED 2026-06-01 (#61) — signature redesigned to mirror Coq's `obliterate_leaves_no_trace` shape. The prior `recovery = id` shape was a non-theorem (refuted by `recovery = const empty`). Compliance is now a structural property of the deletion record (carries an obliteration witness for the deleted path).
509
-
| `RMO.idr` | 201 | `?hardwareEraseIrreversibleProof` | PARTIAL — depends on a *physical hardware* assumption.
| `mkdirRmdirReversible` | `removeAddAbsent`; rmdir applicability made an explicit precondition (mkdir does not preclude orphan children).
499
+
| `touchRmReversible` | `removeAddAbsent` + unconditional `RmPrecondition` after touch.
500
+
| `rmdirMkdirReversible`, `rmTouchReversible` | canonical-form precondition + `cong MkFS` — the restore direction is not injective in general (a shadowed duplicate key would be lost).
0 commit comments