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
Both prior signatures were non-theorems:
* secureDeleteIrreversible: `recovery fs = fs -> Void` is refuted by
`recovery = id` (id always satisfies the premise, but cannot derive
Void).
* gdprDeletionCompliant: `recovery = id` is refuted by, e.g., `recovery
= const empty` (recovery is an arbitrary parameter; nothing forces it
to be id).
Replace with structurally-correct theorems mirroring the Coq
formalisations:
* `secureDeleteNotInjective` mirrors `rmo_operations.
obliterate_not_injective`: deletion is not injective on filesystem
state — two filesystems that agree off-`p` collapse to the same
post-deletion state. Closes via a new `removeEntryDeterminedByFilter`
lemma in `Filesystem.Model` (one-line `cong MkFS`).
* `gdprDeletionCompliant` mirrors `obliterate_leaves_no_trace`'s
structural shape: GDPR Article 17 compliance is a property of the
deletion record (witness obliteration for the deleted path), not
impossibility-of-recovery quantification. Closes via record
projection.
Supporting changes in `Filesystem/Model.idr`:
* Add `keepIfNotP` named predicate so `removeEntry` and proofs about
it refer to the same lambda (anonymous lambdas at separate call
sites don't unify in Idris2 0.8.0).
* Add `removeEntryDeterminedByFilter` lemma (closed by `cong MkFS`).
* Drive-by: fix `DecEq Path` `decEq Root (Cons _ _) = No absurd` to
use `No (\case Refl impossible)` (Uninhabited instance unavailable
in 0.8.0 base).
* Drive-by: change `equivRefl (MkFS entries) = Refl` (type error —
boolean RHS doesn't reduce to `True`) to a hole `?equivReflProof`,
consistent with the file's existing `equivSym`/`equivTrans` holes.
These drive-bys are required for `idris2 --build valence-shell.ipkg`
to proceed past Model.idr to RMO.idr (where it now successfully
typechecks the new theorems). Pre-existing breakage at
`hardwareEraseIrreversible` (unrelated `() -> Filesystem`-style
parse issue) is out of scope for #60/#61.
Verification (local, IDRIS2_PREFIX=$(idris2-install)):
$ idris2 --build proofs/idris2/valence-shell.ipkg
1/4: Building Filesystem.Model ✓
2/4: Building Filesystem.RMO (passes new theorems, then fails on
pre-existing hardwareEraseIrreversible — #94 territory)
Honest-admit policy: no Admitted / sorry / believe_me /
assert_total / unsafeCoerce introduced. Both new proofs close by
direct construction.
Docs updated:
* `PROOF-NEEDS.md` — #60/#61 closed, reference `?overwriteIrreversible`
as remaining open hole at this layer.
* `docs/PROOF-NARRATIVE.adoc` — table rows for lines 92 + 169 marked
CLOSED with cross-ref.
* `proofs/idris2/README.md` — theorem 15 + 17 entries updated;
irreversibility section rewritten with new signature.
* `CHANGELOG.adoc` — entry added under 2026-06-01 proof work.
Closes#60.
Closes#61.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
| `RMO.idr` | 92 | `?secureDeleteIrreversibleProof` | PARTIAL — depends on an *axiomatic* NIST SP 800-88 assumption (see <<assumption-nist-800-88>>). The Idris-internal portion is provable.
506
+
| `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
507
| `RMO.idr` | 112 | `?overwriteIrreversibleProof` | PARTIAL — depends on the *information-theoretic random data* assumption (random data of sufficient length destroys information about the original).
| `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
509
| `RMO.idr` | 201 | `?hardwareEraseIrreversibleProof` | PARTIAL — depends on a *physical hardware* assumption.
**Approach**: Direct congruence via `removeEntryDeterminedByFilter` in `Filesystem.Model`.
214
+
215
+
The previous signature `recovery fs = fs -> Void` was a non-theorem (refuted by `recovery = id`); the redesigned signature captures the correct information-theoretic content of irreversibility — non-injectivity of the deletion map, hence no left-inverse exists.
0 commit comments