Skip to content

Lean FilesystemCNO and LambdaCNO each prove False; lake build reports success and CI never runs the Lean leg #125

Description

@hyperpolymath

Found while assessing CNO as a possible substrate for a claim-checking layer in invariant-path (ADR-0001). Not a request to change the design — a soundness report. Everything below is read off the committed sources.

1. proofs/lean4/FilesystemCNO.lean is inconsistent

Three axioms combine to derive False:

  • :98 axiom mkdir_rmdir_inverse — stated with no precondition, where the Coq counterpart FilesystemCNO.v:353-360 carries one explicitly
  • :309 axiom mkdir_idempotent
  • :233 axiom mkdir_not_identity

Together these yield fs = mkdir p fs for all fs, contradicting mkdir_not_identity. The dropped precondition looks like the whole cause — the Coq side states the same lemma correctly.

2. proofs/lean4/LambdaCNO.lean is inconsistent

:264 axiom eta_equivalence (f : LambdaTerm) : BetaReduceStar (LAbs (LApp f (LVar 0))) f

Unguarded, and refuted by this repository's own Coq: LambdaCNO.v:430 proves its negation. It fails at f = LVar 5 (the shift/capture side condition is missing).

Every theorem in both libraries is therefore vacuous.

3. Why nothing goes red

  • lake build succeeds — an inconsistent axiom set is well-typed, so the build cannot see it.
  • .github/workflows/proofs.yml:9-11 states outright that Lean, Isabelle, Mizar and Idris are not run in CI. So the Lean leg is gated only by proofs/verify-all-provers.sh on a local machine.
  • No #print axioms is ever executed. grep -rn "#print axioms" proofs/lean4/ returns one hit, in a comment (CNOBridge.lean:14). Every "Closed under the global context" claim in PROOF-STATUS.adoc is prose.

Related, lower severity

  • proofs/verify-all-provers.sh:46,53 — the Isabelle and Mizar guards do not set fail=1 when the tool is absent (contrast :19), so ALL-PROVERS-GREEN prints having run four of six named provers.
  • :38 — the Z3 leg checks only the exit code. z3 exits 0 on any sat/unsat, so a result inverted against its comment still passes. proofs/z3/verify.sh:35 also references cno_properties.smt2, which does not exist in the repo.
  • LandauerDerivation.v:404 Axiom cno_zero_energy_dissipation_derived — the flagship thermodynamic claim (is_CNO p -> work_dissipated = 0) is an axiom despite the _derived suffix, and is absent from PROOF-STATUS.adoc's otherwise-exhaustive remainder list. Same for :343 cno_preserves_shannon_entropy.
  • CNOCategory.v:20,98 — the category laws rest on Coq.Logic.ProofIrrelevance. Consistent, but not "zero project axioms" as the summary implies.

Credit where due

The Coq side is genuinely strong and is not affected by 1 or 2: OND.v (17 Qed, zero axioms) and FilesystemCNO.v (35 Qed, zero axioms) are clean, there are zero real Admitted/sorry/postulate anywhere in the corpus, and several physics files explicitly correct their own triage docs where a claimed discharge was inaccurate. The problem is specifically the Lean mirror plus the summary layer.

Suggested minimum

  1. Restore the precondition on mkdir_rmdir_inverse; delete or guard eta_equivalence.
  2. Add #print axioms on every Lean headline theorem and Print Assumptions on every Coq one, with the gate diffing against an expected-axioms allowlist.
  3. Make Isabelle/Mizar absence a hard failure, or rename the banner to name only what actually ran.
  4. Assert the expected sat/unsat per Z3 block rather than trusting the exit code.

🤖 Generated with Claude Code

Activity

  1. added
    cicdCI/CD: workflows, actions, lockfiles, pins, runners, release gates
    and removed on Aug 24, 2026
  2. hyperpolymath commented on Sep 22, 2026

    @hyperpolymath
    OwnerAuthor

    Owner ruling 2026-09-22 (selection UI; booked on hyperpolymath/standards#787, rows D78–D81): fix first. This issue is ordered before any other absolute-zero work in the residual-evidence-types family plan (Phase 4a). The honesty-gate items (paths: filter, z3 … || true, skipped provers, no assumption check) are filed separately and follow it.

    Acceptance criteria for the fix, as ruled:

    • Watched failing today: a scratch example : False := … built from the current FilesystemCNO.lean / LambdaCNO.lean axioms compiles.
    • Green: the same example no longer type-checks; lake build is green; #print axioms on each headline theorem lists no sorryAx and only the intended axioms (the axioms carry the preconditions the Coq versions state, or become definitions).
    • Mutant: re-add one unconditional axiom; the False example compiles again.
    • The Lean leg runs in CI on the fix commit (today proofs.yml never runs it) and the run id is cited here.
    • CNOBridge.lean is measured in CI, not on a workstation (the Mathlib fetch returned 403 locally on 2026-09-22).

    🤖 Generated with Claude Code

  3. hyperpolymath commented on Sep 22, 2026

    @hyperpolymath
    OwnerAuthor

    Fix is up as #165 (branch fix/125-lean-axiom-preconditions, commit 9654143).

    • FilesystemCNO.lean: the three inverse laws now carry the occupancy preconditions the Coq versions state (noDirAt / noFileAt / noEntryAt); unconditional_mkdir_rmdir_inverse_is_false proves the old unconditional form refutable from the remaining axioms. 21 → 21 axioms, three strengthened.
    • LambdaCNO.lean: subst_closed_term and the restricted eta_equivalence are theorems; unrestricted_eta_equivalence_is_false proves the general η claim refutable. 3 → 1 axioms.
    • AxiomAudit.lean (96 #guard_msgs) pins every remaining axiom's signature, the predicates' definitions, #print axioms for every theorem, and two negative controls: this issue's example : False derivation and the unrestricted η use must fail to elaborate.
    • CI: new lean job in proofs.yml, green on the PR head — run 35792229108, job 106963182842.

    Mutants measured locally: deleting the noDirAt hypothesis reds the build (function expected at consumers); weakening noDirAt to True builds green but fails exactly one audit guard, and the False derivation compiles again against that tree. The audit, not the build, is what catches the second shape.

    🤖 Generated with Claude Code

  4. hyperpolymath commented on Sep 22, 2026

    @hyperpolymath
    OwnerAuthor

    Landed on main as 828399a (PR #165, merged 2026-09-22T23:07:11Z).

    Receipt: Proofs run 35795836824 on main, job "Lean — core CNO (6 modules + axiom audit)" = success (https://github.com/hyperpolymath/absolute-zero/actions/runs/35795836824). proofs/lean4/AxiomAudit.lean carries the negative controls (the #125 False derivations must now fail with the recorded error) and Section D also walks every theorem in the six modules with collectAxioms against a closed allow-list, so a new sorryAx or an unlisted axiom fails the job.

    For the record: the merge rule-suite (4183559643) reads bypass — the pull_request rule was failing on CodeRabbit's changes-requested review and the code_scanning rule was still expecting the CodeQL results for the autofix head da9289c. Every post-merge push run on main is green (CodeQL, Hypatia, Proofs, Rust CI, Governance, Secret Scanner, Language Policy, Mirror).

    🤖 Generated with Claude Code

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

    cicdCI/CD: workflows, actions, lockfiles, pins, runners, release gates

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions