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
{{ message }}
Repository navigation
Commit 9654143
Browse filesBrowse the repository at this point in the historyBrowse files
fix(lean): #125 — law axioms carry Coq's occupancy preconditions; axiom audit + CI job
The Lean mirror of FilesystemCNO transcribed mkdir_rmdir_inverse,
create_unlink_inverse and rename_inverse WITHOUT the preconditions the
Coq lemmas state, so together with mkdir_idempotent and
mkdir_not_identity the axioms derived False (issue #125). LambdaCNO's
eta_equivalence axiom was likewise the unrestricted statement, which
eta_general_claim_is_false already refutes.
FilesystemCNO.lean
- noDirAt / noFileAt / noEntryAt occupancy predicates (verbatim from
FilesystemCNO.v); the three inverse laws now take them as hypotheses
(rename_inverse also takes p1 ≠ p2). Axiom count stays 21 = 21; no
axiom was added, three were strengthened.
- unconditional_mkdir_rmdir_inverse_is_false records the #125
derivation as a theorem: the old law is refutable from the remaining
axioms, so it can never be reintroduced silently.
LambdaCNO.lean
- subst_closed_term: axiom → theorem (immediate from Closed).
- eta_equivalence: axiom → theorem, restricted to noLambda body = true
exactly as Coq's no_lambda guard; unrestricted_eta_equivalence_is_false
records why the restriction is necessary. Axiom count 3 → 1
(y_combinator_not_identity remains, §(c)).
AxiomAudit.lean (new, 96 #guard_msgs)
- pins the signature of every axiom in the six Mathlib-free modules,
prints the three predicates, keeps the #125 derivation and the
unrestricted η use as NEGATIVE controls that must fail to elaborate,
and runs #print axioms over every theorem (no sorryAx anywhere).
check-core.sh + proofs.yml job `lean` + `just verify-lean-core`
- builds CNO, OND, CNOCategory, CNOBridge, FilesystemCNO, LambdaCNO
with the pinned toolchain (elan v4.2.4 sha256-verified in CI) and
runs the audit. Mathlib-dependent modules stay in
verify-all-provers.sh.
Measured locally (lean 4.16.0):
- positive control: 6 modules compiled, 96 guards matched, rc=0.
- mutant M1 (drop the noDirAt hypothesis): build red at
FilesystemCNO.lean:191/300 "function expected".
- mutant M2 (noDirAt := True): six modules build, the audit fails on
the `#print noDirAt` guard, and the #125 `example : False` compiles
again — so only the audit catches a weakened predicate.
- the pre-fix `example : False` no longer elaborates on this tree.
Docs: proof-debt ledger rows refreshed (line numbers, two Lambda axioms
discharged, the mkdir_idempotent plan corrected — it does NOT follow
from the inverse family, that combination IS #125), COOKBOOK Coq
example carries the precondition, AUDIT.adoc row, PROOF-STATUS.
Fixes#125.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QYY8Gp4v4x2J7iSNn1vZ57
0 commit comments