Skip to content

Promote illustrated to main (through a8876d35) - #143

Merged
timbrigham merged 569 commits into
mainfrom
illustrated
Oct 31, 2026
Merged

timbrigham merged 569 commits into
mainfrom
illustrated

Conversation

@timbrigham

Copy link
Copy Markdown
Owner

Brings main up to illustrated (through a8876d3): 378 non-merge commits, 329 files changed, +95,344 / -23,135 lines. main has no commits that illustrated lacks, so this is a fast-forward of content; nothing is reverted.

Licence change. On main the repository is under CC BY-NC-ND 4.0, with the fonts in scripts/fonts/ excepted. After this merge it is under two licences, as NOTICE sets out:

  • Code: Apache License 2.0 (LICENSE). The .lean files, scripts/*.py, tools/**, .github/**, .claude/**, CLAUDE.md, lakefile.toml, lake-manifest.json, lean-toolchain, ssot.json, .zenodo.json and the other configuration files.
  • Documents: CC BY-NC-ND 4.0 (LICENSE-DOCS). The PDFs at the repository root, every Markdown file except CLAUDE.md and those under tools/ and .claude/, and the site layouts in _layouts/.
  • Third-party material is listed in NOTICE and keeps its own licence. This covers the vendored and ported Lean (ZeroParadox/Vendored/, ZeroParadox/Ordinal/NaturalOpsPow.lean), which stays under Apache 2.0 with its original copyright, and the fonts.

What it carries, by area:

  • New Lean files.
    • ZeroParadox/Computability/KleeneChoiceFree.lean: Kleene's second recursion theorem for a transformation given as a code, kleene_cf, with the fixed point an explicit term. It is a fixed point up to eval, not a literal one, and the proof does not use Classical.choice.
    • ZeroParadox/Computability/UniversalChoiceFree.lean: a universal code for Mathlib's Nat.Partrec.Code whose correctness proof does not use Classical.choice, universal_code_cf (existential, built from a small-step machine), and a code that both prints itself and is universal, selfref_universal_exists_cf, stated with the choice-free predicates SelfPrintsCF and UniversalCF. Their equivalence with the Mathlib-phrased predicates (selfPrints_iff_cf, universal_iff_cf) uses Classical.choice.
    • ZeroParadox/Meta/AxiomLedger.lean: a ledger of declared axiom profiles. Elaboration fails if a recomputed profile differs from its row, or if a theorem of the two files above has no row. The check uses the vendored auditor in ZeroParadox/Vendored/CorpusAudit/ (from GuardianEngineAI/corpus) and runs in the new workflow .github/workflows/axiom_ledger.yml. A control file, AxiomLedgerControl.lean, plants one wrong profile, and the workflow fails unless that row and nothing else turns red.
    • ZeroParadox/Information/Disjunctive.lean: disjunctive sequences (tapes ℕ → Bool on which every finite word occurs). The all-false tape is not disjunctive, a primitive recursive disjunctive tape exists, the fair-coin tape is disjunctive almost surely, and no periodic tape is disjunctive. On a disjunctive tape every code word occurs; nothing is said about executing one.
    • ZeroParadox/Die.lean and ZeroParadox/DieCannotBe.lean: the record Motion (an idempotent partial self-map and a step relation) and an index of its premises with members and non-members. Every type carries a Motion, so the premises are stated as hypotheses and carry the content.
    • ZeroParadox/Category/DieNucleus.lean: on a meet-semilattice, a Motion whose map is total, raising and preserves ⊓ gives a Mathlib Nucleus. snapNucleus on Ordinal is a member; the notation carrier SynONote has no snap nucleus (no_snap_nucleus).
    • ZeroParadox/Category/LawvereTwoAdic.lean: on ℤ_[2] and on ℤ, add-one has no fixed point, so no class of self-maps containing it has a relativized Lawvere witness.
    • ZeroParadox/Category/IgnoranceSeam.lean: filling the unknown digits of a finite partial stream with false or with true sends the empty stream to the least or the greatest element of the pointwise order on ℕ → Bool. Complement carries prepend-false to prepend-true.
    • ZeroParadox/Settheory/GraphBisim.lean and ZeroParadox/Settheory/HypersetOrder.lean: finite membership graphs up to bisimulation. Taking the well-founded part preserves bisimilarity (wfPart_same) and dropping loops does not (dropLoops_not_same). Under the subset order, pruning is a kernel operator (pruneKernel).
    • 18 new companion .md files, 17 of them beside .lean files already on main and one beside Disjunctive.lean.
  • Documents. 37 root PDFs are rebuilt, and ZP_Philosophical_Question.pdf and its build script are removed. Versions move in register.md. For example, ZP-E goes from 3.50 to 3.61, ZP-B from 1.18 to 1.30 and ZP-R from 1.6 to 1.20.
  • Claims narrowed or corrected. Some examples:
    • ZP-C's T-BUF now says execution is conditional. Earlier text said unbounded surprisal forces it, but that step is the occurrence commitment, which DA-1 consumes and does not supply.
    • The note on c3_irreversible in ZeroParadox/Valuation/Padic.lean no longer calls 0 the unique point at the base of a nested clopen-ball stack, which holds for every point of ℚ_[2]. It now says topology does not single 0 out: 0 is the additive identity and the only point of valuation top, and whether that makes it least or greatest depends on the order chosen.
    • ZP-R drops the conjecture that Lawvere's theorem accounts for every face, which was measured false. In its place is one statement in Section III that treats the faces case by case.
    • ZP-P now limits quine_atom_unique to x = {x}.
  • Tooling. 61 files under tools/ change, along with the command files under .claude/commands/ and .claude/settings.json.

Known open items: ordinary-severity imprecisions remain in the prose and are tracked. This merge fixes only what the range already contains.

No release is cut by this merge.

probe and others added 30 commits October 14, 2026 16:27
Deletes the local /rely routing leg (the ledger answers it; rely is
admitted at tag) and its probe and consumer scan; guards asserts the
leg is absent and covers prepush-verdict enforcement behaviourally,
including a subprocess row driven by a fail-only seam. Subject
derivation moves to gitRobot ledger_subjects; record.py's dry run
reports validate verbatim; ship.py asks admission(tag). Claude hooks:
git/gh bypasses closed, the truncation hook inverted to an allow-list,
the graphql hook removed, install_hooks --check verifies bodies.
check_prose consumes each baseline match once; check_checkers requires
a positive pass line. /rely round 3 PASS, 45 subjects, BLOCKING:0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
Each of the 13 windowed steps now approves only its tooling-big build,
re-derived with record.module_evidence in the merged checkout; the
window keys are replaced by _repinned_2026_10_14b notes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
settings.json: drop the PreToolUse entry for the deleted
enforce_graphql_timeout.ps1 (R2-O8, RLY31-11) and root every remaining
hook registration at $env:CLAUDE_PROJECT_DIR so it resolves from any
cwd (RLY55-8); test_block_git_gh.ps1 now exits 0.

CLAUDE.md: R-EXEMPT prices the exemption on rely staying admitted at
tag; R-TRUNC describes block_checker_truncation.ps1 as the allow-list
of sinks it is, with the control count from its own test run.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
New theorem valBridge_scale_not_injective (ScaleBridge) backs OrbitDichotomy's
"cannot be made to". Anonymous checks: Or's eliminator refuses a Bool motive
(ExcludedMiddleBridge), proof irrelevance (ChoicePurityInvariant), and no
one-element InfinitudeFloor via member_ne_floor (cited by InfinitudeFloor.md
for the Burris quote). PDF sites restated: ZP-E companion v1.27 (AX-1 "taken
without derivation"), ZP-H companion v1.21 (ZP-D orthogonality stated as
t4_snap_orthogonal, unmeasured "cannot be gradually closed" dropped), ZP-J
v2.12 (quine_unique via boffa_fails_unique), ZP-K v1.27 and Tools (MODALW-4/5:
ZFSet with no_quine_atom, not CIC). MODALW-6: QuineDichotomy header now cites
cantor_via_engine. check_modal --block: 0 new (2 grandfathered).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
…t Tools, in-frame ZP-J countermodel

ZP-K III restores ZP-E's own Path 1 justification, attributed ("which ZP-E held
incompatible with Lean's CIC/MLTT"), per ZPE.lean at 1015f0c. New theorem
t4_state_gap (StateSpace): distinct state vectors are exactly sqrt 2 apart;
the ZP-H companion now gives that as ZP-D's structural reason. Tools: ZFSet
excludes the Quine atom (no_quine_atom) while Lean hosts the OneAtom model
(QuineHost section V); CC-2's set-theoretic self-containment stays prose. New
theorem quine_unique_independent (SetTheoryAFA): on MachinePhase the
always-true selfMem meets bot_self_mem and fails quine_unique; ZP-J points at
it. ChoicePurityInvariant narrowed to propositions about the proof;
QuineDichotomy cites cantor_via_engine with its path and correct consequence;
InfinitudeFloor.md also points at no_infinitudeFloor_of_finite. PDFs rebuilt
at the versions already bumped in this arc; register tokens recomputed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
…E's view

InfinitudeFloor.md now names both class fields the proof of member_ne_floor
consumes (cx_member_strictMono via member_cx_lt_top, cx_floor_eq_iSup via
infinitude_forces_infinite_complexity). ZP-K III keeps ZP-E's attributed view
and answers it: ZFSet excludes a Quine atom (no_quine_atom) while Lean hosts a
one-atom model outside ZFSet (QuineHost on OneAtom). ZP-K rebuilt at v1.27,
register token resynced.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
…its failure

Restate the structural floor class as HasFirstStep (a cover of the bottom)
with axb1_fails_everywhere_iff_dense as its failure; keep "limit point" only
as the metric chart, true of R and of Q2's 0 alike. ZP-F v1.11 -> v1.12,
ZP-F companion v1.14 -> v1.15; PowerSet.lean gains an anonymous example
(Finset.empty_covBy_singleton).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
…_mu_nu)

Density is stated in its true direction at every site: dense iff no element has a
first step, so density rules one out at 0, and one uncovered element does not make
an order dense. Every ℚ₂ sentence in ZP-F and its companion now gives both charts:
0 is a metric limit not reached in finite time (floor_reach_separates_mu_nu) and
v(0) = +∞, the greatest value (padic_addVal_eq_top_iff); neither is a first step,
which is AX-B1. The Dual Limit Remark names the side of each condition. PowerSet.lean
header and T-PS6 heading aligned. PDFs rebuilt at ZP-F v1.12 / companion v1.15.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
Carries the round-2 adversary fix (907bb72, replayed byte-for-byte in
build_zpf.py because gitRobot merge takes no worktree): the Dual Limit
condition (1) is scoped to the ordinal chart, MachinePhase is named as the
counterexample to it as a universal requirement, and "limit ordinal
necessity established in ZP-L" becomes the Order.IsSuccLimit example.

Round 3 (Tim's rulings, 2026-10-15):
- ZP-F section I and companion: being a limit point does not separate R
  from Q2; the topology does (t5_totallyDisconnected, real_no_snap), and
  for the first step the order does (axb1_fails_everywhere_iff_dense).
  Connectedness is named as the second fence where density read as the
  only one; the companion table gains a Topology row.
- Q2's order in both charts: no order instance synthesizes; under the norm
  preorder 0 is least with no first step, under the valuation order 0 is
  greatest. New anonymous example in BottomCannotBe.lean section ROLE
  (Preorder.lift on the norm, NormedField.exists_norm_lt).
- "does not block the snap" -> removes the topological obstruction; ZP-B
  credited with t5_totallyDisconnected.
- v(0) = +inf is set by definition (Padic.addValuationDef's explicit case),
  not produced by the completion; only 0 has it (padic_addVal_eq_top_iff).

No version bump: ZP-F v1.12 and companion v1.15 are unshipped in this arc.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
…2 not 'required'

Restates to the measurements in .claude-local/notes/modalw7_revalidation_2026-10-15.md
(R-REVALIDATE at gate round 3). At zero neither R (field order) nor Q2 (norm preorder)
has a first step, and the norm-preorder fact holds in any nontrivially normed field;
globally R is densely ordered while Q2's norm preorder is not. BottomCannotBe.lean
section ROLE gains the anonymous non-density example (2 is covered by 1, via
axb1_fails_everywhere_iff_dense) and a genericity clause on the r3 gloss. ZP-F and
its companion state both halves, cite addVal_bot for the valuation order, write
"connected, so not totally disconnected (real_no_snap)", and replace "Q2 is required"
with what ZP-F shows. Rebuilt, retokened; no version bump (unshipped v1.12/v1.15).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
…; 'at 0' in the table

Round 5, Tim's three fixes only. AX-B1's first step is named as a cover of bottom
on the state carrier in ZP-A's induced order: the cover hypothesis of
t_snap_given_cover (ZeroParadox/Order/Snap.lean), met by MachinePhase (the
example after it). Neither ordering of Q2 supplies one at its 0. The companion
abstract and closing credit ZP-B (t5_totallyDisconnected) with removing the
topological obstruction and ZP-F with excluding ordered fields. The table cell
is scoped to 0. Register tokens resynced; no version bump (unshipped in this arc).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
Same class as the r5 §VI fix, approved under Tim's item 1. ZP-F §V's
"Neither supplies the first step; that is AX-B1" now names the carrier: a
cover of bottom on the state carrier, the cover hypothesis of
t_snap_given_cover, met by MachinePhase. "Neither" still means ZP-B and ZP-F.
Formal token resynced; no version bump (unshipped in this arc).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
…'needs'

AX-B1's form is HasFirstStep of the state carrier's bottom; t_snap_given_cover assumes the
run's first step is a cover (hcov), which with CC-1 gives HasFirstStep, and the converse fails
(SnapCannotBe ℕ run). Restated at ZP-F §V, §VI and the companion's §IV and closing callout;
"the first step the snap needs" becomes "the first step AX-B1 commits to"; the companion
table bracket points at the state carrier; ZP-F's "(the example after it)" pointers name the
MachinePhase example by content. PDFs rebuilt, register retokened; no version bump (unshipped).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
…collide (V11)

The selftest's record.py dry-runs took the default INDEX basis, i.e. the live
tree. Once a real copy_editor record existed at that tree, the two clean
copy_editor rows collided with it under V11 (one record per step, basis and
revision), so the selftest went 68/70 and check_checkers blocked every push.

Every dry-run base (PANEL_BASE, and so AGREE/UNDEC/FAIL3, plus OTHER) now
carries --ref 3148eef, LICENSE's last change: its LICENSE blob equals today's
(2ac1b2d), and it predates the copy_editor step, so no real copy_editor
record sits at that commit basis (135 copy_editor records checked, 0 there).
Selftest 70/70; the three admit rows now also report ledger validate ok.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
Approves the rebuilt check_modal.py (b1bc667) beside the current build
so the worktree commit can pass V16c, which reads this file from the
main checkout. /rely PASS rely@1e2b0f12 after four failing rounds.
Narrowed to the new blob in the commit after the merge.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
check_modal now flags impossibility claims ("cannot be", "cannot hold",
"cannot exist", "is impossible", ...) under its axiom-scope guard. Such
a claim passes only by naming a real corpus theorem in its own sentence
(not as its subject), a dated measurement, or an explicit status marker
(UNCLASSIFIED, not claimed, open, retracted). Engineer's Takes are
exempt; build scripts may name theorems bare. /rely went 5, 5, 3, 1
blocking across four rounds and passed on the fifth (rely@1e2b0f12).

Corpus: 17 flagged sites pointed or restated. Theorem pointers moved
into the claim's sentence; undated measurements given their dates from
the files and history; quoted external claims marked cited, not
claimed; two method sentences reworded per Tim's ruling ("what no proof
can establish"); the nu-side heading restated as a non-claim.

Deferred by Tim's ruling: the vocabulary gap ("cannot occur", "can
never be", ...), MODALW-15. Residual ordinaries: MODALW-16.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
Drops the old check_modal blob now that the cm-land commit has merged,
and deletes the rollout-window key.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
Re-freezes the convergence bar at the close of the check_modal arc,
per Tim's once-per-arc cadence, and adds frozen_rule_digest per his
2026-10-03 ruling (REGISTRYFREEZE-DESYNC-1). Both values were read off a
live can_push after the narrowing commit. With the rule digest present
the ledger compares on it (basis: rule_digest) and reports held for the
first time since 2026-09-28; pin swaps no longer break the bar.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
Snap.lean: anonymous examples beside t_snap_irreversible. An inflationary
map undoes no strict step and fixes the top (axiom-free);
t_snap_irreversible is its first half at (. join z); dually a
ZP-deflationary map fixes the bottom of L (axiom-free). Reading only for
the pair.

Model.lean: tropical pointer for the N-infinity model (Mathlib Tropical,
Pin 1998 p. 3), scoped to this model; example that scale is
ZP-deflationary, not inflationary, join is inflationary, and scale_bot
follows from deflationarity.

APG.lean: named lemma path_decoration_eq_bot (the bottom of U spreads
backward along a decoration path), with #print axioms and an ssot.json
row; anonymous examples: absorption needs no join, its DecorationUniverse
instance, order-reversal iff v (join x y) <= min, under order-reversal
any join identity is the absorber, the converse refuted (M1 on
Option N-infinity), and the glue refuted without order-reversal (M2).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
Import Mathlib.Algebra.Tropical.Basic (one extra build job, 4038 -> 4039;
its own imports were already in the closure). Anonymous example: trop
sends the model's join to tropical +, its bottom to tropical 0 and scale
to multiplication by trop 1, so scale_bot is zero_mul.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
APG.lean: drop the private-path pointer from the absorption header;
replace the AMM Example 5.4 cite with Example 6.10 p. 26 (A* = A-omega,
nodes from which no infinite path starts), quoted from the paper; M2 gloss
now says "can be different elements"; Aitken Prop. 86 reading restores
its setting (nonzero prime, fractional ideals of a Dedekind domain,
values in Z), p. 33.
Snap.lean: the deflationary arrow descends toward the bottom of L, never
reaches it from a finite value in the N-infinity model, and fixes it.
Model.lean: Pin cite marked as the author's preprint page.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
Anonymous example in the N-infinity model: iterating scale from any
element other than the bottom never reaches the bottom. The Snap.lean
two-arrows Reading now points at it instead of stating it in prose.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
Realize each shell ball_m \ ball_(m+1) as an indicator vector in
L²(ℤ_p, haarZp). The ball-m indicator splits as shell-m plus ball-(m+1),
the two pieces are orthogonal, so the squared lengths add (Pythagoras) and
the two pieces sit the parent's length apart, √p times the child's. The
count p^n times the squared length of a level-n ball indicator is 1. At
p = 2 the shell and the next ball have equal length. Controls: unsquared
count times length is not constant; consecutive ball indicators are not
orthogonal; at p = 3 the shell and next ball differ in length.

PadicStillPoint gains an anonymous example: at p = 2 the level-0 ball
indicator equals the trivial character almost everywhere.

Eight ssot.json rows added via SJV.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DYrKY8CR8AeESMvjGVQtzA
probe and others added 29 commits October 28, 2026 23:15
…, image motion

Registry Motion.Hom: the Mathlib absence is now stated for the pair (partial map, step
relation), since RelHom already is a map of one-label transition systems without the back
clause. Registry Motion: reinstate the papers-library grep leg of the search record.
DieCannotBe § XXV: "Proposition* 5.7 and Proposition 5.8" (Rutten p. 34 prints 5.8
unstarred). Die § XXI header and DieCannotBe § XXV: the map's target is "the image motion
(what the observer shows)"; the observed motion is the source. Hogancamp Def. 3.3 p. 7 and
Obs. 3.5 p. 8 re-confirmed in the filed PDF; no change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
…ns (Tim 2026-10-29)

Die.lean § XXII: IsWeakPullback, PreservesWeakPullbacks (Rutten, Prop A.3 wording)
and its elementwise form over Mathlib's Types.PullbackObj; the elementwise form
holds for ofTypeFunctor Part, ofTypeFunctor Set and their product, choice-free.
Rutten's form gives the elementwise one choice-free; the converse is proved with
Classical.choice. NO-GO: S -> (S -> Prop) -> Prop fails the elementwise form.

Motion.IsBisim (Rutten p. 11) with isBisim_iff, and Prop 5.1, Thm 5.2,
Thm* 5.4, Cor 5.6, Prop* 5.7 (isBisim_ker, isBisim_ker_coalgHom), Prop* 5.9(2),
all [propext, Quot.sound]. isBisim_of_compat replaces the anonymous § XXI bridge;
the stale "hypothesis not checked" Reading now points at § XXII. Indexed in
DieCannotBe § XXVI; registry and ssot.json synced.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
Motion.IsBisim never mentioned the section XX functor; its "Rutten's
bisimulation" gloss was a Reading only. isBisim_iff_coalgHom states it:
IsBisim M N R iff some structure map on the R-related pairs, for
FunctorToTypes.prod (ofTypeFunctor Part) (ofTypeFunctor Set), makes both
projections underlying maps of Endofunctor.Coalgebra.Hom into
M.toCoalgebra and N.toCoalgebra (Rutten, TCS 249 (2000), p. 11).
Axioms: propext, Quot.sound. The IsBisim gloss and the DieCannotBe
section XXVI Reading now point at the theorem.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
…readings, registry pointers

Scope Corollary 5.6 to its greatest-bisimulation and equivalence clauses and
Proposition* 5.7 to its bisimulation half (DieCannotBe index, Die readings,
ssot reasons via SJV, which also star 5.9*(2)). IsBisim / isBisim_ker readings
say "for carriers in one universe"; IsBisim's Rutten sentence moves to Reading.
CONTROL example now states no StepBack in its type. NO-GO functor read as the
neighbourhood functor with a Gumm-Freese p. 1 pointer. Registry: p. 74 on the
canonical pullback plus Gumm-Freese Prop. 3; Convention 4.4 stars; IsBisim
pointer to isBisim_iff_coalgHom; dated grep hit list includes BisimO.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
… § XXIII

Lands the 2026-10-29 probe (Tim: "Probe open items, then land") as a second
coordinate on the adjoined-points switch.

- NInf: Escardo's decreasing-sequence presentation of the one-point
  compactification of N, with his selection function (Thm 3.5), omniscience
  (Cor 3.6) and Lemma 8.1.
- Untagged limit point: every Bool-valued step on NInf meets the OVER
  trichotomy at every point (overTrichotomy_ninf_boolStep) and has a total
  selector (selectedTotal_ninf_boolStep), with no Classical.choice.
- Tagged point: on Option N the uniform Bool-step trichotomy is equivalent
  to LPO (both directions); a uniform total selector there gives LPO.
- WLPO at the point at infinity: a Bool test isolating it, a step from it to
  itself only, or decidable equality on NInf each give WLPO; WLPO iff any two
  points are equal or not; WLPO as data iff DecidableEq NInf; control
  decEq_classical.
- The chain Option N -> NInf -> Part N: forward maps free and commuting with
  Part.ofOption; exact backward maps give LPO, WLPO or excluded middle;
  NInf is equivalent to Mathlib's Computation Unit.
- DieCannotBe § XXVII indexes it; § IX's three-presentations Reading points
  there. LEAN_CUSTOM_REGISTRY entry for NInf with the dated Mathlib search.
  SJV: 67 declarations added, ssot.json re-exported.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
…ttributions

Round 1 ordinary findings (editorial, adversary, prior_art, copy_editor):
A. DieCannotBe § IX: the chain is Option ℕ → NInf → Part ℕ, its middle the
   delay type at Unit (ninfEquivComp), not at ℕ.
B. DieCannotBe § XXVII: ℕ and Option ℕ relabelled from NON-MEMBER to the
   conditional "membership gives LPO; classically both are members", backed
   by selectedTotal_of_classical and a new classical trichotomy example.
   Corpus sweep found no other site of this shape.
C. DieCannotBe § XIII: "measured for ℕ only" now also names Option ℕ;
   over-long line re-wrapped.
D. wlpo_of_eqOr_infty cited as the right-to-left half of Escardó's WLPO row.
E. Part-to-Option Statement backed by the adversary's O3 example.
F. Reading at ∞ re-pointed to overTrichotomy_ninf_boolStep and
   wlpo_of_selfOnlyAt_infty.
G. "a test isolating ∞" glossed as a decidable singleton.
H. § XXVII header names Escardó's ℕ∞, the one-point compactification, first.
I. exists_ne_infty_eq_false_or and separated moved above the MEMBER header.
J. LPO-to-selector absence dated 2026-10-29 with its search.
K. overTrichotomy_ninf_boolStep: hmap avoids y at every z ≠ ∞.
L. wlpo_of_isolating_infty Reading re-pointed to Escardó's p. 4 WLPO row with
   Lemma 3.3 and TypeTopology basic-discontinuity-taboo; Theorem 7.1(1) as
   the weaker-hypothesis form assuming countable choice.
M. Attributions: Knapp 2020 § 4.1 for ninfEquivComp; TypeTopology
   Taboos.WLPO for wlpo_iff_eqOr / decEq_of_wlpoData / wlpoData_of_decEq;
   Escardó p. 4 rows and Corollary 3.7 for lpo_of_exactTag / wlpo_of_tag;
   § XXIII pointer to natInfinity and enat_fp_iff.
N. Registry: the three proofs that follow Escardó named; antitone grep
   returns two lemma hits.
O. JSL 78(3) and CSL 2017 LIPIcs 82 confirmed at the publisher pages; no
   text change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
…ty_iff

1. TypeTopology Taboos.WLPO: its WLPO is type-valued and indexed by points
   of the extended naturals; the corpus form is its WLPO-traditional, linked
   there by WLPO-gives-WLPO-traditional / WLPO-traditional-gives-WLPO and here
   by eqOr_of_wlpo / wlpo_of_eqOr_infty (wlpo_iff_eqOr, decEq_of_wlpoData,
   wlpoData_of_decEq, DieCannotBe section XXVII).
2. Section XXIII carriers in two sides: limit side Cofix natPF_NatListRegime.Obj
   and M natPF_RootCutTrichotomy (final coalgebras of 1 + X); tagged side ENat.
3. New NInf.isolating_infty_iff (Escardo Lemma 3.3), purity line, ssot row;
   section XXVII gloss and cited Reading point to it.
4. Section XXVII selector-converse absence claim records the search as run.
5. Section XXVII cited Reading rewrapped (Escardo-Knapp CSL citation on one line).
6. LEAN_CUSTOM_REGISTRY NInf: eps_spec's last step stated exactly; compare
   Pradic-Brown 2019, Lemma 3.5 and Theorem 3.6, p. 5.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
Escardó's density lemma on NInf; ofOption onto iff LPO; LPO data gives
NInf ≃ Option ℕ (classical control beside it); the round trip as a motion
on Option ℕ ⊕ NInf with Motion.LoopAt. Index entries in DieCannotBe § XXVII.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
fae8cc7629e3 F2 is the same pole-status site as the carve-out's 3ed73350ae85 F1;
fae8cc7629e3 F1 and 4781140c9e59 F3 strengthen a true pre-text. Narrow the
CORRECTED slices, name the strengthening case as MEANING, and state 2c's
condition as DC-74 does (false, or claimed more than the Lean proves).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
…CTED-does-not sites)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
…tems)

Carried ordinary findings from the ninf-retraction and die-tagged arcs, each
checked against its source before applying.

- density (Die, DieCannotBe § XXVII): "the `Y = ℕ∞` instance of" TypeTopology
  `ℕ∞-density` (GenericConvergentSequence l.472 quantifies over every
  ¬¬-separated Y). Reword.
- right-cancellability against ¬¬-separated codomains: anonymous `example` after
  the `density` #check (general codomain Y, [propext, Quot.sound] in a probe);
  the prose now points at it. Example route.
- Part ℕ control: "toPart undoes ofOption up to Part.ofOption"; the map back is
  a two-sided inverse of toPart, backed by an anonymous `example`. Example.
- WLPO-traditional: the `Prop` form, bits complemented (Die wlpo_iff_eqOr,
  DieCannotBe § XXVII). Reword.
- Crossed bridge pairing in § XXVII: wlpo_of_eqOr_infty with
  WLPO-gives-WLPO-traditional; eqOr_of_wlpo with WLPO-traditional-gives-WLPO
  then WLPO-gives-ℕ∞-discrete. Reword.
- Statement line: "a decidable singleton, not a topological claim" restored;
  "TypeTopology's `basic-discontinuity`". Reword.
- § XXVII: "with Lemma 3.3 again"; "Escardó's Theorem 7.1(1)"; de Jong–Escardó
  Lemma 7.2 map stated as f n̲ = 0, f ∞ = 1. Reword.
- wlpo_of_isolating_infty: basic-discontinuity-taboo concludes the ℕ∞-indexed
  WLPO. Reword.
- Registry NInf Reason: the induction reaching eps p = ∞ is ours and
  Pradic–Brown's (Thm 3.6); Escardó's proof uses Lemma 3.3; "follow his"
  narrowed to "formalize his results". Reword.
- Over-long lines reflowed (Die wlpo_of_isolating_infty; DieCannotBe CSL,
  rc and Wärn lines). Reflow.
- § XXIII limit-side carriers: already `Reading:` with no Lean-equivalence
  claim; no change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
- Registry NInf Reason (prior-art O1, adversary O1): both proofs reach
  eps p = ∞ by induction rather than by Escardó's Lemma 3.3; Pradic–Brown's
  inducts on the values p n̲, ours on the bits of eps p (checked against
  eps_spec's `hall` induction on epsSeq p n). Reword.
- Line lengths (ED-NINF-1, adversary O3): DieCannotBe CSL/hmap line, the
  markovPrinciple/left-inverse line, the reflowed basic-discontinuity and
  GenericConvergentSequence lines; Die wlpo_iff_eqOr docstring. Reflow.
- Module names (ED-NINF-2): `ι𝟙`, `ℕ∞-density`, `ι𝟙-dense`,
  `not-finite-is-∞` located in TypeTopology.GenericConvergentSequence (lagda
  l.397, 472, 488, 501) and named once per paragraph (Die density docstring,
  DieCannotBe § XXVII); `basic-discontinuity` named with
  Taboos.BasicDiscontinuity at both DieCannotBe sites. Reword.
- Statement-slot denial (ED-NINF-3): the § XXVII Statement now says the test
  decides membership in {∞}; the hedge moves to a positive Reading line
  ("isolating" is meant logically, as decidable membership in {∞}). Reword.
- "isolates ∞" (ED-NINF-4): the wlpo_of_isolating_infty docstring gets the same
  Statement/Reading treatment. Reword.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
…equivalence

Ticket corpus-ninf-wording-carried items 1, 2 and 8. The "meant logically"
fence and the "decision is the whole content" Reading are replaced by a
pointer to Escardó, arXiv:2609.10447v3, Def. 3.2 (TypeTopology is-isolated)
and by two anonymous examples in DieCannotBe § XXVII: a test isolating ∞ is
equivalent, as data, to ∀ b, Decidable (b = ∞); and such a test exists iff
WLPOData does. Compare-pointers to his Examples 3.3(3)-(5).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
…ings)

Point Examples 3.3(5) at the Nonempty iff example (wlpo_of_isolating_infty
is its Prop-level forward direction); isolating_infty_of_decEq is the
Prop-level form of his discreteness step; JSL 78(3) (2013) locator form;
"WLPOData is inhabited"; restore "deciding membership in {∞}"; author on
the overTrichotomy pointer; compare the ≃ example with TypeTopology WLPO.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NYJd4eT1BYi8RSKhY3zAYq
@timbrigham
timbrigham merged commit b2971eb into main Oct 31, 2026
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant