Skip to content

[Idris2] proof-hole inventory + closure-plan audit (17 remaining holes post-#117) #119

Description

@hyperpolymath

Now that the Idris2 build oracle is green (#106 + #112 + #113 + #117) and --total passes, the 17 remaining ?holes can be triaged honestly. Classification follows the pattern set by #60/#61 (theorem-shape redesign vs. honest closure vs. axiomatic placeholder).

A. Non-theorems as currently stated (need restate)

File Hole Why it cannot close
Operations.idr:242 ?cnoWriteSameContentProof Statement writeFile p c fs = fs requires ordered-list equality. writeFile is addEntry p (File c) (removeEntry p fs), which moves (p, File c) to the head — equivalent up to permutation, not equal. Restate to equiv (writeFile p c fs) fs = True or getEntry p (writeFile p c fs) = getEntry p fs.
RMO.idr:243 ?appendOnlyAuditLogProof Statement newLog = log ++ [entry] for arbitrary newLog is provably false (caller passes any newLog). Restate to (newLog = log ++ [entry]) -> isAppendOnly newLog log or remove the parameter and define appendEntry : Log -> Entry -> Log as the only mutator.

Pattern matches #60 / #61 (refuted by recovery = id / recovery = const empty). File sub-issues per redesign.

B. Tractable but non-trivial (need stdlib lemmas + Bool reasoning)

File Hole Closure sketch
Model.idr:215 ?equivReflProof Needs all (\x => elem x xs) xs = True. Lemma elemRefl : (x : a) -> Elem x (x :: xs) exists in stdlib; thread via all distribution.
Model.idr:222 ?equivSymProof && commutativity on Booleans: prf : a && b = True ⊢ b && a = True. Standard Bool case-split.
Model.idr:230 ?equivTransProof elem is transitive on (lifted to all). Induction on entries.
Composition.idr:215 ?undoRedoIdentityProof Should reduce by redo (undo (execute op state)) ≡ Just (execute op state) after unfolding undo/redo definitions. Try Refl first; if not, case-split on state.undoStack.
Composition.idr:235 ?undoRedoCompositionProof Induction on n with the >>=-chain.

Suitable as gap-per-PR.

C. Hard (ordered-list permutation / dependent-precondition cascade)

File Hole Why hard
Operations.idr:144 ?mkdirRmdirReversibleProof rmdir p (mkdir p fs) = fs requires p to be at head after mkdir + filter to leave entries intact. Ordered-list model bites here. May need equiv restatement.
Operations.idr:155 ?rmdirMkdirReversibleProof Same plus dependent precondition reconstruction.
Operations.idr:164 ?touchRmReversibleProof Same.
Operations.idr:176 ?rmTouchReversibleProof Same plus content reconstruction.
Operations.idr:194 ?writeFileReversibleProof Needs old-content preservation lemma.
Operations.idr:217 ?operationIndependenceProof Sibling-path independence. Requires lemma that addEntry p _ preserves MkdirPrecondition q _ when Not (p = q).
Composition.idr:125 ?sequenceReversibleProof Induction over List Operation with sequence-of-reversibles, depends on single-op reversibility (which needs equiv restatement).
Composition.idr:139 ?compositionReversibleProof Depends on single-op reversibility for op1 + op2.

Realistic plan: restate with equiv instead of =, then close.

D. Axiomatic (placeholder for physical / information-theoretic claims)

File Hole Notes
RMO.idr:128 ?overwriteIrreversibleProof NIST SP 800-88 / Shannon entropy assumption. Document as axiom; do not attempt closure within Idris2.
RMO.idr:213 ?hardwareEraseIrreversibleProof Hardware-level physical claim. Document as axiom.
RMO.idr:253 ?auditTrailCompletenessProof Needs audit-log invariant (isAppendOnly chain ⇒ membership). Tractable after appendOnlyAuditLog redesign (Category A above).

Plan

  1. Category A: 2 sub-issues for restates (mirror [Idris2] close RMO.idr:92 secureDeleteIrreversibleProof — type signature is non-theorem (Tier-S blocker) #60/[Idris2] close RMO.idr:169 gdprDeletionCompliantProof — type signature is non-theorem (Tier-S blocker) #61 pattern). Quick land.
  2. Category B: 5 gap-per-PR closures, now machine-verifiable via [infra] Establish Idris2 build oracle: build-idris2 Justfile target + verify-idris2 CI job + working stdlib provision #70's strict oracle.
  3. Category C: 1 umbrella issue + restate-to-equiv design RFC. Bigger track.
  4. Category D: 3 documented-axiom PRs (postulate-style — but Idris2 doesn't have postulate; use a flag like assumption-NIST-800-88 and gate via CI explicit-list).

References:

🤖 Filed by triage sweep 2026-06-02

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions