Skip to content

Commit 824b84f

Browse files
hyperpolymathclaude
andcommitted
docs(proof-needs): reclassify 3 RMO 'Cat-D' holes as Cat-A non-theorems
Closer reading of every remaining Idris2 hole on the P1/P2 attack-list reveals the original triage (and the P1 paragraph from earlier this commit-series) was over-optimistic. The 3 RMO holes I'd labelled Cat-D axiomatic placeholders are actually provably false as stated: * overwriteIrreversibleProof (RMO.idr:130) — conclusion `recovery randomData = Nothing` is refuted by `recovery = Just`. * hardwareEraseIrreversibleProof (RMO.idr:215) — type signature is refuted by any non-empty `Unit -> Filesystem`. * auditTrailCompletenessProof (RMO.idr:270) — conclusion is refuted by `entries = []`. These need theorem-shape redesign (per the #60 / #61 precedent), not believe_me markers. Recorded as follow-up — recommend filing as #119 sub-issues with the explicit refutations. Additionally: * DecEq Path does NOT unblock the primitive-eq batch because it transitively depends on DecEq String. Earlier claim that decEq gives a free path-eq reflexivity lemma was wrong. * Three closure paths for the primitive-eq blocker documented (axioms via believe_me / Nat-interned paths / decEq-style reformulation), each requiring owner sign-off. * Frozen-hole list made explicit. No source changes; documentation honesty only. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent dee1005 commit 824b84f

1 file changed

Lines changed: 70 additions & 24 deletions

File tree

PROOF-NEEDS.md

Lines changed: 70 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -71,33 +71,79 @@ prior-session findings (memory: `feedback_proven_overly_cautious_owed_pattern`
7171
+ `reference_idris2_0_8_0_reduction_map` indicate that several
7272
ostensibly-tractable holes are blocked on primitive eq-reflexivity).
7373

74-
#### Priority 1 — visible, tractable in 1-2 PRs
75-
76-
1. **Idris2 Cat-A theorem-shape redesigns** (per issue #119 Category A):
77-
- `cnoWriteSameContentProof` (`Operations.idr:254`) — restate to `equiv (writeFile p c fs) fs = True` rather than `=`, since `writeFile` re-heads the entries list (`addEntry ∘ removeEntry`). Refuted-as-stated.
78-
- The remaining `appendOnlyAuditLogProof` from issue #119 Cat A is already closed via `Refl` in the live source — verify and remove from inventory if not done.
79-
2. **Idris2 Cat-D documented axioms** (per issue #119 Cat D, RMO physical claims): mark `overwriteIrreversibleProof` + `hardwareEraseIrreversibleProof` as explicit axiomatic placeholders (NIST SP 800-88 + Shannon entropy; physical hardware claims). Idris2 0.8.0 has no `postulate` keyword, so use a labelled-`believe_me` with the axiom name embedded + CI explicit-list gate. Recommended single PR.
80-
3. **Idris2 `auditTrailCompletenessProof`** (`RMO.idr:270`) — tractable AFTER (1) lands, since closure follows from the audit-log invariant (`isAppendOnly` chain ⇒ membership).
81-
82-
#### Priority 2 — known-blocked, need primitive-eq groundwork first
83-
84-
These were initially classified Cat-B (gap-per-PR) in issue #119 but the
85-
2026-06-02 AM session found that **primitive String/Bits8 eq-reflexivity
86-
in Idris2 0.8.0 only reduces on literals**, not opaque variables.
87-
Closure requires either:
88-
(a) a hand-rolled `Path` equality reflexivity lemma threaded through
89-
`all`/`elem`, or (b) migration to a structural set-of-paths model that
90-
sidesteps `==` on primitives:
74+
#### Priority 1 — visible, tractable groundwork (no quick wins)
75+
76+
**Reclassification finding (2026-06-02 PM)**: closer reading of every
77+
remaining hole shows there are **zero** "single-PR closeable" items left
78+
that don't require either (a) primitive-eq groundwork or (b)
79+
theorem-shape redesign. The original Cat-D classification of the 3 RMO
80+
holes was wrong — none of them are sound axiom shapes.
81+
82+
**`cnoWriteSameContent`** (`Operations.idr:254`) — the signature
83+
restate (`equiv` instead of `=`) was already landed in a prior pass.
84+
The body is still blocked by primitive-eq: closure needs reasoning
85+
about `(q == p)` on opaque `Path` values inside `elem`, which Idris2
86+
0.8.0 only reduces on literals.
87+
88+
**3 ostensibly-Cat-D RMO holes are Cat-A non-theorems-as-stated**:
89+
- `overwriteIrreversibleProof` (`RMO.idr:130`): conclusion
90+
`recovery randomData = Nothing` is refuted by `recovery = Just`.
91+
Correct shape needs "no UNIVERSAL recovery" — quantifier flip into
92+
a non-existence claim with an explicit counter-witness.
93+
- `hardwareEraseIrreversibleProof` (`RMO.idr:215`): type
94+
`HardwareEraseProof -> (Unit -> Filesystem) -> Void` is refuted by
95+
any non-empty `recovery` (the function exists trivially). Correct
96+
shape needs the recovery to take the post-erase state as input.
97+
- `auditTrailCompletenessProof` (`RMO.idr:270`): conclusion
98+
`Elem p (map AuditEntry.path entries)` is refuted by `entries = []`.
99+
Correct shape needs an "entry was appended" precondition naming the
100+
insertion event in the log.
101+
102+
These three should be filed as **`#119` sub-issues** with the
103+
non-theorem refutations, in line with the #60 / #61 precedent.
104+
105+
**4 Operations.idr sub-holes** (`?rmdirPrfAfterMkdir`,
106+
`?mkdirPrfAfterRmdir`, `?rmPrfAfterTouch`, `?touchPrfAfterRm`) — same
107+
primitive-eq blocker as the Cat-B set above. Each requires showing
108+
that the post-operation precondition holds, which reduces to
109+
`(p == p) = True` on opaque `Path` — blocked.
110+
111+
#### Priority 2 — primitive-eq groundwork (foundational, owner-decision required)
112+
113+
Every remaining tractable hole reduces to a `(s == s) = True` step on
114+
opaque `String` or `Bits8` — Idris2 0.8.0 only reduces these on
115+
literals. `DecEq Path` does NOT help because it transitively depends
116+
on `DecEq String`, which itself depends on primitive `==`.
117+
118+
Three closure paths, each requiring owner sign-off:
119+
120+
1. **Add `String` / `Bits8` reflexivity axioms** — `axStringEqRefl :
121+
(s : String) -> (s == s) = True := believe_me Refl`, gated by CI
122+
allow-list (per the Cat-D `believe_me` pattern). Smallest change,
123+
but introduces `believe_me` into the proof system which prior
124+
sessions explicitly avoided.
125+
2. **Migrate `Path` to a structural representation** — replace
126+
`String`-component paths with `Nat`-encoded interned identifiers.
127+
`Nat == Nat` IS reducible on opaque values. Bigger migration but
128+
no `believe_me`.
129+
3. **Reformulate every blocked theorem to use `decEq`-style branches**
130+
rather than `==`-style booleans. Avoids touching the `Eq` instance
131+
but ripples through ~20 theorem statements.
132+
133+
Until one path is chosen, the following holes are **frozen**:
91134

92135
- `equivReflProof` (Model.idr:216)
93136
- `equivTransProof` (Model.idr:244)
94-
- `undoRedoIdentityProof` (Composition.idr:215) — also missing the
95-
`isReversible op = True` precondition: provably refuted for
96-
non-reversible `op` since `applyOp (inverse op) (applyOp op fs) ≠ fs`.
97-
**Cat-A redesign required, not Cat-B.**
98-
- `undoRedoCompositionProof` (Composition.idr:235) — same shape issue.
99-
100-
These are tracked under issue #119 with the corrected classification.
137+
- `cnoWriteSameContentProof` (Operations.idr:254)
138+
- 4 `?XXXPrfAfter` sub-holes in Operations.idr
139+
- 7 reversibility theorems in Operations.idr (mkdirRmdir, rmdirMkdir,
140+
touchRm, rmTouch, writeFile, operationIndependence,
141+
cnoWriteSameContent)
142+
143+
Separately, `undoRedoIdentityProof` and `undoRedoCompositionProof`
144+
need a Cat-A redesign (missing `isReversible op = True` precondition;
145+
provably refuted for non-reversible `op`) before primitive-eq is even
146+
relevant.
101147

102148
#### Priority 3 — Tier-S foundational (research-level)
103149

0 commit comments

Comments
 (0)